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/10 16:23:52 UTC

svn commit: r1134331 - /jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java

Author: thomasm
Date: Fri Jun 10 14:23:51 2011
New Revision: 1134331

URL: http://svn.apache.org/viewvc?rev=1134331&view=rev
Log:
Simplify building JSOP, and correctly encode keys and values.

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

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java?rev=1134331&r1=1134330&r2=1134331&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java Fri Jun 10 14:23:51 2011
@@ -107,23 +107,15 @@ public class MicroKernelImpl implements 
             throw new MicroKernelException(e);
         }
 
-        StringBuilder buf = new StringBuilder();
-        buf.append("[");
+        JsopBuilder buff = new JsopBuilder().array();
         for (int i = history.size() - 1; i >= 0; i--) {
             Commit commit = history.get(i);
-            buf.append("{");
-            buf.append("\"id\":\"");
-            buf.append(commit.getId());
-            buf.append("\",\"ts\":\"");
-            buf.append(commit.getCommitTS());
-            buf.append("\"},");
-        }
-        // trim redundant trailing comma
-        if (buf.charAt(buf.length() - 1) == ',') {
-            buf.deleteCharAt(buf.length() - 1);
+            buff.object().
+                key("id").value(commit.getId()).
+                key("ts").value(commit.getCommitTS()).
+            endObject();
         }
-        buf.append("]");
-        return buf.toString();
+        return buff.endArray().toString();
     }
 
     public String getJournal(String fromRevisionId, String toRevisionId) throws MicroKernelException {
@@ -149,21 +141,16 @@ public class MicroKernelImpl implements 
             throw new MicroKernelException(e);
         }
 
-        final StringBuilder buf = new StringBuilder();
-        buf.append("[");
+        JsopBuilder commitBuff = new JsopBuilder().array();
         for (int i = commits.size() - 1; i >= 0; i--) {
             Commit commit = commits.get(i);
             if (commit.getParentId() == null) {
                 continue;
             }
-            buf.append("{");
-            buf.append("\"id\":\"");
-            buf.append(commit.getId());
-            buf.append("\",\"ts\":\"");
-            buf.append(commit.getCommitTS());
-            buf.append("\",\"changes\":\"");
-
-            // todo escape double quotes in diff
+            commitBuff.object().
+                key("id").value(commit.getId()).
+                key("ts").value(commit.getCommitTS());
+            final JsopBuilder buff = new JsopBuilder();
             try {
                 String path = "/";
                 Node node1 = rep.getNode(commit.getParentId(), path);
@@ -171,45 +158,40 @@ public class MicroKernelImpl implements 
 
                 NodeUtils.diff(path, node1, node2, true, rep.getStore(), new NodeDiffHandler() {
                     public void propAdded(String nodePath, String propName, String value) {
-                        buf.append("+\"");
-                        buf.append(PathUtil.concat(nodePath, propName));
-                        buf.append("\" : \"");
-                        buf.append(value);
-                        buf.append("\"\n");
+                        buff.append("+ ").
+                            key(PathUtil.concat(nodePath, propName)).
+                            value(value).
+                            append("\n");
                     }
 
                     public void propChanged(String nodePath, String propName, String oldValue, String newValue) {
-                        buf.append("^\"");
-                        buf.append(PathUtil.concat(nodePath, propName));
-                        buf.append("\" : \"");
-                        buf.append(newValue);
-                        buf.append("\"\n");
+                        buff.append("^ ").
+                            key(PathUtil.concat(nodePath, propName)).
+                            value(newValue).
+                            append("\n");
                     }
 
                     public void propDeleted(String nodePath, String propName, String value) {
-                        buf.append("-\"");
-                        buf.append(PathUtil.concat(nodePath, propName));
-                        buf.append("\"\n");
+                        buff.append("- ").
+                            key(PathUtil.concat(nodePath, propName)).
+                            append("\n");
                     }
 
                     public void childNodeAdded(String nodePath, String childName, String id) {
-                        buf.append("+\"");
-                        buf.append(PathUtil.concat(nodePath, childName));
-                        buf.append("\" : ");
+                        buff.append("+ ").
+                            key(PathUtil.concat(nodePath, childName));
                         try {
-                            toJson(rep.getStore().getNode(id), childName, Integer.MAX_VALUE, false, buf);
+                            toJson(rep.getStore().getNode(id), childName, Integer.MAX_VALUE, false, buff);
                         } catch (Exception e) {
-                            buf.append("\"ERROR: failed to retrieve node ");
-                            buf.append(id);
-                            buf.append("\"");
+                            buff.value("ERROR: failed to retrieve node " + id);
                         }
-                        buf.append("\n");
+                        buff.append("\n");
                     }
 
                     public void childNodeDeleted(String nodePath, String childName, String id) {
-                        buf.append("-\"");
-                        buf.append(PathUtil.concat(nodePath, childName));
-                        buf.append("\"\n");
+                        buff.append("- ");
+                        buff.value(PathUtil.concat(nodePath, childName));
+                        buff.append("\n");
                     }
 
                     public void childNodeChanged(String nodePath, String childName, String oldId, String newId) {
@@ -219,16 +201,9 @@ public class MicroKernelImpl implements 
             } catch (Exception e) {
                 throw new MicroKernelException(e);
             }
-
-            buf.append("\"},");
-        }
-        // trim redundant trailing comma
-        if (buf.charAt(buf.length() - 1) == ',') {
-            buf.deleteCharAt(buf.length() - 1);
+            commitBuff.key("changes").value(buff.toString()).endObject();
         }
-        buf.append("]");
-
-        return buf.toString();
+        return commitBuff.endArray().toString();
     }
 
     public boolean nodeExists(String path, String revisionId) throws MicroKernelException {
@@ -250,7 +225,7 @@ public class MicroKernelImpl implements 
         }
 
         try {
-            StringBuilder buf = new StringBuilder();
+            JsopBuilder buf = new JsopBuilder();
             toJson(rep.getNode(revisionId, path), PathUtil.getName(path), depth, true, buf);
             return buf.toString();
         } catch (Exception e) {
@@ -265,8 +240,7 @@ public class MicroKernelImpl implements 
 
         try {
             Node node = rep.getNode(revisionId, path);
-            StringBuilder buf = new StringBuilder();
-            buf.append('[');
+            JsopBuilder buf = new JsopBuilder().array();
             long pos = 0;
             for (Map.Entry<String, String> entry : node.getChildNodeEntries().entrySet()) {
                 if (pos < offset) {
@@ -277,15 +251,9 @@ public class MicroKernelImpl implements 
                     break;
                 }
                 toJson(rep.getStore().getNode(entry.getValue()), entry.getKey(), depth, true, buf);
-                buf.append(',');
                 pos++;
             }
-            // trim redundant trailing comma
-            if (buf.charAt(buf.length() - 1) == ',') {
-                buf.deleteCharAt(buf.length() - 1);
-            }
-            buf.append(']');
-            return buf.toString();
+            return buf.endArray().toString();
         } catch (Exception e) {
             throw new MicroKernelException(e);
         }
@@ -398,36 +366,29 @@ public class MicroKernelImpl implements 
 
     //-------------------------------------------------------< implementation >
 
-    void toJson(Node node, String name, int depth, boolean metaProps, StringBuilder buf) throws Exception {
-        toJson(node, name, depth, metaProps, JsonBuilder.create(buf));
-    }
-
-    void toJson(Node node, String name, int depth, boolean metaProps, JsonObjectBuilder builder) throws Exception {
+    void toJson(Node node, String name, int depth, boolean metaProps, JsopBuilder builder) throws Exception {
         if (metaProps) {
-            builder.value(":name", name);
+            builder.key(":name").value(name);
         }
         for (Map.Entry<String, String> prop : node.getProperties().entrySet()) {
-            builder.valueEncoded(prop.getKey(), prop.getValue());
+            builder.key(prop.getKey()).encodedValue(prop.getValue());
         }
 
         long childCount = node.getChildNodeCount();
         if (metaProps) {
-            builder.value(":childNodeCount", childCount);
+            builder.key(":childNodeCount").value(childCount);
         }
         if (childCount > 0 && depth >= 0) {
             for (Map.Entry<String, String> child : node.getChildNodeEntries().entrySet()) {
                 String childName = child.getKey();
-                JsonObjectBuilder childBuilder = builder.object(childName);
+                builder.key(childName).object();
                 if (depth > 0) {
                     String childId = child.getValue();
-                    toJson(rep.getStore().getNode(childId), childName, depth - 1, metaProps, childBuilder);
-                }
-                else {
-                    childBuilder.build();
+                    toJson(rep.getStore().getNode(childId), childName, depth - 1, metaProps, builder);
                 }
+                builder.endObject();
             }
         }
-        builder.build();
     }
 
     static void addNode(CommitBuilder cb, String path, String name, JSONObject jsonNode) throws Exception {