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(
>
>
>