From do-not-reply at jboss.org Wed Oct 27 08:28:30 2010
Content-Type: multipart/mixed; boundary="===============2808735703596058927=="
MIME-Version: 1.0
From: do-not-reply at jboss.org
To: gatein-commits at lists.jboss.org
Subject: [gatein-commits] gatein SVN: r4861 -
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp.
Date: Wed, 27 Oct 2010 08:28:30 -0400
Message-ID: <201010271228.o9RCSUJl025122@svn01.web.mwc.hst.phx2.redhat.com>
--===============2808735703596058927==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Author: chris.laprun(a)jboss.com
Date: 2010-10-27 08:28:29 -0400 (Wed, 27 Oct 2010)
New Revision: 4861
Modified:
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/MOPCons=
umerStructureProvider.java
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSer=
viceIntegration.java
Log:
- GTNPORTAL-1600, GTNWSRP-112: Made MOPConsumerStructureProvider listen to =
page events so that the internal page information structure is updated acco=
rdingly.
- Updated listeners registration to use proper method version since we're u=
sing eXo Kernel 2.2.5-GA now.
Modified: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/=
MOPConsumerStructureProvider.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/MOPCon=
sumerStructureProvider.java 2010-10-27 12:22:03 UTC (rev 4860)
+++ portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/MOPCon=
sumerStructureProvider.java 2010-10-27 12:28:29 UTC (rev 4861)
@@ -24,11 +24,15 @@
package org.gatein.portal.wsrp;
=
import org.exoplatform.container.ExoContainer;
+import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.mop.Described;
import org.exoplatform.portal.pom.config.POMSession;
import org.exoplatform.portal.pom.config.POMSessionManager;
+import org.exoplatform.portal.pom.data.Mapper;
import org.exoplatform.portal.pom.data.PageKey;
import org.exoplatform.portal.pom.spi.wsrp.WSRP;
+import org.exoplatform.services.listener.Event;
+import org.exoplatform.services.listener.Listener;
import org.gatein.common.util.ParameterValidation;
import org.gatein.mop.api.content.Customization;
import org.gatein.mop.api.workspace.ObjectType;
@@ -54,35 +58,40 @@
* @author Chris Laprun
* @version $Revision$
*/
-public class MOPConsumerStructureProvider implements ConsumerStructureProv=
ider
+public class MOPConsumerStructureProvider extends Listener implements ConsumerStructureProvider
{
+ private static final String PAGES_CHILD_NAME =3D "pages";
private final POMSessionManager pomManager;
private Map pageInfos;
private Map windowIdToUUIDs;
+ private boolean pagesHaveBeenInitialized;
=
public MOPConsumerStructureProvider(ExoContainer container)
{
pomManager =3D (POMSessionManager)container.getComponentInstanceOfTy=
pe(POMSessionManager.class);
windowIdToUUIDs =3D new HashMap();
+ pageInfos =3D new HashMap();
}
=
public List getPageIdentifiers()
{
- if (pageInfos =3D=3D null)
+ if (!pagesHaveBeenInitialized)
{
+ // initialize page information
POMSession session =3D pomManager.getSession();
Workspace workspace =3D session.getWorkspace();
Collection sites =3D workspace.getSites(ObjectType.PORTAL_S=
ITE);
=
- pageInfos =3D new HashMap();
for (Site site : sites)
{
- Page page =3D site.getRootPage().getChild("pages");
+ Page page =3D getPagesFrom(site);
if (page !=3D null)
{
- processPage(page, true);
+ addPage(page, true);
}
}
+
+ pagesHaveBeenInitialized =3D true;
}
=
LinkedList identifiers =3D new LinkedList(pageInfos.=
keySet());
@@ -90,8 +99,16 @@
return identifiers;
}
=
- private void processPage(Page page, boolean ignoreCurrent)
+ private Page getPagesFrom(Site site)
{
+ // a site contains a root page with templates and pages
+ // more info at http://code.google.com/p/chromattic/wiki/MOPUseCases
+
+ return site.getRootPage().getChild(PAGES_CHILD_NAME);
+ }
+
+ private void addPage(Page page, boolean ignoreCurrent)
+ {
if (!ignoreCurrent)
{
Described described =3D page.adapt(Described.class);
@@ -106,7 +123,7 @@
{
for (Page child : children)
{
- processPage(child, false);
+ addPage(child, false);
}
}
}
@@ -185,6 +202,55 @@
session.close(true);
}
=
+ @Override
+ public void onEvent(Event event) throws Exception
+ {
+ String eventName =3D event.getEventName();
+
+ // get the MOP page from the event data
+ org.exoplatform.portal.config.model.Page portalPage =3D event.getDat=
a();
+ Site site =3D pomManager.getSession().getWorkspace().getSite(Mapper.=
parseSiteType(portalPage.getOwnerType()), portalPage.getOwnerId());
+ Page page =3D getPagesFrom(site).getChild(portalPage.getName());
+
+ if (page !=3D null)
+ {
+ if (DataStorage.PAGE_CREATED.equals(eventName))
+ {
+ // add information for new page
+ addPage(page, false);
+ }
+ else if (DataStorage.PAGE_REMOVED.equals(eventName))
+ {
+ removePage(page);
+ }
+ else if (DataStorage.PAGE_UPDATED.equals(eventName))
+ {
+ removePage(page);
+ addPage(page, false);
+ }
+ }
+ }
+
+ private void removePage(Page page)
+ {
+ Described described =3D page.adapt(Described.class);
+ String name =3D described.getName();
+
+ PageInfo pageInfo =3D pageInfos.get(name);
+ if (pageInfo !=3D null)
+ {
+ // remove window information associated to the page
+ List windows =3D pageInfo.getChildrenWindows();
+ for (String window : windows)
+ {
+ windowIdToUUIDs.remove(window);
+ }
+
+ // remove page info
+ pageInfos.remove(name);
+ }
+ }
+
private static class PageInfo
{
private String uuid;
Modified: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/=
WSRPServiceIntegration.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSe=
rviceIntegration.java 2010-10-27 12:22:03 UTC (rev 4860)
+++ portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/WSRPSe=
rviceIntegration.java 2010-10-27 12:28:29 UTC (rev 4861)
@@ -27,6 +27,7 @@
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.container.xml.InitParams;
+import org.exoplatform.portal.config.DataStorage;
import org.exoplatform.portal.pc.ExoKernelIntegration;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.listener.ListenerService;
@@ -267,20 +268,26 @@
// add our Session event listener to the ListenerService for use in =
org.exoplatform.web.GenericHttpListener
ListenerService listenerService =3D (ListenerService)container.getCo=
mponentInstanceOfType(ListenerService.class);
SessionEventListenerAndBroadcaster sessionEventBroadcaster =3D new S=
essionEventListenerAndBroadcaster();
- sessionEventBroadcaster.setName("org.exoplatform.web.GenericHttpList=
ener.sessionCreated");
- listenerService.addListener(sessionEventBroadcaster);
- sessionEventBroadcaster.setName("org.exoplatform.web.GenericHttpList=
ener.sessionDestroyed");
- listenerService.addListener(sessionEventBroadcaster);
=
+ // events from org.exoplatform.web.GenericHttpListener
+ listenerService.addListener("org.exoplatform.web.GenericHttpListener=
.sessionCreated", sessionEventBroadcaster);
+ listenerService.addListener("org.exoplatform.web.GenericHttpListener=
.sessionDestroyed", sessionEventBroadcaster);
+
try
{
consumerRegistry =3D new JCRConsumerRegistry(container);
consumerRegistry.setFederatingPortletInvoker(federatingPortletInv=
oker);
consumerRegistry.setSessionEventBroadcaster(sessionEventBroadcast=
er);
=
+ // create ConsumerStructureProvider and register it to listen to =
page events
+ MOPConsumerStructureProvider structureprovider =3D new MOPConsume=
rStructureProvider(container);
+ listenerService.addListener(DataStorage.PAGE_CREATED, structurepr=
ovider);
+ listenerService.addListener(DataStorage.PAGE_REMOVED, structurepr=
ovider);
+ listenerService.addListener(DataStorage.PAGE_UPDATED, structurepr=
ovider);
+
// migration service
MigrationService migrationService =3D new JCRMigrationService(con=
tainer);
- migrationService.setStructureProvider(new MOPConsumerStructurePro=
vider(container));
+ migrationService.setStructureProvider(structureprovider);
consumerRegistry.setMigrationService(migrationService);
=
consumerRegistry.start();
--===============2808735703596058927==--