[jboss-svn-commits] JBL Code SVN: r9735 - in labs/jbosslabs/trunk/portal-extensions: forge-common/src/java/org/jboss/forge/common/ejb3 and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Feb 24 14:40:31 EST 2007


Author: adamw
Date: 2007-02-24 14:40:31 -0500 (Sat, 24 Feb 2007)
New Revision: 9735

Modified:
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
   labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
   labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
   labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
Log:
http://jira.jboss.com/jira/browse/JBLAB-818

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java	2007-02-24 15:27:39 UTC (rev 9734)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java	2007-02-24 19:40:31 UTC (rev 9735)
@@ -39,6 +39,14 @@
      */
     public static final String PORTAL_OBJECT_LABS_MARKER = "labs";
 
+    /**
+     * Name of a portlet preference, which, if present, is used when
+     * creating project pages, in case there is one then more portlets
+     * of the same type on a page; the unique id is then used to generate
+     * a unique name. 
+     */
+    public static final String UNIQUE_ID_PREFERENCE_NAME = "windowUniqueId";
+
     /*
 	 * Portal pages names.
 	 */

Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-24 15:27:39 UTC (rev 9734)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/ejb3/ProjectPagesService.java	2007-02-24 19:40:31 UTC (rev 9735)
@@ -26,9 +26,12 @@
      * @param projectId Id of the project.
      * @param pageName Name of the page on which the window should be. Null, if it is
      * the default page.
+     * @param uniqueId A unique id of the window on a page, if there is more
+     * then one portlet of the given type on the page; null otherwise.
      * @return Name of a portal window for the given portlet. 
      */
-    public String createWindowId(String portletName, String projectId, String pageName);
+    public String createWindowId(String portletName, String projectId, String pageName,
+                                 String uniqueId);
 
     /**
      * DEBUG ONLY

Modified: labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-24 15:27:39 UTC (rev 9734)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projectpages/ProjectPagesServiceBean.java	2007-02-24 19:40:31 UTC (rev 9735)
@@ -33,10 +33,7 @@
 import javax.ejb.TransactionAttributeType;
 import javax.ejb.Local;
 import javax.security.jacc.PolicyContext;
-import java.util.Set;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * @author <a href="mailto:adamw at aster.pl">Adam Warski</a>
@@ -332,12 +329,15 @@
      * @param pageName Name of the subpage, on which the instance will be placed.
      * @param portletName Name of portlet, which the instance should reference.
      * @param portletIds Set where ids of portlet instances objects should be added.
+     * @param uniqueId A unique id of the instance on a page, if there is more
+     * then one portlet of the given type on the page; null otherwise.
      * @return The specified instance.
      * @throws UnknownPortletException In case the portlet is not found.
      * @throws UnknownPortalException In case of a portal exception.
      */
     private Instance getProjectPortletInstance(String projectId, String pageName,
-                                               String portletName, Set<String> portletIds)
+                                               String portletName, Set<String> portletIds,
+                                               String uniqueId)
             throws UnknownPortletException, UnknownPortalException {
         // Determining the portlet id.
         ProjectsPortlet portlet;
@@ -354,7 +354,8 @@
         String portletId = portlet.getPortalId();
 
         // Constructing the instance id.
-        String instanceId = ForgeHelper.createCamelCase(portletName, projectId, pageName, "instance");
+        String instanceId = ForgeHelper.createCamelCase(portletName, projectId,
+                pageName, uniqueId, "instance");
         portletIds.add(instanceId);
 
         // Checking if the instance already exists.
@@ -396,11 +397,13 @@
      * @param region Region of the page, where the window should be placed.
      * @param height Height on the page, where the window should be placed.
      * @param portalObjIds Set where ids of used portal objects should be added.
+     * @param uniqueId A unique id of the window on a page, if there is more
+     * then one portlet of the given type on the page; null otherwise.
      */
     private void addInstanceToPage(String projectId, String pageName, String portletName,
-                                   Page page, Instance instance,
-                                   String region, int height, Set<PortalObjectId> portalObjIds) {
-        String windowId = createWindowId(portletName, projectId, pageName);
+                                   Page page, Instance instance, String region, int height,
+                                   Set<PortalObjectId> portalObjIds, String uniqueId) {
+        String windowId = createWindowId(portletName, projectId, pageName, uniqueId);
 
         Window window = page.getWindow(windowId);
         if (window == null) {
@@ -437,13 +440,43 @@
                                    Set<PortalObjectId> portalObjIds, Set<String> portletIds) {
         String pageName = projectPage.getName();
 
+        // Counting the number of occurences of each portlet on the page.
+        Map<String, Integer> occurences = new HashMap<String, Integer>();
+        for (org.jboss.forge.common.projects.project.Portlet portlet : projectPage.getPortlets()) {
+            String portletName = portlet.getName();
+            Integer current = occurences.get(portletName);
+            occurences.put(portletName, current == null ? 1 : current + 1);
+        }
+
         try {
             Page page = getProjectPage(projectId, pageName, portalObjIds);
-            
+
+            // A counter for numbering portlet windows occuring more than once,
+            // which don't have a unique id preference set.
+            int counter = 0;
+
             for (org.jboss.forge.common.projects.project.Portlet portlet : projectPage.getPortlets()) {
+                String uniqueId = null;
+                Integer portletOccurences = occurences.get(portlet.getName());
+
+                if ((portletOccurences != null) && (portletOccurences > 1)) {
+                    // The portlet occurs more than once on the page; getting the unique id
+                    // for it, or auto-generating.
+                    for (Preference pref : portlet.getPreferences()) {
+                        if (Constants.UNIQUE_ID_PREFERENCE_NAME.equals(pref.getName())) {
+                            uniqueId = pref.getValue();
+                            break;
+                        }
+                    }
+
+                    if (uniqueId == null) {
+                        uniqueId = Integer.toString(counter++);
+                    }
+                }
+
                 // Getting the instance.
                 Instance instance = getProjectPortletInstance(projectId, pageName,
-                        portlet.getName(), portletIds);
+                        portlet.getName(), portletIds, uniqueId);
 
                 // Setting preferences.
                 for (Preference pref : portlet.getPreferences()) {
@@ -451,8 +484,9 @@
                 }
 
                 // Adding the window.
-                addInstanceToPage(projectId, pageName, portlet.getName(), page,instance,
-                        portlet.getRegion(), Integer.parseInt(portlet.getHeight()), portalObjIds);
+                addInstanceToPage(projectId, pageName, portlet.getName(), page, instance,
+                        portlet.getRegion(), Integer.parseInt(portlet.getHeight()), portalObjIds,
+                        uniqueId);
             }
         } catch (UnknownPortletException e) {
             e.printStackTrace();
@@ -513,7 +547,8 @@
         }
     }
 
-    public String createWindowId(String portletName, String projectId, String pageName) {
-        return ForgeHelper.createCamelCase(portletName, projectId, pageName, "window");
+    public String createWindowId(String portletName, String projectId, String pageName,
+                                 String uniqueId) {
+        return ForgeHelper.createCamelCase(portletName, projectId, pageName, uniqueId, "window");
     }
 }

Modified: labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-24 15:27:39 UTC (rev 9734)
+++ labs/jbosslabs/trunk/portal-extensions/forge-mapper/src/java/org/jboss/labs/mapper/command/LabsPortalObjectCommandFactoryImpl.java	2007-02-24 19:40:31 UTC (rev 9735)
@@ -113,7 +113,7 @@
         try {
             if (projectId == null) {
                 return LabsServices.getProjectPagesService().createWindowId(
-                        FREEZONE_PORTLET_NAME, null, page.getName());
+                        FREEZONE_PORTLET_NAME, null, page.getName(), null);
             } else {
                 String pageName = null;
                 if (!Tools.objectsEqual(projectId, page.getName())) {
@@ -122,7 +122,7 @@
                     pageName = page.getName();
                 }
                 return LabsServices.getProjectPagesService().createWindowId(
-                        FREEZONE_PORTLET_NAME, projectId, pageName);
+                        FREEZONE_PORTLET_NAME, projectId, pageName, null);
             }
         } catch (ServiceRetrievalException e) {
             return null;




More information about the jboss-svn-commits mailing list