You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2012/02/13 19:15:22 UTC
svn commit: r1243634 - in /jackrabbit/sandbox/jackrabbit-microkernel/src:
main/java/org/apache/jackrabbit/state/ChangeTree.java
main/java/org/apache/jackrabbit/state/NodeState.java
test/java/org/apache/jackrabbit/RepositoryTest.java
Author: mduerig
Date: Mon Feb 13 18:15:21 2012
New Revision: 1243634
URL: http://svn.apache.org/viewvc?rev=1243634&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- correctly overlay persisted child nodes with transiently modified child nodes
Modified:
jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java
jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/RepositoryTest.java
Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java?rev=1243634&r1=1243633&r2=1243634&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java Mon Feb 13 18:15:21 2012
@@ -237,6 +237,15 @@ public class ChangeTree {
/**
* @param name
+ * @return {@code true} iff this node has a modified child node of the given {@code name}.
+ */
+ public boolean isNodeModified(String name) {
+ NodeDelta node = childNodes.get(name);
+ return node != null && node.isTransient();
+ }
+
+ /**
+ * @param name
* @return {@code true} iff a property with the given name has been added,
* removed or modified.
*/
Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java?rev=1243634&r1=1243633&r2=1243634&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java Mon Feb 13 18:15:21 2012
@@ -41,7 +41,7 @@ import java.util.Map.Entry;
public class NodeState {
private final Context sessionContext;
- private final NodeDelta nodeDelta;
+ private final NodeDelta nodeDelta; // fixme: re-resolve on refresh/save
private String revision;
private JsonObject jsonObject;
@@ -96,24 +96,34 @@ public class NodeState {
}
public Iterator<NodeState> getChildNodeStates() {
- Iterator<NodeState> persisted = Iterators.filterIterator(getPersistedChildNodeStates(),
- new Predicate<NodeState>() {
+ Map<String, JsonValue> childEntries = getJsonObject().value();
+
+ Iterator<Entry<String, JsonValue>> childNodeEntries =
+ Iterators.filterIterator(childEntries.entrySet().iterator(),
+ new Predicate<Entry<String, JsonValue>>() {
+ @Override
+ public boolean evaluate(Entry<String, JsonValue> entry) {
+ return isNode(entry.getValue()) && !nodeDelta.isNodeModified(entry.getKey());
+ }
+ });
+
+ Iterator<NodeState> childNodeStates = Iterators.transformIterator(childNodeEntries,
+ new Transformer<Entry<String, JsonValue>, NodeState>() {
@Override
- public boolean evaluate(NodeState nodeState) {
- return !nodeDelta.hasChild(nodeState.getName())
- || !nodeDelta.getNode(nodeState.getName()).isRemoved();
+ public NodeState transform(Entry<String, JsonValue> entry) {
+ return getNodeState(sessionContext, nodeDelta.getNode(entry.getKey()));
}
});
- Iterator<NodeState> added = Iterators.transformIterator(nodeDelta.getNodes(),
+ Iterator<NodeState> modifiedNodeStates = Iterators.transformIterator(nodeDelta.getNodes(),
new Transformer<NodeDelta, NodeState>() {
@Override
public NodeState transform(NodeDelta delta) {
- return getNodeState(sessionContext, nodeDelta);
+ return getNodeState(sessionContext, delta);
}
});
- return Iterators.iteratorChain(added, persisted);
+ return Iterators.iteratorChain(childNodeStates, modifiedNodeStates);
}
public Iterator<NodeState> getChildNodeStates(Predicate<NodeState> condition) {
@@ -199,30 +209,10 @@ public class NodeState {
return nodeState;
}
- private static final Predicate<Entry<String, JsonValue>> IS_NODE = new Predicate<Entry<String, JsonValue>>() {
- @Override
- public boolean evaluate(Entry<String, JsonValue> entry) {
- return isNode(entry.getValue());
- }
- };
-
private static boolean isNode(JsonValue value) {
return value.isObject();
}
- private Iterator<NodeState> getPersistedChildNodeStates() {
- Map<String, JsonValue> childEntries = getJsonObject().value();
- Iterator<Entry<String, JsonValue>> nodeEntries =
- Iterators.filterIterator(childEntries.entrySet().iterator(), IS_NODE);
-
- return Iterators.transformIterator(nodeEntries, new Transformer<Entry<String, JsonValue>, NodeState>() {
- @Override
- public NodeState transform(Entry<String, JsonValue> entry) {
- return getNodeState(sessionContext, nodeDelta.getNode(entry.getKey()));
- }
- });
- }
-
private Iterator<Entry<String, JsonValue>> getPersistedProperties() {
Map<String, JsonValue> childEntries = getJsonObject().value();
Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/RepositoryTest.java?rev=1243634&r1=1243633&r2=1243634&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/RepositoryTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/test/java/org/apache/jackrabbit/RepositoryTest.java Mon Feb 13 18:15:21 2012
@@ -225,12 +225,16 @@ public class RepositoryTest {
@Test
public void getNodes() throws RepositoryException {
Set<String> nodeNames = new HashSet<String>() {{
- add("foo");
add("bar");
+ add("added");
add(TEST_NODE);
}};
Node root = getNode("/");
+ root.addNode("added"); // transiently added
+ root.getNode("foo").remove(); // transiently removed
+ root.getNode("bar").remove(); // transiently removed and...
+ root.addNode("bar"); // ... added again
NodeIterator nodes = root.getNodes();
while (nodes.hasNext()) {
assertTrue(nodeNames.remove(nodes.nextNode().getName()));