You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/09/21 17:26:40 UTC
svn commit: r1173709 - in /jackrabbit/sandbox/microkernel/src:
main/java/org/apache/jackrabbit/mk/index/Indexer.java
test/java/org/apache/jackrabbit/mk/index/IndexTest.java
Author: thomasm
Date: Wed Sep 21 15:26:39 2011
New Revision: 1173709
URL: http://svn.apache.org/viewvc?rev=1173709&view=rev
Log:
Index mechanism: support move operations (plus don't open the repository within the test method itself)
Modified:
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1173709&r1=1173708&r2=1173709&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java Wed Sep 21 15:26:39 2011
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.mk.json.Jso
import org.apache.jackrabbit.mk.json.JsopTokenizer;
import org.apache.jackrabbit.mk.mem.NodeImpl;
import org.apache.jackrabbit.mk.mem.NodeMap;
+import org.apache.jackrabbit.mk.util.ExceptionFactory;
import org.apache.jackrabbit.mk.util.PathUtils;
import java.util.ArrayList;
@@ -229,10 +230,9 @@ public class Indexer {
if (r == JsopTokenizer.END) {
break;
}
- String path;
+ String path = t.readString();
switch (r) {
case '+': {
- path = t.readString();
t.read(':');
NodeMap map = new NodeMap();
if (t.matches('{')) {
@@ -250,11 +250,9 @@ public class Indexer {
break;
}
case '-':
- path = t.readString();
- removeNode(path, lastRevision);
+ moveNode(path, null, lastRevision);
break;
case '^': {
- path = t.readString();
removeProperty(path, lastRevision);
t.read(':');
if (t.matches(JsopTokenizer.NULL)) {
@@ -266,65 +264,29 @@ public class Indexer {
break;
}
case '>':
- int todoNotImplementedYet;
- path = t.readString();
t.read(':');
- String position, target;
- boolean rename;
- String to;
+ String name = PathUtils.getName(path);
+ String target, position;
if (t.matches('{')) {
- rename = false;
position = t.readString();
t.read(':');
target = t.readString();
t.read('}');
} else {
- rename = true;
position = null;
target = t.readString();
}
- boolean before = false;
- if ("last".equals(position)) {
- // target = PathUtils.concat(target, name);
- position = null;
- } else if ("first".equals(position)) {
- // target = PathUtils.concat(target, name);
- position = null;
- before = true;
- } else if ("before".equals(position)) {
- position = PathUtils.getName(target);
- target = PathUtils.getParentPath(target);
- // target = PathUtils.concat(target, name);
- before = true;
- } else if ("after".equals(position)) {
- position = PathUtils.getName(target);
+ if ("last".equals(position) || "first".equals(position)) {
+ target = PathUtils.concat(target, name);
+ } else if ("before".equals(position) || "after".equals(position)) {
target = PathUtils.getParentPath(target);
- // target = PathUtils.concat(target, name);
+ target = PathUtils.concat(target, name);
} else if (position == null) {
// move
} else {
- throw new AssertionError("position: " + position);
- }
- if (PathUtils.isAbsolute(target)) {
- to = PathUtils.relativize("/", target);
- } else {
- // to = PathUtils.concat(fromRoot, target);
+ throw ExceptionFactory.get("position: " + position);
}
-// boolean inPlaceRename = false;
-// if (rename) {
-// if (PathUtils.getParentPath(from).equals(PathUtils.getParentPath(to))) {
-// inPlaceRename = true;
-// position = PathUtils.getName(from);
-// }
-// }
-// NodeImpl node = headRoot.getNode(from);
-// if (!inPlaceRename) {
-// headRoot = headRoot.cloneAndRemoveChildNode(from, headRevId);
-// }
-// headRoot = headRoot.cloneAndAddChildNode(to, before, position, node, headRevId);
-// if (inPlaceRename) {
-// headRoot = headRoot.cloneAndRemoveChildNode(from, headRevId);
-// }
+ moveNode(path, target, lastRevision);
break;
default:
throw new AssertionError("token: " + (char) t.getTokenType());
@@ -389,21 +351,27 @@ public class Indexer {
}
}
- private void removeNode(String path, String lastRevision) {
- if (isInIndex(path)) {
+ private void moveNode(String sourcePath, String targetPath, String lastRevision) {
+ if (isInIndex(sourcePath)) {
// don't index the index
return;
}
- if (!mk.nodeExists(path, lastRevision)) {
+ if (!mk.nodeExists(sourcePath, lastRevision)) {
return;
}
- String node = mk.getNodes(path, lastRevision, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
+ String node = mk.getNodes(sourcePath, lastRevision, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
JsopTokenizer t = new JsopTokenizer(node);
NodeMap map = new NodeMap();
t.read('{');
- NodeImpl n = NodeImpl.parse(map, t, 0, path);
- n.setPath(path);
+ NodeImpl n = NodeImpl.parse(map, t, 0, sourcePath);
addOrRemoveRecursive(n, true, false);
+ if (targetPath != null) {
+ t = new JsopTokenizer(node);
+ map = new NodeMap();
+ t.read('{');
+ n = NodeImpl.parse(map, t, 0, targetPath);
+ addOrRemoveRecursive(n, false, true);
+ }
}
private void buildAndAddIndex(Index index) {
Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java?rev=1173709&r1=1173708&r2=1173709&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java Wed Sep 21 15:26:39 2011
@@ -20,7 +20,6 @@ import java.util.Iterator;
import java.util.Random;
import java.util.TreeMap;
import junit.framework.Assert;
-import org.apache.jackrabbit.mk.MicroKernelFactory;
import org.apache.jackrabbit.mk.MultiMkTestBase;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.json.JsopTest;
@@ -72,13 +71,28 @@ public class IndexTest extends MultiMkTe
public void nestedAddNode() {
Indexer indexer = new Indexer(mk);
PropertyIndex index = indexer.createPropertyIndex("id", true);
+
mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 2 }, \"id\": 1 }", mk.getHeadRevision(), "");
Assert.assertEquals("/test", index.getPath("1", mk.getHeadRevision()));
Assert.assertEquals("/test/test2", index.getPath("2", mk.getHeadRevision()));
}
@Test
- public void testAscending() {
+ public void move() {
+ Indexer indexer = new Indexer(mk);
+ PropertyIndex index = indexer.createPropertyIndex("id", true);
+
+ mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 2 }, \"id\": 1 }", mk.getHeadRevision(), "");
+ Assert.assertEquals("/test", index.getPath("1", mk.getHeadRevision()));
+ Assert.assertEquals("/test/test2", index.getPath("2", mk.getHeadRevision()));
+
+ mk.commit("/", "> \"test\": \"moved\"", mk.getHeadRevision(), "");
+ Assert.assertEquals("/moved", index.getPath("1", mk.getHeadRevision()));
+ Assert.assertEquals("/moved/test2", index.getPath("2", mk.getHeadRevision()));
+ }
+
+ @Test
+ public void ascending() {
Indexer indexer = new Indexer(mk);
BTree tree = new BTree(indexer, "test", true);
tree.setMinSize(2);
@@ -161,8 +175,7 @@ public class IndexTest extends MultiMkTe
}
@Test
- public void testRandom() {
- MicroKernel mk = MicroKernelFactory.getInstance(url);
+ public void random() {
Indexer indexer = new Indexer(mk);
BTree tree = new BTree(indexer, "test", true);
tree.setMinSize(2);