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 ju...@apache.org on 2013/10/18 22:25:16 UTC

svn commit: r1533618 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel: JsopDiff.java NodeStoreKernel.java

Author: jukka
Date: Fri Oct 18 20:25:16 2013
New Revision: 1533618

URL: http://svn.apache.org/r1533618
Log:
OAK-987: Implement the MicroKernel API

Path and depth limitations in diff()

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java?rev=1533618&r1=1533617&r2=1533618&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/JsopDiff.java Fri Oct 18 20:25:16 2013
@@ -31,21 +31,29 @@ public class JsopDiff implements NodeSta
 
     private final BlobSerializer blobs;
 
-    protected final String path;
+    private final String path;
 
-    private JsopDiff(JsopBuilder jsop, String path, BlobSerializer blobs) {
+    private final int depth;
+
+    private JsopDiff(
+            JsopBuilder jsop, BlobSerializer blobs, String path, int depth) {
         this.jsop = jsop;
-        this.path = path;
         this.blobs = blobs;
+        this.path = path;
+        this.depth = depth;
     }
 
 
     JsopDiff(BlobSerializer blobs) {
-        this(new JsopBuilder(), "/", blobs);
+        this(new JsopBuilder(), blobs, "/", Integer.MAX_VALUE);
+    }
+
+    JsopDiff(String path, int depth) {
+        this(new JsopBuilder(), new BlobSerializer(), path, depth);
     }
 
     JsopDiff() {
-        this(new BlobSerializer());
+        this("/", Integer.MAX_VALUE);
     }
 
     /**
@@ -103,8 +111,15 @@ public class JsopDiff implements NodeSta
 
     @Override
     public boolean childNodeChanged(String name, NodeState before, NodeState after) {
-        after.compareAgainstBaseState(
-                before, new JsopDiff(jsop, buildPath(name), blobs));
+        if (depth > 0) {
+            after.compareAgainstBaseState(before, new JsopDiff(
+                    jsop, blobs, buildPath(name), depth - 1));
+        } else {
+            jsop.tag('^');
+            jsop.key(buildPath(name));
+            jsop.object();
+            jsop.endObject();
+        }
         return true;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java?rev=1533618&r1=1533617&r2=1533618&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java Fri Oct 18 20:25:16 2013
@@ -308,13 +308,26 @@ public class NodeStoreKernel implements 
     }
 
     @Override
-    public synchronized String diff(
+    public String diff(
             String fromRevisionId, String toRevisionId, String path, int depth)
             throws MicroKernelException {
         NodeState before = getRoot(fromRevisionId);
         NodeState after = getRoot(toRevisionId);
 
-        JsopDiff diff = new JsopDiff();
+        if (path != null) {
+            for (String element : PathUtils.elements(path)) {
+                before = before.getChildNode(element);
+                after = after.getChildNode(element);
+            }
+        } else {
+            path = "/";
+        }
+
+        if (depth < 0) {
+            depth = Integer.MAX_VALUE;
+        }
+
+        JsopDiff diff = new JsopDiff(path, depth);
         after.compareAgainstBaseState(before, diff);
         return diff.toString();
     }