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 md...@apache.org on 2012/04/03 22:58:34 UTC
svn commit: r1309145 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java
Author: mduerig
Date: Tue Apr 3 20:58:33 2012
New Revision: 1309145
URL: http://svn.apache.org/viewvc?rev=1309145&view=rev
Log:
OAK-9: Internal tree builder
move and copy operations need to correctly update parent and name
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java?rev=1309145&r1=1309144&r2=1309145&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/TransientNodeState.java Tue Apr 3 20:58:33 2012
@@ -10,6 +10,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.Set;
@@ -17,7 +18,8 @@ public class TransientNodeState extends
private final KernelNodeStateEditor editor;
private final NodeState persistentState;
- private final Map<String, NodeState> addedNodes = new HashMap<String, NodeState>();
+ private final Map<String, TransientNodeState>
+ addedNodes = new HashMap<String, TransientNodeState>();
private final Set<String> removedNodes = new HashSet<String>();
private final Map<String, PropertyState> addedProperties = new HashMap<String, PropertyState>();
private final Set<String> removedProperties = new HashSet<String>();
@@ -34,13 +36,32 @@ public class TransientNodeState extends
this.name = name;
}
- TransientNodeState(KernelNodeStateEditor parentEditor, String name) {
+ private TransientNodeState(KernelNodeStateEditor parentEditor, String name) {
editor = new KernelNodeStateEditor(parentEditor, this);
persistentState = null;
parent = parentEditor.getNodeState();
this.name = name;
}
+ private TransientNodeState(TransientNodeState state, TransientNodeState parent,
+ String name) {
+
+ editor = new KernelNodeStateEditor(parent.getEditor(), this);
+ persistentState = state.persistentState;
+ this.parent = parent;
+ this.name = name;
+
+ for (Entry<String, TransientNodeState> added : addedNodes.entrySet()) {
+ String addedName = added.getKey();
+ this.addedNodes.put(addedName,
+ new TransientNodeState(added.getValue(), this, addedName));
+ }
+
+ this.removedNodes.addAll(state.removedNodes);
+ this.addedProperties.putAll(state.addedProperties);
+ this.removedProperties.addAll(state.removedProperties);
+ }
+
@Override
public PropertyState getProperty(String name) {
PropertyState state = addedProperties.get(name);
@@ -240,17 +261,18 @@ public class TransientNodeState extends
}
void move(String name, TransientNodeState destParent, String destName) {
- NodeState state = getChildNode(name);
+ TransientNodeState state = editor.edit(name).getNodeState();
removeNode(name);
- destParent.addNode(destName, state);
+
+ state.name = destName;
+ state.parent = destParent;
+ destParent.addedNodes.put(destName, state);
}
void copy(String name, TransientNodeState destParent, String destName) {
- NodeState state = getChildNode(name);
- destParent.addNode(destName, state);
+ TransientNodeState state = editor.edit(name).getNodeState();
+ destParent.addedNodes.put(destName,
+ new TransientNodeState(state, destParent, destName));
}
- private void addNode(String name, NodeState state) {
- addedNodes.put(name, state);
- }
}