You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2017/07/10 08:47:47 UTC

svn commit: r1801426 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java

Author: chetanm
Date: Mon Jul 10 08:47:47 2017
New Revision: 1801426

URL: http://svn.apache.org/viewvc?rev=1801426&view=rev
Log:
OAK-6437 - NodeStateCopyUtils should not copy hidden props and node in JCR mode

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java?rev=1801426&r1=1801425&r2=1801426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtils.java Mon Jul 10 08:47:47 2017
@@ -27,12 +27,14 @@ import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 
 import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.commons.JcrUtils;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.tree.TreeFactory;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.jackrabbit.oak.api.Type.NAMES;
@@ -58,8 +60,13 @@ final class NodeStateCopyUtils {
         Tree src = TreeFactory.createReadOnlyTree(state);
         for (Tree srcChild : src.getChildren()){
             String childName = srcChild.getName();
+
+            if (NodeStateUtils.isHidden(childName)){
+                continue;
+            }
+
             NodeState childState = state.getChildNode(childName);
-            Node child = node.addNode(childName, primaryType(childState));
+            Node child = JcrUtils.getOrAddNode(node, childName, primaryType(childState));
             copyToNode(childState, child);
         }
     }
@@ -88,6 +95,10 @@ final class NodeStateCopyUtils {
                 continue;
             }
 
+            if (NodeStateUtils.isHidden(name)){
+                continue;
+            }
+
             if (ps.isArray()){
                 Value[] values = new Value[ps.count()];
                 for (int i = 0; i < ps.count(); i++) {

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java?rev=1801426&r1=1801425&r2=1801426&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/NodeStateCopyUtilsTest.java Mon Jul 10 08:47:47 2017
@@ -132,6 +132,27 @@ public class NodeStateCopyUtilsTest {
     }
 
     @Test
+    public void copyToJcrAndHiddenProps() throws Exception{
+        repository = new Jcr().with(new OpenSecurityProvider()).createRepository();
+
+        Tree srcTree = TreeFactory.createTree(builder);
+        srcTree.addChild("a").setProperty("foo", "y");
+        srcTree.addChild("a").setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_OAK_UNSTRUCTURED, Type.NAME);
+        builder.child(":hidden-node").setProperty("x", "y");
+        builder.setProperty(":hidden-prop", "y");
+
+        Session session = repository.login(null, null);
+        Node node = session.getRootNode();
+        Node test = node.addNode("test", NT_OAK_UNSTRUCTURED);
+
+        NodeStateCopyUtils.copyToNode(builder.getNodeState(), test);
+        session.save();
+
+        test = session.getNode("/test");
+        assertEquals("y", test.getProperty("a/foo").getString());
+    }
+
+    @Test
     public void copyToJcrVariousProps() throws Exception{
         repository = new Jcr().with(new OpenSecurityProvider()).createRepository();