[gatein-commits] gatein SVN: r5008 - in portal/trunk/component/wsrp/src: test/java/org/gatein/portal/wsrp/structure and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 10 07:35:50 EST 2010


Author: chris.laprun at jboss.com
Date: 2010-11-10 07:35:49 -0500 (Wed, 10 Nov 2010)
New Revision: 5008

Modified:
   portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProvider.java
   portal/trunk/component/wsrp/src/test/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProviderTestCase.java
Log:
- GTNWSRP-112: we only get page deletion events after the JCR page has already been removed so had to work around this. Adapted tests.

Modified: portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProvider.java
===================================================================
--- portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProvider.java	2010-11-10 12:09:59 UTC (rev 5007)
+++ portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProvider.java	2010-11-10 12:35:49 UTC (rev 5008)
@@ -88,7 +88,7 @@
    private void addPage(Page page)
    {
       Described described = page.adapt(Described.class);
-      PageInfo pageInfo = new PageInfo(page.getObjectId(), described.getName());
+      PageInfo pageInfo = new PageInfo(page.getObjectId(), described.getName(), page.getName());
       pageInfos.put(pageInfo.getName(), pageInfo);
       UIContainer container = page.getRootComponent();
       processContainer(container, pageInfo);
@@ -194,6 +194,16 @@
       org.exoplatform.portal.config.model.Page portalPage = event.getData();
       Page page = structureAccess.getPageFrom(portalPage);
 
+      if (page == null && DataStorage.PAGE_REMOVED.equals(eventName))
+      {
+         // if we try to remove a page, when we get this event, the page has already been removed from JCR
+         // so we need to work around that fact by retrieving the corresponding PageInfo from the portal page title
+         // which should match the Described name and check that it matches the internal name before removing it
+         removePage(portalPage.getTitle(), portalPage.getName());
+
+         return;
+      }
+
       if (page != null)
       {
          if (DataStorage.PAGE_CREATED.equals(eventName))
@@ -201,10 +211,6 @@
             // add information for new page
             addPage(page);
          }
-         else if (DataStorage.PAGE_REMOVED.equals(eventName))
-         {
-            removePage(page);
-         }
          else if (DataStorage.PAGE_UPDATED.equals(eventName))
          {
             removePage(page);
@@ -218,8 +224,13 @@
       Described described = page.adapt(Described.class);
       String name = described.getName();
 
+      removePage(name, page.getName());
+   }
+
+   private void removePage(String name, String internalName)
+   {
       PageInfo pageInfo = pageInfos.get(name);
-      if (pageInfo != null)
+      if (pageInfo != null && internalName.equals(pageInfo.getInternalName()))
       {
          // remove page info
          pageInfos.remove(name);
@@ -230,12 +241,18 @@
    {
       private final String uuid;
       private final Map<String, String> childrenWindows = new HashMap<String, String>();
+
+      /** Name as provided by Described */
       private final String name;
 
-      private PageInfo(String uuid, String name)
+      /** Name as automatically generated */
+      private final String internalName;
+
+      private PageInfo(String uuid, String name, String internalName)
       {
          this.uuid = uuid;
          this.name = name;
+         this.internalName = internalName;
       }
 
       public String getUUID()
@@ -243,6 +260,11 @@
          return uuid;
       }
 
+      public String getInternalName()
+      {
+         return internalName;
+      }
+
       public List<String> getChildrenWindows()
       {
          return new ArrayList<String>(childrenWindows.keySet());

Modified: portal/trunk/component/wsrp/src/test/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProviderTestCase.java
===================================================================
--- portal/trunk/component/wsrp/src/test/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProviderTestCase.java	2010-11-10 12:09:59 UTC (rev 5007)
+++ portal/trunk/component/wsrp/src/test/java/org/gatein/portal/wsrp/structure/MOPConsumerStructureProviderTestCase.java	2010-11-10 12:35:49 UTC (rev 5008)
@@ -132,9 +132,15 @@
 
    public void testPageDeletionEvent() throws Exception
    {
+      String pageToRemove = "page1";
+
       org.exoplatform.portal.config.model.Page portalPage = mock(org.exoplatform.portal.config.model.Page.class);
-      when(structureAccess.getPageFrom(portalPage)).thenReturn(page1);
+      when(portalPage.getName()).thenReturn(createInternalNameFrom(pageToRemove));
+      when(portalPage.getTitle()).thenReturn(pageToRemove);
 
+      // on delete, we actually get the event after the page has been removed from JCR so we don't have an actual page
+      when(structureAccess.getPageFrom(portalPage)).thenReturn(null);
+
       int pageNumber = provider.getPageIdentifiers().size();
 
       provider.onEvent(new Event<DataStorage, org.exoplatform.portal.config.model.Page>(DataStorage.PAGE_REMOVED, null, portalPage));
@@ -142,7 +148,7 @@
       List<String> identifiers = provider.getPageIdentifiers();
       assertEquals(pageNumber - 1, identifiers.size());
       // deleting a page doesn't delete its children, see GTNPORTAL-1630
-      assertFalse(identifiers.contains("page1"));
+      assertFalse(identifiers.contains(pageToRemove));
       assertTrue(identifiers.contains("page11"));
       assertTrue(identifiers.contains("page12"));
    }
@@ -201,7 +207,7 @@
    {
       Page page = mock(Page.class);
 
-      when(page.getName()).thenThrow(new RuntimeException("Page.getName returns the internal name, not the human readable one"));
+      when(page.getName()).thenReturn(createInternalNameFrom(name));
 
       // mock call to adapt
       Described described = mock(Described.class);
@@ -227,6 +233,11 @@
       return page;
    }
 
+   private String createInternalNameFrom(String name)
+   {
+      return name + "internal";
+   }
+
    private void addWindows(Page page, String... windowNames)
    {
       if (windowNames != null)



More information about the gatein-commits mailing list