You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2011/04/27 17:08:20 UTC

svn commit: r1097137 - /jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java

Author: stefan
Date: Wed Apr 27 15:08:20 2011
New Revision: 1097137

URL: http://svn.apache.org/viewvc?rev=1097137&view=rev
Log:
MicroKernel prototype (WIP)

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java?rev=1097137&r1=1097136&r2=1097137&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/CommitBuilder.java Wed Apr 27 15:08:20 2011
@@ -70,6 +70,47 @@ public class CommitBuilder {
         }
 
         parent.getChildNodeEntries().remove(nodeName);
+
+        // update staging area
+        removeStagedNodes(nodePath);
+    }
+
+    public void moveNode(String srcPath, String destPath) throws Exception {
+        String srcParentPath = getParentPath(srcPath);
+        String srcNodeName = getName(srcPath);
+
+        String destParentPath = getParentPath(destPath);
+        String destNodeName = getName(destPath);
+
+        MutableNode srcParent = getOrCreateStagedNode(srcParentPath);
+        String targetId = srcParent.getChildNodeEntries().get(srcNodeName);
+        if (targetId == null) {
+            throw new Exception("node not found: " + srcPath);
+        }
+        srcParent.getChildNodeEntries().remove(srcNodeName);
+
+        MutableNode destParent = getOrCreateStagedNode(destParentPath);
+        destParent.getChildNodeEntries().put(destNodeName, targetId);
+
+        // update staging area
+        moveStagedNodes(srcPath, destPath);
+    }
+
+    public void copyNode(String srcPath, String destPath) throws Exception {
+        String srcParentPath = getParentPath(srcPath);
+        String srcNodeName = getName(srcPath);
+
+        String destParentPath = getParentPath(destPath);
+        String destNodeName = getName(destPath);
+
+        MutableNode srcParent = getOrCreateStagedNode(srcParentPath);
+        String targetId = srcParent.getChildNodeEntries().get(srcNodeName);
+        if (targetId == null) {
+            throw new Exception("node not found: " + srcPath);
+        }
+
+        MutableNode destParent = getOrCreateStagedNode(destParentPath);
+        destParent.getChildNodeEntries().put(destNodeName, targetId);
     }
 
     public void setProperty(String nodePath, String propName, String propValue) throws Exception {
@@ -87,7 +128,7 @@ public class CommitBuilder {
 
     public String /* new revId */ doCommit() throws Exception {
         if (rep.getHeadRevision() != baseRevId) {
-            // todo implement merge
+            // todo lock head revision and re-apply changes
         }
 
         ArrayList<String> orderedPaths = new ArrayList<String>(staged.keySet());
@@ -159,6 +200,27 @@ public class CommitBuilder {
         return node;
     }
 
+    void moveStagedNodes(String srcPath, String destPath) throws Exception {
+        MutableNode node = staged.get(srcPath);
+        if (node != null) {
+            staged.remove(srcPath);
+            staged.put(destPath, node);
+            for (String childName : node.getChildNodeEntries().keySet()) {
+                moveStagedNodes(srcPath + "/" + childName, destPath + "/" + childName);
+            }
+        }
+    }
+
+    void removeStagedNodes(String nodePath) throws Exception {
+        MutableNode node = staged.get(nodePath);
+        if (node != null) {
+            staged.remove(nodePath);
+            for (String childName : node.getChildNodeEntries().keySet()) {
+                removeStagedNodes(nodePath + "/" + childName);
+            }
+        }
+    }
+
     static String getParentPath(String path) {
         int pos = path.lastIndexOf('/');
         if (pos > 0) {