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/06/14 17:20:29 UTC

svn commit: r1135641 - in /jackrabbit/sandbox/microkernel/src: main/java/org/apache/jackrabbit/mk/mem/ test/java/org/apache/jackrabbit/mk/json/

Author: thomasm
Date: Tue Jun 14 15:20:28 2011
New Revision: 1135641

URL: http://svn.apache.org/viewvc?rev=1135641&view=rev
Log:
Simplify the in-memory implementation (store raw Json)

Removed:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/PropertyType.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/Val.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/ValTest.java
Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/MemoryKernelImpl.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/MemoryKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/MemoryKernelImpl.java?rev=1135641&r1=1135640&r2=1135641&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/MemoryKernelImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/MemoryKernelImpl.java Tue Jun 14 15:20:28 2011
@@ -20,6 +20,7 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.TreeMap;
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.json.JsopBuilder;
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
 
 /**
@@ -110,13 +111,13 @@ public class MemoryKernelImpl implements
             case '^':
                 path = t.readString();
                 t.read(':');
-                Val val;
+                String value;
                 if (t.matches(JsopTokenizer.NULL)) {
-                    val = null;
+                    value = null;
                 } else {
-                    val = NodeImpl.parseValue(t);
+                    value = t.readRawValue().trim();
                 }
-                headRoot = headRoot.cloneAndSetProperty(rootPath + path, val, headRevId);
+                headRoot = headRoot.cloneAndSetProperty(rootPath + path, value, headRevId);
                 break;
             default:
                 throw new AssertionError("token type: " + t.getTokenType());
@@ -125,12 +126,13 @@ public class MemoryKernelImpl implements
     }
 
     public long getChildNodeCount(String path, String revisionId) {
-        // TODO is it required? might as well use getNodes(path) with depth 0
         return getNode(path, revisionId).getChildNodeCount();
     }
 
     public String getChildNodes(String path, long offset, long count, int depth, String revisionId) {
-        return getNode(path, revisionId).toString(false, depth, (int) offset, (int) count);
+        JsopBuilder json = new JsopBuilder().array();
+        getNode(path, revisionId).appendChildNodes(json, (int) offset, (int) count);
+        return json.endArray().toString();
     }
 
     private NodeImpl getNode(String path, String revisionId) {
@@ -168,7 +170,9 @@ public class MemoryKernelImpl implements
         if (n == null) {
             throw new RuntimeException("path not found: " + path);
         }
-        return n.toString(true, depth, -1, -1);
+        JsopBuilder json = new JsopBuilder();
+        n.append(json, true, depth);
+        return json.toString();
     }
 
     public String getRevisions(long since, int maxEntries) {

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java?rev=1135641&r1=1135640&r2=1135641&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java Tue Jun 14 15:20:28 2011
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.mk.mem;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map.Entry;
@@ -26,7 +25,7 @@ import org.apache.jackrabbit.mk.json.Jso
 public class NodeImpl {
 
     final long revId;
-    HashMap<String, Val> properties;
+    HashMap<String, String> properties;
     LinkedHashMap<String, NodeImpl> childNodes;
 
     NodeImpl(long revId) {
@@ -39,7 +38,7 @@ public class NodeImpl {
         }
         NodeImpl clone = new NodeImpl(revId);
         if (properties != null) {
-            clone.properties = new HashMap<String, Val>(properties);
+            clone.properties = new HashMap<String, String>(properties);
         }
         if (childNodes != null) {
             clone.childNodes = new LinkedHashMap<String, NodeImpl>(childNodes);
@@ -122,7 +121,7 @@ public class NodeImpl {
         return c;
     }
 
-    public NodeImpl cloneAndSetProperty(String path, Val value, long revId) {
+    public NodeImpl cloneAndSetProperty(String path, String value, long revId) {
         int index = path.indexOf('/');
         if (index < 0) {
             NodeImpl clone = clone(revId);
@@ -141,24 +140,34 @@ public class NodeImpl {
     }
 
     public String toString() {
-        return toString(true, 1, -1, -1);
+        JsopBuilder json = new JsopBuilder();
+        append(json, true, 1);
+        return json.toString();
     }
 
-    public String toString(boolean includeProperties, int depth, int childOffset, int childCount) {
-        JsopBuilder json = new JsopBuilder();
+    public void appendChildNodes(JsopBuilder json, int childOffset, int childCount) {
+        if (childNodes != null) {
+            for (Entry<String, NodeImpl> e : childNodes.entrySet()) {
+                json.value(e.getKey());
+            }
+        }
+    }
+
+    public void append(JsopBuilder json, boolean includeProperties, int depth) {
         if (includeProperties) {
             json.object();
             if (properties != null) {
-                for (Entry<String, Val> e : properties.entrySet()) {
-                    json.key(e.getKey()).encodedValue(e.getValue().toString());
+                for (Entry<String, String> e : properties.entrySet()) {
+                    json.key(e.getKey()).encodedValue(e.getValue());
                 }
             }
         }
         if (childNodes != null) {
             json.key(":childNodeCount").value(childNodes.size());
-            if (depth > 0) {
+            if (depth >= 0) {
                 for (Entry<String, NodeImpl> e : childNodes.entrySet()) {
-                    json.key(e.getKey()).encodedValue(e.getValue().toString(true, depth - 1, -1, -1));
+                    json.key(e.getKey());
+                    e.getValue().append(json, true, depth - 1);
                 }
             }
         } else {
@@ -169,7 +178,6 @@ public class NodeImpl {
         if (includeProperties) {
             json.endObject();
         }
-        return json.toString();
     }
 
     void addChildNode(String name, NodeImpl node) {
@@ -179,7 +187,7 @@ public class NodeImpl {
             throw new RuntimeException("Node already exiss: " + name);
         }
         if (Constants.NODE_NAME_AS_PROPERTY) {
-            node.setProperty(":name", Val.get(name));
+            node.setProperty(":name", JsopBuilder.encode(name));
         }
         childNodes.put(name, node);
     }
@@ -196,9 +204,9 @@ public class NodeImpl {
         }
     }
 
-    void setProperty(String name, Val value) {
+    void setProperty(String name, String value) {
         if (properties == null) {
-            properties = new HashMap<String, Val>();
+            properties = new HashMap<String, String>();
         }
         if (value == null) {
             properties.remove(name);
@@ -219,8 +227,8 @@ public class NodeImpl {
                 if (t.matches('{')) {
                     node.addChildNode(key, parse(t, revId));
                 } else {
-                    Val val = parseValue(t);
-                    node.setProperty(key, val);
+                    String value = t.readRawValue().trim();
+                    node.setProperty(key, value);
                 }
             } while (t.matches(','));
             t.read('}');
@@ -228,47 +236,5 @@ public class NodeImpl {
         return node;
     }
 
-    static Val parseValue(JsopTokenizer t) {
-        if (t.matches('[')) {
-            ArrayList<Val> list = new ArrayList<Val>();
-            if (!t.matches(']')) {
-                do {
-                    list.add(parseValue(t));
-                } while (t.matches(','));
-                t.read(']');
-            }
-            Val[] array = new Val[list.size()];
-            list.toArray(array);
-            return Val.get(array);
-        } else if (t.matches(JsopTokenizer.NUMBER)) {
-            String token = t.getToken();
-            if (token.indexOf('.') >= 0) {
-                if (token.indexOf('e') >= 0) {
-                    return Val.get(Double.parseDouble(token));
-                }
-                return Val.get(PropertyType.DECIMAL, token);
-            }
-            return Val.get(Long.parseLong(token));
-        } else if (t.matches(JsopTokenizer.TRUE)) {
-            return Val.TRUE;
-        } else if (t.matches(JsopTokenizer.FALSE)) {
-            return Val.FALSE;
-        } else if (t.matches(JsopTokenizer.COMMENT)) {
-            String typeName = t.getToken().trim();
-            int type = PropertyType.valueFromName(typeName);
-            return Val.get(type, t.readString());
-        }
-        String s = t.readString();
-        String escaped = t.getEscapedToken();
-        if (!escaped.startsWith("\\/")) {
-            return Val.get(s);
-        }
-        s = escaped.substring(2);
-        if (s.startsWith("NaN")) {
-            return Val.get(Double.NaN);
-        }
-        return Val.get(s);
-
-    }
 
 }