[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