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 th...@apache.org on 2012/04/23 14:16:41 UTC

svn commit: r1329202 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/mk/fs/ main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/mk/simple/ main/java/org/apache/jackrabbit/mk/wrapper/ test/java/org/apache/j...

Author: thomasm
Date: Mon Apr 23 12:16:40 2012
New Revision: 1329202

URL: http://svn.apache.org/viewvc?rev=1329202&view=rev
Log:
OAK-48 MicroKernel.getNodes() should return null for not existing nodes

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/fs/FileChannelInputStream.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeId.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeList.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListSmall.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/Revision.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapperTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/fs/FileChannelInputStream.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/fs/FileChannelInputStream.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/fs/FileChannelInputStream.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/fs/FileChannelInputStream.java Mon Apr 23 12:16:40 2012
@@ -24,6 +24,7 @@ public class FileChannelInputStream exte
      * Create a new file object input stream from the file channel.
      *
      * @param channel the file channel
+     * @param closeChannel close the channel when done
      */
     public FileChannelInputStream(FileChannel channel, boolean closeChannel) {
         this.channel = channel;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java Mon Apr 23 12:16:40 2012
@@ -160,7 +160,8 @@ public class IndexWrapper extends MicroK
         String index = PathUtils.relativize(INDEX_PATH, path);
         int idx = index.indexOf('?');
         if (idx < 0) {
-            throw ExceptionFactory.get("Invalid query. Expected: /index/prefix:x?y, got: " + path);
+            // invalid query - expected: /index/prefix:x?y
+            return null;
         }
         String data = index.substring(idx + 1);
         index = index.substring(0, idx);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeId.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeId.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeId.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeId.java Mon Apr 23 12:16:40 2012
@@ -42,6 +42,7 @@ public class NodeId {
         return map.getNode(x);
     }
 
+    @Override
     public String toString() {
         return Long.toString(x);
     }
@@ -79,6 +80,7 @@ public class NodeId {
             return node;
         }
 
+        @Override
         public String toString() {
             return node.toString();
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeImpl.java Mon Apr 23 12:16:40 2012
@@ -39,8 +39,6 @@ import java.util.Iterator;
  */
 public class NodeImpl implements Cache.Value {
 
-    private static final boolean NODE_NAME_AS_PROPERTY = false;
-
     /**
      * The child node count.
      */
@@ -83,6 +81,8 @@ public class NodeImpl implements Cache.V
      */
     static final String COUNT = ":childCount";
 
+    private static final boolean NODE_NAME_AS_PROPERTY = false;
+
     /**
      * The node name.
      */
@@ -179,7 +179,8 @@ public class NodeImpl implements Cache.V
     }
 
     private NodeImpl getChildNode(String name) {
-        return childNodes.get(name).getNode(map);
+        NodeId id = childNodes.get(name);
+        return id == null ? null : id.getNode(map);
     }
 
     public NodeImpl cloneAndAddChildNode(String path, boolean before, String position, NodeImpl newNode, long revId) {
@@ -526,6 +527,7 @@ public class NodeImpl implements Cache.V
         return propertyValuePairs[index + index + 1];
     }
 
+    @Override
     public String toString() {
         String s = asString();
         if (path != null) {
@@ -710,6 +712,7 @@ public class NodeImpl implements Cache.V
         return memory;
     }
 
+    @Override
     public int hashCode() {
         int hash = Arrays.hashCode(propertyValuePairs);
         if (childNodes != null) {
@@ -718,6 +721,7 @@ public class NodeImpl implements Cache.V
         return hash;
     }
 
+    @Override
     public boolean equals(Object other) {
         if (other == this) {
             return true;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeList.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeList.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeList.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeList.java Mon Apr 23 12:16:40 2012
@@ -129,6 +129,7 @@ interface NodeList {
      *
      * @param map the node map
      * @param out the output stream
+     * @throws IOException if writing to the stream failed
      */
     void updateHash(NodeMap map, OutputStream out) throws IOException;
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListSmall.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListSmall.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListSmall.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListSmall.java Mon Apr 23 12:16:40 2012
@@ -108,7 +108,7 @@ public class NodeListSmall implements No
     public NodeId get(String name) {
         int index = find(name);
         if (index < 0) {
-            throw ExceptionFactory.get("Node not found: " + name);
+            return null;
         }
         return children[sort[index]];
     }
@@ -184,6 +184,7 @@ public class NodeListSmall implements No
         return result;
     }
 
+    @Override
     public String toString() {
         JsopWriter json = new JsopBuilder();
         json.object();
@@ -232,6 +233,7 @@ public class NodeListSmall implements No
         return memory;
     }
 
+    @Override
     public int hashCode() {
         if (size == 0) {
             return 0;
@@ -241,6 +243,7 @@ public class NodeListSmall implements No
                 Arrays.hashCode(sort);
     }
 
+    @Override
     public boolean equals(Object other) {
         if (other == this) {
             return true;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/NodeListTrie.java Mon Apr 23 12:16:40 2012
@@ -269,6 +269,7 @@ public class NodeListTrie implements Nod
         NodeId id;
         String prefix;
 
+        @Override
         public String toString() {
             return prefix;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/Revision.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/Revision.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/Revision.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/Revision.java Mon Apr 23 12:16:40 2012
@@ -102,6 +102,7 @@ public class Revision implements Compara
         return id < o.id ? -1 : id > o.id ? 1 : 0;
     }
 
+    @Override
     public String toString() {
         return new JsopBuilder().object().
             key("id").value(formatId(id)).

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java Mon Apr 23 12:16:40 2012
@@ -52,6 +52,10 @@ public class SecurityWrapper extends Mic
      * Decorates the given {@link MicroKernel} with authentication and
      * authorization. The responsibility of properly disposing the given
      * MikroKernel instance remains with the caller.
+     *
+     * @param mk the wrapped kernel
+     * @param user the user name
+     * @param pass the password
      */
     public SecurityWrapper(MicroKernel mk, String user, String pass) {
         this.mk = MicroKernelWrapperBase.wrap(mk);
@@ -93,6 +97,7 @@ public class SecurityWrapper extends Mic
 
     @Override
     public void dispose() {
+        // do nothing
     }
 
     @Override
@@ -288,7 +293,7 @@ public class SecurityWrapper extends Mic
     public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
         rightsRevision = getHeadRevision();
         if (!checkRights(path, false)) {
-            throw ExceptionFactory.get("Node not found: " + path);
+            return null;
         }
         JsopReader t = mk.getNodesStream(path, revisionId, depth, offset, count, filter);
         if (admin || t == null) {
@@ -299,7 +304,7 @@ public class SecurityWrapper extends Mic
         n = filterAccess(path, n);
         JsopStream buff = new JsopStream();
         if (n == null) {
-            throw ExceptionFactory.get("Node not found: " + path);
+            return null;
         } else {
             // TODO childNodeCount properties might be wrong
             // when count and offset are used

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java Mon Apr 23 12:16:40 2012
@@ -280,7 +280,8 @@ public class VirtualRepositoryWrapper ex
     public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
         String mount = getMount(path);
         if (mount == null) {
-            throw ExceptionFactory.get("Not mapped: " + path);
+            // not mapped
+            return null;
         }
         String rev = getRevision(mount, revisionId);
         MicroKernelWrapper mk = mounts.get(mount);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/IndexWrapperTest.java Mon Apr 23 12:16:40 2012
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.mk.wrapper;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.index.IndexWrapper;
 import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
@@ -34,6 +35,12 @@ public class IndexWrapperTest {
     private String head;
 
     @Test
+    public void getNodes() {
+        assertNull(mk.getNodes("/index/unknown", head));
+        assertNull(mk.getNodes("/unknown", head));
+    }
+
+    @Test
     public void prefix() {
         head = mk.commit("/index", "+ \"prefix:x\": {}", head, "");
         head = mk.commit("/", "+ \"n1\": { \"value\":\"a:no\" }", head, "");

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapperTest.java Mon Apr 23 12:16:40 2012
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.mk.wrapper
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import junit.framework.Assert;
@@ -102,10 +103,14 @@ public class SecurityWrapperTest {
         head = mk.getHeadRevision();
         assertTrue(mkAdmin.nodeExists("/:user", head));
         assertFalse(mkGuest.nodeExists("/:user", head));
+        assertNull(mkGuest.getNodes("/:user", head));
         head = mkAdmin.commit("/", "^ \":rights\": \"read\"", head, "");
         head = mkAdmin.commit("/", "+ \"test\": { \"data\": \"Hello\" }", head, "");
         assertTrue(mkAdmin.nodeExists("/", head));
+        assertNull(mkGuest.getNodes("/unknown", head));
+        assertNull(mkGuest.getNodes("/unknown/node", head));
         assertTrue(mkGuest.nodeExists("/", head));
+        assertNull(mkGuest.getNodes("/unknown", head));
         assertEquals("{\":rights\":\"read\",\":childNodeCount\":2,\":user\":{\":rights\":\"admin\",\":childNodeCount\":2,\"guest\":{},\"sa\":{}},\"test\":{\"data\":\"Hello\",\":childNodeCount\":0}}", mkAdmin.getNodes("/", head));
         assertEquals("{\":childNodeCount\":1,\"test\":{\"data\":\"Hello\",\":childNodeCount\":0}}", mkGuest.getNodes("/", head));
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapperTest.java?rev=1329202&r1=1329201&r2=1329202&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapperTest.java Mon Apr 23 12:16:40 2012
@@ -15,6 +15,7 @@ package org.apache.jackrabbit.mk.wrapper
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import java.io.ByteArrayInputStream;
 import java.util.Arrays;
@@ -91,6 +92,8 @@ public class VirtualRepositoryWrapperTes
         head = mkVirtual.commit("/", "+ \"data\": {} ", head, "");
         head = mkVirtual.commit("/", "+ \"data/a\": { \"data\": \"Hello\" }", head, "");
         head = mkVirtual.commit("/", "+ \"data/b\": { \"data\": \"World\" }", head, "");
+
+        // get nodes
         String m1 = mkRep1.getNodes("/data", mkRep1.getHeadRevision());
         assertEquals("{\":childNodeCount\":1,\"a\":{\"data\":\"Hello\",\":childNodeCount\":0}}", m1);
         String m2 = mkRep2.getNodes("/data", mkRep2.getHeadRevision());
@@ -100,6 +103,12 @@ public class VirtualRepositoryWrapperTes
         m = mkVirtual.getNodes("/data/b", mkVirtual.getHeadRevision());
         assertEquals("{\"data\":\"World\",\":childNodeCount\":0}", m);
 
+        // get nodes on unknown nodes
+        m = mkVirtual.getNodes("/notMapped", mkVirtual.getHeadRevision());
+        assertNull(m);
+        m = mkVirtual.getNodes("/data/a/notExist", mkVirtual.getHeadRevision());
+        assertNull(m);
+
         // set property
         head = mkVirtual.commit("/", "^ \"data/a/data\": \"Hallo\"", head, "");
         head = mkVirtual.commit("/", "^ \"data/b/data\": \"Welt\"", head, "");