[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