Author: tolusha
Date: 2011-07-18 04:50:08 -0400 (Mon, 18 Jul 2011)
New Revision: 4640
Added:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/version/TestOnParentVersionIgnore.java
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/FrozenNodeInitializer.java
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/test/nodetypes-usecase.xml
Log:
EXOJCR-1413: [Perf] ItemDataTraversingVisitor#visit(NodeData node) continue to visit
deeper althought onParentVersion=IGNORE
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java 2011-07-18
01:57:47 UTC (rev 4639)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java 2011-07-18
08:50:08 UTC (rev 4640)
@@ -88,10 +88,10 @@
if (maxLevel == INFINITE_DEPTH || currentLevel < maxLevel)
{
currentLevel++;
- for (PropertyData data : dataManager.getChildPropertiesData(node))
- data.accept(this);
- for (NodeData data : dataManager.getChildNodesData(node))
- data.accept(this);
+
+ visitChildProperties(node);
+ visitChildNodes(node);
+
currentLevel--;
}
leaving(node, currentLevel);
@@ -101,10 +101,27 @@
currentLevel = 0;
throw re;
}
+ }
+ /**
+ * Visit all child properties.
+ */
+ protected void visitChildProperties(NodeData node) throws RepositoryException
+ {
+ for (PropertyData data : dataManager.getChildPropertiesData(node))
+ data.accept(this);
}
/**
+ * Visit all child nodes.
+ */
+ protected void visitChildNodes(NodeData node) throws RepositoryException
+ {
+ for (NodeData data : dataManager.getChildNodesData(node))
+ data.accept(this);
+ }
+
+ /**
* {@inheritDoc}
*/
public ItemDataConsumer getDataManager()
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/FrozenNodeInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/FrozenNodeInitializer.java 2011-07-18
01:57:47 UTC (rev 4639)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/FrozenNodeInitializer.java 2011-07-18
08:50:08 UTC (rev 4640)
@@ -88,6 +88,20 @@
this.contextNodes.push(frozen);
}
+ /**
+ * {@inheritDoc}
+ */
+ protected void visitChildNodes(NodeData node) throws RepositoryException
+ {
+ // It is not necessary to traverse child nodes since parent is null
(OnParentVersion=IGNORE case)
+ if (currentNode() == null)
+ {
+ return;
+ }
+
+ super.visitChildNodes(node);
+ }
+
@Override
protected void entering(PropertyData property, int level) throws RepositoryException
{
Added:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/version/TestOnParentVersionIgnore.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/version/TestOnParentVersionIgnore.java
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/version/TestOnParentVersionIgnore.java 2011-07-18
08:50:08 UTC (rev 4640)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2011 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.exoplatform.services.jcr.impl.version;
+
+import org.exoplatform.services.jcr.JcrImplBaseTest;
+
+import javax.jcr.Node;
+import javax.jcr.version.Version;
+
+/**
+ * @author <a href="abazko(a)exoplatform.com">Anatoliy Bazko</a>
+ * @version $Id$
+ */
+public class TestOnParentVersionIgnore extends JcrImplBaseTest
+{
+ public void testFrozenInitialized_OnParentVersion_IGNORE_EXOJCR1413() throws
Exception
+ {
+ Node testNode = session.getRootNode().addNode("test");
+ testNode.addMixin("mix:versionable");
+ testNode.addNode("page", "exo:page").addNode("page",
"exo:page");
+ testNode.addNode("hello");
+ session.save();
+
+ Version ver = testNode.checkin();
+ testNode.checkout();
+
+ try
+ {
+ ver.getNode("jcr:frozenNode").getNode("page");
+ }
+ catch (Exception e)
+ {
+ fail("Node ../test/page should be accessable");
+ }
+
+ try
+ {
+ ver.getNode("jcr:frozenNode").getNode("hello");
+ }
+ catch (Exception e)
+ {
+ fail("Node ../test/hello should be accessable");
+ }
+
+ try
+ {
+
ver.getNode("jcr:frozenNode").getNode("page").getNode("page");
+ fail("Node ../test/page/page should not be accessable");
+ }
+ catch (Exception e)
+ {
+ }
+
+ testNode.remove();
+ session.save();
+ }
+}
Property changes on:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/version/TestOnParentVersionIgnore.java
___________________________________________________________________
Added: svn:keywords
+ Id
Modified:
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/test/nodetypes-usecase.xml
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/test/nodetypes-usecase.xml 2011-07-18
01:57:47 UTC (rev 4639)
+++
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/test/nodetypes-usecase.xml 2011-07-18
08:50:08 UTC (rev 4640)
@@ -266,5 +266,18 @@
</childNodeDefinitions>
</nodeType>
-
+ <nodeType name="exo:page" isMixin="false"
hasOrderableChildNodes="false">
+ <supertypes>
+ <supertype>nt:base</supertype>
+ <supertype>nt:folder</supertype>
+ <supertype>mix:referenceable</supertype>
+ </supertypes>
+ <childNodeDefinitions>
+ <childNodeDefinition name="page" defaultPrimaryType=""
autoCreated="false" mandatory="false"
onParentVersion="IGNORE" protected="false"
sameNameSiblings="false">
+ <requiredPrimaryTypes>
+ <requiredPrimaryType>exo:page</requiredPrimaryType>
+ </requiredPrimaryTypes>
+ </childNodeDefinition>
+ </childNodeDefinitions>
+ </nodeType>
</nodeTypes>