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();
}