Author: julien_viet
Date: 2011-08-29 11:24:55 -0400 (Mon, 29 Aug 2011)
New Revision: 7248
Modified:
portal/trunk/component/portal/src/main/java/org/exoplatform/portal/mop/navigation/NavigationServiceImpl.java
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/Node.java
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/TestNavigationServiceSave.java
Log:
GTNPORTAL-2057 : NPE during transitive remove of transient node
Modified:
portal/trunk/component/portal/src/main/java/org/exoplatform/portal/mop/navigation/NavigationServiceImpl.java
===================================================================
---
portal/trunk/component/portal/src/main/java/org/exoplatform/portal/mop/navigation/NavigationServiceImpl.java 2011-08-29
15:11:02 UTC (rev 7247)
+++
portal/trunk/component/portal/src/main/java/org/exoplatform/portal/mop/navigation/NavigationServiceImpl.java 2011-08-29
15:24:55 UTC (rev 7248)
@@ -611,26 +611,37 @@
Navigation sourceNav = session.findObjectById(ObjectType.NAVIGATION,
target.data.id);
//
- String objectId = sourceNav.getObjectId();
-
- //
- toEvict.add(objectId);
toEvict.add(parentNav.getObjectId());
sourceNav.destroy();
//
parent.data = new NodeData(parentNav);
+ toUpdate.add(parent.handle);
//
- toUpdate.add(parent.handle);
+ destroy(target);
+ }
+ private void destroy(NodeContext<N> ctx)
+ {
+ toPersist.values().remove(ctx.handle);
+
//
- if (toPersist.values().contains(objectId))
+ toUpdate.remove(ctx.handle);
+
+ //
+ toEvict.add(ctx.handle);
+
+ // Recurse
+ if (ctx.isExpanded())
{
- toPersist.values().remove(objectId);
+ for (NodeContext<N> child = ctx.getFirst();child != null;child =
child.getNext())
+ {
+ destroy(child);
+ }
}
- toUpdate.remove(objectId);
}
+
@Override
public void onUpdate(NodeContext<N> source, NodeState state) throws
NavigationServiceException
{
Modified:
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/Node.java
===================================================================
---
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/Node.java 2011-08-29
15:11:02 UTC (rev 7247)
+++
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/Node.java 2011-08-29
15:24:55 UTC (rev 7248)
@@ -63,6 +63,11 @@
return context.getId();
}
+ public String getHandle()
+ {
+ return context.handle;
+ }
+
public String getName()
{
return context.getName();
Modified:
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/TestNavigationServiceSave.java
===================================================================
---
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/TestNavigationServiceSave.java 2011-08-29
15:11:02 UTC (rev 7247)
+++
portal/trunk/component/portal/src/test/java/org/exoplatform/portal/mop/navigation/TestNavigationServiceSave.java 2011-08-29
15:24:55 UTC (rev 7248)
@@ -1056,7 +1056,7 @@
//
NavigationContext navigation =
service.loadNavigation(SiteKey.portal("remove_added"));
Node root = service.loadNode(Node.MODEL, navigation, Scope.GRANDCHILDREN,
null).getNode();
- root.addChild("foo");
+ root.addChild("foo").getHandle();
root.removeChild("foo");
service.saveNode(root.context, null);
@@ -1071,6 +1071,33 @@
assertEquals(0, root.getChildren().size());
}
+ public void testTransitiveRemoveTransient() throws Exception
+ {
+ MOPService mop = mgr.getPOMService();
+ Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE,
"transitive_remove_transient");
+ portal.getRootNavigation().addChild("default");
+
+ //
+ sync(true);
+
+ //
+ NavigationContext navigation =
service.loadNavigation(SiteKey.portal("transitive_remove_transient"));
+ Node root = service.loadNode(Node.MODEL, navigation, Scope.GRANDCHILDREN,
null).getNode();
+ root.addChild("foo").addChild("bar");
+ root.removeChild("foo");
+ service.saveNode(root.context, null);
+
+ //
+ root.assertConsistent();
+
+ //
+ sync(true);
+
+ //
+ root = service.loadNode(Node.MODEL, navigation, Scope.GRANDCHILDREN,
null).getNode();
+ assertEquals(0, root.getChildren().size());
+ }
+
public void testRenameCreatedNode() throws Exception
{
MOPService mop = mgr.getPOMService();
Show replies by date