You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/04/04 18:05:08 UTC

svn commit: r644750 - /incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java

Author: cziegeler
Date: Fri Apr  4 09:05:04 2008
New Revision: 644750

URL: http://svn.apache.org/viewvc?rev=644750&view=rev
Log:
Write lengths of binaries correctly and prefix it with a colon instead of a star.

Modified:
    incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java

Modified: incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java?rev=644750&r1=644749&r2=644750&view=diff
==============================================================================
--- incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java (original)
+++ incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java Fri Apr  4 09:05:04 2008
@@ -39,9 +39,9 @@
  *  are threadsafe.
  */
 public class JsonItemWriter {
-    
+
     private static DateFormat calendarFormat;
-    
+
     private final Set<String> propertyNamesToIgnore;
 
     /** Create a JsonItemWriter
@@ -74,7 +74,7 @@
     public void dump(Property p, Writer w) throws JSONException, ValueFormatException, RepositoryException {
         final JSONWriter jw = new JSONWriter(w);
         jw.object();
-        writeProperty(jw, 0, p);
+        writeProperty(jw, p);
         jw.endObject();
     }
 
@@ -93,16 +93,7 @@
                 continue;
             }
 
-            if (!prop.getDefinition().isMultiple()) {
-                writeProperty(w, currentRecursionLevel, prop);
-            } else {
-                w.key(prop.getName()); 
-                w.array();
-                for(Value v : prop.getValues()) {
-                    dumpValue(w, v);
-                }
-                w.endArray();
-            }
+            writeProperty(w, prop);
         }
 
         // the child nodes
@@ -134,19 +125,38 @@
     /**
      * Write a single property
      */
-    protected void writeProperty(JSONWriter w, int indent, Property p)
+    protected void writeProperty(JSONWriter w, Property p)
     throws ValueFormatException, RepositoryException, JSONException {
-        if(p.getType() == PropertyType.BINARY) {
-            // TODO for now we mark binary properties with an initial star in their name
-            // (star is not allowed as a JCR property name)
+        // special handling for binaries: we dump the length and not the length
+                if (p.getType() == PropertyType.BINARY) {
+            // TODO for now we mark binary properties with an initial colon in their name
+            // (colon is not allowed as a JCR property name)
             // in the name, and the value should be the size of the binary data
-            w.key("*" + p.getName());
+            w.key(":" + p.getName());
+            if (!p.getDefinition().isMultiple()) {
+                w.value(p.getLength());
+            } else {
+                final long[] sizes = p.getLengths();
+                w.array();
+                for(int i=0;i<sizes.length;i++) {
+                    w.value(sizes[i]);
+                }
+                w.endArray();
+            }
+            return;
+        }
+        w.key(p.getName());
 
+        if (!p.getDefinition().isMultiple()) {
+            dumpValue(w, p.getValue());
         } else {
             w.key(p.getName());
+            w.array();
+            for(Value v : p.getValues()) {
+                dumpValue(w, v);
+            }
+            w.endArray();
         }
-
-        dumpValue(w, p.getValue());
     }
 
     /**
@@ -154,7 +164,7 @@
      * conversions are done:
      * <table>
      *   <tr><th>JSR Property Type</th><th>JSON Value Type</th></tr>
-     *   <tr><td>BINARY</td><td>size of binary value as long<sup>1</sup></td></tr>
+     *   <tr><td>BINARY</td><td>always 0 as long</td></tr>
      *   <tr><td>DATE</td><td>converted date string as defined by ECMA</td></tr>
      *   <tr><td>BOOLEAN</td><td>boolean</td></tr>
      *   <tr><td>LONG</td><td>long</td></tr>
@@ -162,7 +172,7 @@
      *   <tr><td><i>all other</li></td><td>string</td></tr>
      * </table>
      * <sup>1</sup> Currently not implemented and uses 0 as default.
-     * 
+     *
      * @param w json writer
      * @param v value to dump
      */
@@ -172,18 +182,17 @@
 
         switch (v.getType()) {
             case PropertyType.BINARY:
-                // TODO return the binary size
                 w.value(0);
                 break;
 
             case PropertyType.DATE:
                 w.value(format(v.getDate()));
                 break;
-            
+
             case PropertyType.BOOLEAN:
                 w.value(v.getBoolean());
                 break;
-            
+
             case PropertyType.LONG:
                 w.value(v.getLong());
                 break;
@@ -196,7 +205,7 @@
                 w.value(v.getString());
         }
     }
-    
+
     public static synchronized String format(Calendar date) {
         if (calendarFormat == null) {
             calendarFormat = new SimpleDateFormat(



Re: svn commit: r644750 - /incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java

Posted by Carsten Ziegeler <cz...@apache.org>.
Tobias Bocanegra wrote:
> why did you change this without a proper jira issue?
> i think that all clients that rely on this need to be informed.
> 
Yeah, my mistake - sorry!

The changes fix some todos (the binary lengths is no correctly written 
to the response) and changing the prefix of the binary property name 
from "*" to ":".

Hope this does not create any problems, if so please let me know and we 
can revert or change to something different.

Carsten

-- 
Carsten Ziegeler
cziegeler@apache.org

Re: svn commit: r644750 - /incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java

Posted by Tobias Bocanegra <to...@day.com>.
why did you change this without a proper jira issue?
i think that all clients that rely on this need to be informed.

regards, toby


On 4/4/08, cziegeler@apache.org <cz...@apache.org> wrote:
> Author: cziegeler
>  Date: Fri Apr  4 09:05:04 2008
>  New Revision: 644750
>
>  URL: http://svn.apache.org/viewvc?rev=644750&view=rev
>  Log:
>  Write lengths of binaries correctly and prefix it with a colon instead of a star.
>
>  Modified:
>     incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java
>
>  Modified: incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java
>  URL: http://svn.apache.org/viewvc/incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java?rev=644750&r1=644749&r2=644750&view=diff
>  ==============================================================================
>  --- incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java (original)
>  +++ incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/jcr/JsonItemWriter.java Fri Apr  4 09:05:04 2008
>  @@ -39,9 +39,9 @@
>   *  are threadsafe.
>   */
>   public class JsonItemWriter {
>  -
>  +
>      private static DateFormat calendarFormat;
>  -
>  +
>      private final Set<String> propertyNamesToIgnore;
>
>      /** Create a JsonItemWriter
>  @@ -74,7 +74,7 @@
>      public void dump(Property p, Writer w) throws JSONException, ValueFormatException, RepositoryException {
>          final JSONWriter jw = new JSONWriter(w);
>          jw.object();
>  -        writeProperty(jw, 0, p);
>  +        writeProperty(jw, p);
>          jw.endObject();
>      }
>
>  @@ -93,16 +93,7 @@
>                  continue;
>              }
>
>  -            if (!prop.getDefinition().isMultiple()) {
>  -                writeProperty(w, currentRecursionLevel, prop);
>  -            } else {
>  -                w.key(prop.getName());
>  -                w.array();
>  -                for(Value v : prop.getValues()) {
>  -                    dumpValue(w, v);
>  -                }
>  -                w.endArray();
>  -            }
>  +            writeProperty(w, prop);
>          }
>
>          // the child nodes
>  @@ -134,19 +125,38 @@
>      /**
>       * Write a single property
>       */
>  -    protected void writeProperty(JSONWriter w, int indent, Property p)
>  +    protected void writeProperty(JSONWriter w, Property p)
>      throws ValueFormatException, RepositoryException, JSONException {
>  -        if(p.getType() == PropertyType.BINARY) {
>  -            // TODO for now we mark binary properties with an initial star in their name
>  -            // (star is not allowed as a JCR property name)
>  +        // special handling for binaries: we dump the length and not the length
>  +                if (p.getType() == PropertyType.BINARY) {
>  +            // TODO for now we mark binary properties with an initial colon in their name
>  +            // (colon is not allowed as a JCR property name)
>              // in the name, and the value should be the size of the binary data
>  -            w.key("*" + p.getName());
>  +            w.key(":" + p.getName());
>  +            if (!p.getDefinition().isMultiple()) {
>  +                w.value(p.getLength());
>  +            } else {
>  +                final long[] sizes = p.getLengths();
>  +                w.array();
>  +                for(int i=0;i<sizes.length;i++) {
>  +                    w.value(sizes[i]);
>  +                }
>  +                w.endArray();
>  +            }
>  +            return;
>  +        }
>  +        w.key(p.getName());
>
>  +        if (!p.getDefinition().isMultiple()) {
>  +            dumpValue(w, p.getValue());
>          } else {
>              w.key(p.getName());
>  +            w.array();
>  +            for(Value v : p.getValues()) {
>  +                dumpValue(w, v);
>  +            }
>  +            w.endArray();
>          }
>  -
>  -        dumpValue(w, p.getValue());
>      }
>
>      /**
>  @@ -154,7 +164,7 @@
>       * conversions are done:
>       * <table>
>       *   <tr><th>JSR Property Type</th><th>JSON Value Type</th></tr>
>  -     *   <tr><td>BINARY</td><td>size of binary value as long<sup>1</sup></td></tr>
>  +     *   <tr><td>BINARY</td><td>always 0 as long</td></tr>
>       *   <tr><td>DATE</td><td>converted date string as defined by ECMA</td></tr>
>       *   <tr><td>BOOLEAN</td><td>boolean</td></tr>
>       *   <tr><td>LONG</td><td>long</td></tr>
>  @@ -162,7 +172,7 @@
>       *   <tr><td><i>all other</li></td><td>string</td></tr>
>       * </table>
>       * <sup>1</sup> Currently not implemented and uses 0 as default.
>  -     *
>  +     *
>       * @param w json writer
>       * @param v value to dump
>       */
>  @@ -172,18 +182,17 @@
>
>          switch (v.getType()) {
>              case PropertyType.BINARY:
>  -                // TODO return the binary size
>                  w.value(0);
>                  break;
>
>              case PropertyType.DATE:
>                  w.value(format(v.getDate()));
>                  break;
>  -
>  +
>              case PropertyType.BOOLEAN:
>                  w.value(v.getBoolean());
>                  break;
>  -
>  +
>              case PropertyType.LONG:
>                  w.value(v.getLong());
>                  break;
>  @@ -196,7 +205,7 @@
>                  w.value(v.getString());
>          }
>      }
>  -
>  +
>      public static synchronized String format(Calendar date) {
>          if (calendarFormat == null) {
>              calendarFormat = new SimpleDateFormat(
>
>
>