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==--