You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/03/22 21:06:37 UTC

svn commit: r1084333 - in /jackrabbit/sandbox/jackrabbit-j3/src: main/java/org/apache/jackrabbit/j3/json/ main/java/org/apache/jackrabbit/j3/observation/ test/java/org/apache/jackrabbit/j3/json/

Author: thomasm
Date: Tue Mar 22 20:06:37 2011
New Revision: 1084333

URL: http://svn.apache.org/viewvc?rev=1084333&view=rev
Log:
Events with Jsop (Json diff) serialization

Added:
    jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/EventImpl.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestEvent.java
Modified:
    jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventAddLock.java
    jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestAll.java

Added: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/EventImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/EventImpl.java?rev=1084333&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/EventImpl.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/json/EventImpl.java Tue Mar 22 20:06:37 2011
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.j3.json;
+
+import org.apache.jackrabbit.j3.mc.Val;
+
+/**
+ * A prototype implementation of an event that can be applied to a node.
+ */
+public class EventImpl {
+
+    final static int NODE_ADD = 0, NODE_REMOVE = 1, NODE_MOVE = 2, NODE_COPY = 3;
+    final static int PROPERTY_ADD = 4, PROPERTY_REMOVE = 5, PROPERTY_CHANGE = 6;
+
+    private String path;
+    private String newPath;
+    private int eventType;
+    private String nodeName;
+    private NodeImpl node;
+    private String propertyName;
+    private Val propertyValue;
+
+    public static EventImpl fromString(String json) {
+        JsopTokenizer t = new JsopTokenizer(json);
+        EventImpl event = new EventImpl();
+        event.path = t.readString();
+        if (t.matches('+')) {
+            if (t.matches('>')) {
+                event.eventType = NODE_COPY;
+                event.newPath = t.readString();
+            } else {
+                String name = t.readString();
+                t.read(':');
+                if (t.matches('{')) {
+                    event.eventType = NODE_ADD;
+                    event.nodeName = name;
+                    event.node = NodeImpl.parse(t);
+                } else {
+                    event.eventType = PROPERTY_ADD;
+                    event.propertyName = name;
+                    event.propertyValue = NodeImpl.parseValue(t);
+                }
+            }
+        } else if (t.matches('-')) {
+            event.eventType = NODE_REMOVE;
+            event.nodeName = t.readString();
+        } else if (t.matches('^')) {
+            event.propertyName = t.readString();
+            t.read(':');
+            if (t.matches(JsopTokenizer.NULL)) {
+                event.eventType = PROPERTY_REMOVE;
+            } else {
+                event.eventType = PROPERTY_CHANGE;
+                event.propertyValue = NodeImpl.parseValue(t);
+            }
+        } else if (t.matches('>')) {
+            event.eventType = NODE_MOVE;
+            event.newPath = t.readString();
+        }
+        return event;
+    }
+
+    public String toString() {
+        StringBuilder buff = new StringBuilder();
+        buff.append(JsopTokenizer.encode(path)).append('\n');
+        switch (eventType) {
+        case NODE_ADD:
+            buff.append("+ ");
+            buff.append(JsopTokenizer.encode(nodeName));
+            buff.append(": ");
+            buff.append(node.toString(Integer.MAX_VALUE));
+            break;
+        case NODE_REMOVE:
+            buff.append("- ");
+            buff.append(JsopTokenizer.encode(nodeName));
+            break;
+        case NODE_MOVE:
+            buff.append("> ");
+            buff.append(JsopTokenizer.encode(newPath));
+            break;
+        case NODE_COPY:
+            buff.append("+ > ");
+            buff.append(JsopTokenizer.encode(newPath));
+            break;
+        case PROPERTY_ADD:
+            buff.append("+ ");
+            buff.append(JsopTokenizer.encode(propertyName));
+            buff.append(": ");
+            buff.append(propertyValue.toString());
+            break;
+        case PROPERTY_REMOVE:
+            buff.append("^ ");
+            buff.append(JsopTokenizer.encode(propertyName));
+            buff.append(": null");
+            break;
+        case PROPERTY_CHANGE:
+            buff.append("^ ");
+            buff.append(JsopTokenizer.encode(propertyName));
+            buff.append(": ");
+            buff.append(propertyValue.toString());
+            break;
+        }
+        return buff.toString();
+    }
+
+}

Modified: jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventAddLock.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventAddLock.java?rev=1084333&r1=1084332&r2=1084333&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventAddLock.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/main/java/org/apache/jackrabbit/j3/observation/EventAddLock.java Tue Mar 22 20:06:37 2011
@@ -24,7 +24,6 @@ import org.apache.jackrabbit.j3.lock.Loc
 import org.apache.jackrabbit.j3.mc.Bundle;
 import org.apache.jackrabbit.j3.mc.Val;
 
-
 /**
  * Add a lock.
  */

Modified: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestAll.java?rev=1084333&r1=1084332&r2=1084333&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestAll.java (original)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestAll.java Tue Mar 22 20:06:37 2011
@@ -35,6 +35,7 @@ public class TestAll extends TestCase {
     public static Test suite() {
         TestSuite suite = new TestSuite("org.apache.jackrabbit.j3.json");
 
+        suite.addTestSuite(TestEvent.class);
         suite.addTestSuite(TestNode.class);
         suite.addTestSuite(TestTokenizer.class);
 

Added: jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestEvent.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestEvent.java?rev=1084333&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestEvent.java (added)
+++ jackrabbit/sandbox/jackrabbit-j3/src/test/java/org/apache/jackrabbit/j3/json/TestEvent.java Tue Mar 22 20:06:37 2011
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.j3.json;
+
+import junit.framework.TestCase;
+
+/**
+ * Test converting a node to Json diff and back.
+ */
+public class TestEvent extends TestCase {
+
+    public void test() {
+        EventImpl event;
+
+        // add node
+        event = EventImpl.fromString("\"/testRoot\" + \"x\": { \"id\": 1 }");
+        assertEquals("\"/testRoot\"\n+ \"x\": {\"id\": 1\n}", event.toString());
+
+        // remove node
+        event = EventImpl.fromString("\"/testRoot\" - \"x\"");
+        assertEquals("\"/testRoot\"\n- \"x\"", event.toString());
+
+        // move node
+        event = EventImpl.fromString("\"/testRoot/x\" > \"/testRoot/y\"");
+        assertEquals("\"/testRoot/x\"\n> \"/testRoot/y\"", event.toString());
+
+        // copy node
+        event = EventImpl.fromString("\"/testRoot/x\" + > \"/testRoot/y\"");
+        assertEquals("\"/testRoot/x\"\n+ > \"/testRoot/y\"", event.toString());
+
+        // add property
+        event = EventImpl.fromString("\"/testRoot/x\" + \"id\": 2");
+        assertEquals("\"/testRoot/x\"\n+ \"id\": 2", event.toString());
+
+        // remove property
+        event = EventImpl.fromString("\"/testRoot/x\" ^ \"id\": null");
+        assertEquals("\"/testRoot/x\"\n^ \"id\": null", event.toString());
+
+        // change property
+        event = EventImpl.fromString("\"/testRoot/x\" ^ \"id\": 3");
+        assertEquals("\"/testRoot/x\"\n^ \"id\": 3", event.toString());
+
+    }
+
+}