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/10/13 18:57:10 UTC

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

Author: mduerig
Date: Thu Oct 13 16:57:10 2011
New Revision: 1182978

URL: http://svn.apache.org/viewvc?rev=1182978&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
JSON encode commit messages

Added:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitInfo.java
      - copied, changed from r1182710, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitInfoTest.java
      - copied, changed from r1182710, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitMessageTest.java
Removed:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitMessageTest.java
Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SessionInfoImpl.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SubscriptionImpl.java

Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitInfo.java (from r1182710, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitInfo.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitInfo.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java&r1=1182710&r2=1182978&rev=1182978&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitMessage.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/CommitInfo.java Thu Oct 13 16:57:10 2011
@@ -2,91 +2,102 @@ package org.apache.jackrabbit.spi2microk
 
 
 import org.apache.jackrabbit.spi.commons.util.Unchecked;
-import org.apache.jackrabbit.util.Text;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class CommitMessage {
-    private static final Logger log = LoggerFactory.getLogger(CommitMessage.class);
+import java.util.Map;
 
-    private final String userId;
-    private final String userData;
+public class CommitInfo {
+    private static final Logger log = LoggerFactory.getLogger(CommitInfo.class);
+    
+    private final JSONObject jsonObject;
 
-    private static final char ESCAPE_CHAR = '\\';
-    private static final char SEPARATOR_CHAR = ':';
-
-    public static CommitMessage parse(String s) {
-        if (s == null) {
+    public static CommitInfo parse(String json) {
+        if (json == null) {
             IllegalArgumentException e = new IllegalArgumentException("null");
             log.error(e.getMessage(), e);
             throw e;
         }
 
-        int k = s.indexOf(SEPARATOR_CHAR);
-        while (k > 0 && s.charAt(k - 1) == ESCAPE_CHAR) {
-            k = s.indexOf(SEPARATOR_CHAR, k + 1);
+        try {
+            Object o = new JSONParser().parse(json);
+            if (o instanceof JSONObject) {
+                return new CommitInfo((JSONObject) o);
+            }
+            else {
+                IllegalArgumentException e = new IllegalArgumentException("Not a JSON object: " + json);
+                log.error(e.getMessage(), e);
+                throw e;
+            }
+        }
+        catch (ParseException pe) {
+            log.error(pe.getMessage(), pe);
+            throw new IllegalArgumentException("Syntax error in JSON: " + json, pe);
         }
-
-        return k == -1
-            ? null
-            : new CommitMessage(unescape(s.substring(0, k)), unescape(s.substring(k + 1, s.length())));
     }
 
-    public CommitMessage(String userId, String userData) {
-        if (userId == null) {
-            IllegalArgumentException e = new IllegalArgumentException("UserId is null");
-            log.error(e.getMessage(), e);
-            throw e;
-        }
-        if (userData == null) {
-            IllegalArgumentException e = new IllegalArgumentException("UserData is null");
-            log.error(e.getMessage(), e);
-            throw e;
-        }
+    private CommitInfo(JSONObject jsonObject) {
+        this.jsonObject = jsonObject;
+    }
 
-        this.userId = userId;
-        this.userData = userData;
+    public CommitInfo() {
+        jsonObject = new JSONObject();
     }
 
     public String getUserId() {
-        return userId;
+        return getValue("UserId");
+    }
+
+    public CommitInfo setUserId(String userId) {
+        return setValue("UserId", userId);
     }
 
     public String getUserData() {
-        return userData;
+        return getValue("UserData");
     }
 
-    public String encode() {
-        return escape(userId) + SEPARATOR_CHAR + escape(userData);
+    public CommitInfo setUserData(String userData) {
+        return setValue("UserData", userData);
     }
 
-    @Override
-    public int hashCode() {
-        return 37 * (37 * 17 + userId.hashCode()) + userData.hashCode();
+    public String getSessionId() {
+        return getValue("SessionId");
     }
 
-    @Override
-    public boolean equals(Object other) {
-        return other == this || other instanceof CommitMessage && equals(Unchecked.<CommitMessage>cast(other));
+    public CommitInfo setSessionId(String sessionId) {
+        return setValue("SessionId", sessionId);
     }
 
-    @Override
-    public String toString() {
-        return encode();
+    public String getValue(String key) {
+        Object value = jsonObject.get(key);
+        return value == null ? null : value.toString();
     }
 
-    //------------------------------------------< private >---
+    public CommitInfo setValue(String key, String value) {
+        Unchecked.<Map<String, String>>cast(jsonObject).put(key, value);
+        return this;
+    }
 
-    protected boolean equals(CommitMessage other) {
-        return other.userId.equals(userId) && other.userData.equals(userData);
+    public String toJson() {
+        return jsonObject.toJSONString();
     }
 
-    private static String escape(String s) {
-        return Text.escapeWith(s, SEPARATOR_CHAR, ESCAPE_CHAR);
+    @Override
+    public String toString() {
+        return toJson();
     }
 
-    private static String unescape(String s) {
-        return Text.unescapeWith(s, ESCAPE_CHAR);
+    @Override
+    public boolean equals(Object that) {
+        return that instanceof CommitInfo && ((CommitInfo) that).jsonObject.equals(jsonObject);
+    }
+
+    @Override
+    public int hashCode() {
+        return jsonObject.hashCode();
     }
-        
+
 }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java?rev=1182978&r1=1182977&r2=1182978&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java Thu Oct 13 16:57:10 2011
@@ -1071,14 +1071,22 @@ public class RepositoryServiceImpl exten
                 @Override
                 public String apply(MicroKernel microKernel) throws RepositoryException {
                     String rev = getRevision(sessionInfo);
-                    String userId = sessionInfo.getUserID();
-                    String userData = sessionInfo.getUserData();
-                    CommitMessage commitMessage = new CommitMessage(userId, userData == null ? "" : userData);
-                    return microKernel.commit("/", jsop.toString(), rev, commitMessage.encode());
+                    CommitInfo commitInfo = commitInfo(sessionInfo);
+                    return microKernel.commit("/", jsop.toString(), rev, commitInfo.toJson());
                 }
             });
         }
 
+        private CommitInfo commitInfo(SessionInfoImpl sessionInfo) {
+            CommitInfo commitInfo = new CommitInfo();
+            commitInfo.setUserId(sessionInfo.getUserID());
+            commitInfo.setSessionId(sessionInfo.getId());
+            if (sessionInfo.getUserData() != null) {
+                commitInfo.setUserData(sessionInfo.getUserData());
+            }
+            return commitInfo;
+        }
+
         private String target(NodeId nodeId) throws RepositoryException {
             String wspName = sessionInfo.getWorkspaceName();
             Path path = getPath(nodeId, wspName, getRevision(sessionInfo));

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SessionInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SessionInfoImpl.java?rev=1182978&r1=1182977&r2=1182978&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SessionInfoImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SessionInfoImpl.java Thu Oct 13 16:57:10 2011
@@ -27,10 +27,12 @@ import org.slf4j.LoggerFactory;
 import javax.jcr.RepositoryException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 public class SessionInfoImpl extends org.apache.jackrabbit.spi.commons.SessionInfoImpl {
     private static final Logger log = LoggerFactory.getLogger(SessionInfoImpl.class);
 
+    private final String id = UUID.randomUUID().toString();
     private final MicroKernel microKernel;
     private final List<String> commitLog = new ArrayList<String>();
 
@@ -44,6 +46,10 @@ public class SessionInfoImpl extends org
         commitLog.add(revision);
     }
 
+    public String getId() {
+        return id;
+    }
+
     public String getRevision() {
         return revision;
     }
@@ -58,7 +64,7 @@ public class SessionInfoImpl extends org
         }
         catch (Exception e) {
             log.error(e.getMessage(), e);
-            throw new RepositoryException(e.getMessage(), e); 
+            throw new RepositoryException(e.getMessage(), e);
         }
     }
 

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SubscriptionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SubscriptionImpl.java?rev=1182978&r1=1182977&r2=1182978&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SubscriptionImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/SubscriptionImpl.java Thu Oct 13 16:57:10 2011
@@ -302,8 +302,8 @@ public class SubscriptionImpl implements
         private EventBundle createEventBundle(JSONObject jsonObject) throws RepositoryException {
             String revisionId = getString(jsonObject, "id", false);
             String msg = getString(jsonObject, "msg", true);
-            CommitMessage commitMessage = parseCommitMessage(msg);
-            if (commitMessage == null) {
+            CommitInfo commitInfo = parseCommitMessage(msg);
+            if (commitInfo == null) {
                 // Skip alien commits
                 return null;
             }
@@ -314,8 +314,8 @@ public class SubscriptionImpl implements
 
             EventTemplate eventTemplate = new EventTemplate()
                     .setTimestamp(timeStamp)
-                    .setUserId(commitMessage.getUserId())
-                    .setUserData(commitMessage.getUserData());
+                    .setUserId(commitInfo.getUserId())
+                    .setUserData(commitInfo.getUserData());
 
             Collection<Event> events = getEvents(changes, eventTemplate);
             boolean isLocal = sessionInfo.hasRevision(revisionId);
@@ -338,8 +338,8 @@ public class SubscriptionImpl implements
             return new EventBundleImpl(events, isLocal);
         }
 
-        private CommitMessage parseCommitMessage(String msg) {
-            return msg == null ? null : CommitMessage.parse(msg);
+        private CommitInfo parseCommitMessage(String msg) {
+            return msg == null ? null : CommitInfo.parse(msg);
         }
 
         private Collection<Event> getEvents(String changes, EventTemplate eventTemplate) throws RepositoryException {

Copied: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitInfoTest.java (from r1182710, jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitMessageTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitInfoTest.java?p2=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitInfoTest.java&p1=jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitMessageTest.java&r1=1182710&r2=1182978&rev=1182978&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitMessageTest.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/CommitInfoTest.java Thu Oct 13 16:57:10 2011
@@ -4,45 +4,32 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class CommitMessageTest {
+public class CommitInfoTest {
 
     @Test
     public void testEncode() {
-        CommitMessage msg = new CommitMessage("user", "data");
+        CommitInfo msg = new CommitInfo().setUserId("user").setUserData("data").setSessionId("session");
         assertEquals("user", msg.getUserId());
         assertEquals("data", msg.getUserData());
-        assertEquals("user:data", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
+        assertEquals("session", msg.getSessionId());
+        assertEquals(msg, CommitInfo.parse(msg.toJson()));
 
-        msg = new CommitMessage("us:er", "data");
-        assertEquals("us:er", msg.getUserId());
-        assertEquals("data", msg.getUserData());
-        assertEquals("us\\:er:data", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
-
-        msg = new CommitMessage("", "data");
+        msg = new CommitInfo().setUserId("").setUserData("data").setSessionId("session");
         assertEquals("", msg.getUserId());
         assertEquals("data", msg.getUserData());
-        assertEquals(":data", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
+        assertEquals("session", msg.getSessionId());
+        assertEquals(msg, CommitInfo.parse(msg.toJson()));
 
-        msg = new CommitMessage("user", "");
+        msg = new CommitInfo().setUserId("user").setUserData("").setSessionId("session");
         assertEquals("user", msg.getUserId());
         assertEquals("", msg.getUserData());
-        assertEquals("user:", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
+        assertEquals("session", msg.getSessionId());
+        assertEquals(msg, CommitInfo.parse(msg.toJson()));
 
-        msg = new CommitMessage("", "");
+        msg = new CommitInfo().setUserId("").setUserData("").setSessionId("session");
         assertEquals("", msg.getUserId());
         assertEquals("", msg.getUserData());
-        assertEquals(":", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
-
-        msg = new CommitMessage(":", ":");
-        assertEquals(":", msg.getUserId());
-        assertEquals(":", msg.getUserData());
-        assertEquals("\\::\\:", msg.encode());
-        assertEquals(msg, CommitMessage.parse(msg.encode()));
-
+        assertEquals("session", msg.getSessionId());
+        assertEquals(msg, CommitInfo.parse(msg.toJson()));
     }
 }