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 2011/06/07 12:22:52 UTC

svn commit: r1132946 - in /jackrabbit/sandbox/spi2microkernel/src: main/java/org/apache/jackrabbit/spi2microkernel/ test/java/org/apache/jackrabbit/spi2microkernel/

Author: mduerig
Date: Tue Jun  7 10:22:51 2011
New Revision: 1132946

URL: http://svn.apache.org/viewvc?rev=1132946&view=rev
Log:
spi2microkernel prototype (WIP)
write support: addNode

Added:
    jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java
      - copied, changed from r1132604, jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/Tests.java
Removed:
    jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/Tests.java
Modified:
    jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
    jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/MicrokernelTest.java

Modified: jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java?rev=1132946&r1=1132945&r2=1132946&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java Tue Jun  7 10:22:51 2011
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.spi2microk
 import org.apache.jackrabbit.mk.MicroKernelImpl;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.api.MicroKernelException;
+import org.apache.jackrabbit.mk.util.PathUtil;
 import org.apache.jackrabbit.spi.Batch;
 import org.apache.jackrabbit.spi.ChildInfo;
 import org.apache.jackrabbit.spi.ItemId;
@@ -37,6 +38,7 @@ import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.SessionInfo;
 import org.apache.jackrabbit.spi.commons.AbstractRepositoryService;
 import org.apache.jackrabbit.spi.commons.ItemInfoCacheImpl;
+import org.apache.jackrabbit.spi.commons.batch.ConsolidatingChangeLog;
 import org.apache.jackrabbit.spi2microkernel.util.Json;
 import org.apache.jackrabbit.spi2microkernel.util.JsonHandlerBase;
 import org.apache.jackrabbit.spi2microkernel.util.NodeTypes;
@@ -66,6 +68,7 @@ public class RepositoryServiceImpl exten
 
         put(Repository.NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED, FALSE);
         put(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED, TRUE);
+        put(Repository.LEVEL_2_SUPPORTED, TRUE);
     }};
 
     private static final Map<String, String> NAMESPACES = Collections.emptyMap();
@@ -252,14 +255,15 @@ public class RepositoryServiceImpl exten
 
     @Override
     public Batch createBatch(SessionInfo sessionInfo, ItemId itemId) throws RepositoryException {
-        // todo implement createBatch
-        throw new UnsupportedRepositoryOperationException();
+        return new ChangeLog(sessionInfo);
     }
 
     @Override
     public void submit(Batch batch) throws RepositoryException {
-        // todo implement submit
-        throw new UnsupportedRepositoryOperationException();
+        ChangeLog changeLog = changeLog(batch);
+        CommitBuilder commitBuilder = new CommitBuilder(changeLog.sessionInfo);
+        changeLog.apply(commitBuilder);
+        commitBuilder.commit();
     }
 
     //------------------------------------------< Workspace management >---
@@ -283,6 +287,15 @@ public class RepositoryServiceImpl exten
 
     //------------------------------------------< private >---
 
+    private static ChangeLog changeLog(Batch batch) throws RepositoryException {
+        if (batch instanceof ChangeLog) {
+            return (ChangeLog) batch;
+        }
+        else {
+            throw new RepositoryException("Invalid batch " + batch);
+        }
+    }
+
     private String getRevision(SessionInfo sessionInfo) throws RepositoryException {
         String rev = sessions.get(sessionInfo);
 
@@ -294,9 +307,13 @@ public class RepositoryServiceImpl exten
         }
     }
 
+    private void setRevision(SessionInfo sessionInfo, String revisionId) {
+        sessions.put(sessionInfo, revisionId);
+    }
+
     private void initSessionInfo(SessionInfo sessionInfo) throws RepositoryException {
         try {
-            sessions.put(sessionInfo, microKernel.getHeadRevision());
+            setRevision(sessionInfo, microKernel.getHeadRevision());
         }
         catch (MicroKernelException e) {
             throw new RepositoryException(e.getMessage(), e);
@@ -340,4 +357,82 @@ public class RepositoryServiceImpl exten
         }
     }
 
+    private class CommitBuilder implements Batch {
+        private final SessionInfo sessionInfo;
+        private final StringBuilder sb = new StringBuilder();
+
+        public CommitBuilder(SessionInfo sessionInfo) {
+            this.sessionInfo = sessionInfo;
+        }
+
+        public void addNode(NodeId parentId, Name nodeName, Name nodetypeName, String uuid) throws RepositoryException {
+            String wspName = sessionInfo.getWorkspaceName();
+            Path path = parentId.getPath();
+            String mkPath = Paths.translateQPath(wspName, path);
+            mkPath = PathUtil.relativize("/", mkPath);
+            String name = Paths.translateQName(nodeName);
+
+            sb.append('+').append(PathUtil.concat(mkPath, name)).append(" : {}\n");
+        }
+
+        public void addProperty(NodeId parentId, Name propertyName, QValue value) throws RepositoryException {
+            // todo implement addProperty
+            throw new UnsupportedRepositoryOperationException("addProperty");
+        }
+
+        public void addProperty(NodeId parentId, Name propertyName, QValue[] values) throws RepositoryException {
+            // todo implement addProperty
+            throw new UnsupportedRepositoryOperationException("addProperty");
+        }
+
+        public void setValue(PropertyId propertyId, QValue value) throws RepositoryException {
+            // todo implement setValue
+            throw new UnsupportedRepositoryOperationException("setValue");
+        }
+
+        public void setValue(PropertyId propertyId, QValue[] values) throws RepositoryException {
+            // todo implement setValue
+            throw new UnsupportedRepositoryOperationException("setValue");
+        }
+
+        public void remove(ItemId itemId) throws RepositoryException {
+            // todo implement remove
+            throw new UnsupportedRepositoryOperationException("remove");
+        }
+
+        public void reorderNodes(NodeId parentId, NodeId srcNodeId, NodeId beforeNodeId) throws RepositoryException {
+            // todo implement reorderNodes
+            throw new UnsupportedRepositoryOperationException("reorderNodes");
+        }
+
+        public void setMixins(NodeId nodeId, Name[] mixinNodeTypeNames) throws RepositoryException {
+            // todo implement setMixins
+            throw new UnsupportedRepositoryOperationException("setMixin");
+        }
+
+        public void setPrimaryType(NodeId nodeId, Name primaryNodeTypeName) throws RepositoryException {
+            // todo implement setPrimaryType
+            throw new UnsupportedRepositoryOperationException("setPrimaryType");
+        }
+
+        public void move(NodeId srcNodeId, NodeId destParentNodeId, Name destName) throws RepositoryException {
+            // todo implement move
+            throw new UnsupportedRepositoryOperationException("move");
+        }
+
+        public void commit() throws RepositoryException {
+            String rev = getRevision(sessionInfo);
+            rev = microKernel.commit("/", sb.toString(), rev);
+            setRevision(sessionInfo, rev);
+        }
+    }
+
+    private static class ChangeLog extends ConsolidatingChangeLog {
+        private final SessionInfo sessionInfo;
+
+        public ChangeLog(SessionInfo sessionInfo) {
+            this.sessionInfo = sessionInfo;
+        }
+    }
+
 }

Modified: jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/MicrokernelTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/MicrokernelTest.java?rev=1132946&r1=1132945&r2=1132946&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/MicrokernelTest.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/MicrokernelTest.java Tue Jun  7 10:22:51 2011
@@ -35,7 +35,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertTrue;
 
 public class MicrokernelTest {
-    private static final File REPO_HOME_DIR = new File("target/repository");
+    private static final File REPO_HOME_DIR = new File("target/micro-kernel-test/repository");
 
     private MicroKernelImpl microkernel;
 
@@ -52,7 +52,7 @@ public class MicrokernelTest {
                 "\"multiIntProp\":[1,2,3]} ", head);
         }
     }
-
+    
     @Ignore  // todo fix in microkernel
     @Test
     public void missingName() {

Copied: jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java (from r1132604, jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/Tests.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java?p2=jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java&p1=jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/Tests.java&r1=1132604&r2=1132946&rev=1132946&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/Tests.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java Tue Jun  7 10:22:51 2011
@@ -43,8 +43,8 @@ import java.util.Set;
 import static java.util.Arrays.asList;
 import static org.junit.Assert.*;
 
-public class Tests {
-    private static final File REPO_HOME_DIR = new File("target/repository");
+public class RepositoryTest {
+    private static final File REPO_HOME_DIR = new File("target/repository-test/repository");
     
     private Repository repository;
     private Session session;
@@ -200,6 +200,13 @@ public class Tests {
         assertTrue(property.isSame(propertyAgain));
     }
 
+    @Test
+    public void addNode() throws RepositoryException {
+        Node node = getNode("/bar");
+        node.addNode("new");
+        getSession().save();
+    }
+    
     //------------------------------------------< private >---
 
     private Repository getRepository() throws RepositoryException {