You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/06/14 14:10:11 UTC
svn commit: r1350206 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
main/java/org/apache/jackrabbit/oak/util/JsonBuilder.java
test/java/org/apache/jackrabbit/oak/util/JsonBuilderTest.java
Author: mduerig
Date: Thu Jun 14 12:10:11 2012
New Revision: 1350206
URL: http://svn.apache.org/viewvc?rev=1350206&view=rev
Log:
OAK-139: Remove JsonBuilder
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/JsonBuilder.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/JsonBuilderTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java?rev=1350206&r1=1350205&r2=1350206&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/CoreValueMapper.java Thu Jun 14 12:10:11 2012
@@ -16,17 +16,17 @@
*/
package org.apache.jackrabbit.oak.kernel;
-import org.apache.jackrabbit.oak.util.JsonBuilder;
-import org.apache.jackrabbit.mk.json.JsopReader;
-import org.apache.jackrabbit.oak.api.CoreValue;
-import org.apache.jackrabbit.oak.api.CoreValueFactory;
-
-import javax.jcr.PropertyType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.jcr.PropertyType;
+
+import org.apache.jackrabbit.mk.json.JsopReader;
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
+
/**
* CoreValueUtil provides methods to convert {@code CoreValue}s to the JSON
* representation passed to MicroKernel and vice versa.
@@ -57,25 +57,22 @@ public class CoreValueMapper {
*
* @param value The core value to be converted.
* @return The encoded JSON string.
- * @see JsonBuilder#encode(String)
- * @see JsonBuilder#encode(long)
- * @see JsonBuilder#encode(long)
*/
public static String toJsonValue(CoreValue value) {
String jsonString;
switch (value.getType()) {
case PropertyType.BOOLEAN:
- jsonString = JsonBuilder.encode(value.getBoolean());
+ jsonString = Boolean.toString(value.getBoolean());
break;
case PropertyType.LONG:
- jsonString = JsonBuilder.encode(value.getLong());
+ jsonString = Long.toString(value.getLong());
break;
case PropertyType.STRING:
String str = value.getString();
if (startsWithHint(str)) {
jsonString = buildJsonStringWithHint(value);
} else {
- jsonString = JsonBuilder.encode(value.getString());
+ jsonString = jsonEncode(value.getString());
}
break;
default:
@@ -171,7 +168,7 @@ public class CoreValueMapper {
sb.append(TYPE2HINT.get(value.getType()));
sb.append(':');
sb.append(value.getString());
- return JsonBuilder.encode(sb.toString());
+ return jsonEncode(sb.toString());
}
/**
@@ -187,4 +184,59 @@ public class CoreValueMapper {
return jsonString.length() >= 4 && jsonString.charAt(3) == ':';
}
+ /**
+ * Escape quotes, \, /, \r, \n, \b, \f, \t and other control characters
+ * (U+0000 through U+001F) and surround with double quotes.
+ */
+ private static String jsonEncode(String value) {
+ if (value == null) {
+ return null;
+ }
+
+ StringBuilder sb = new StringBuilder("\"");
+ for (int i = 0; i < value.length(); i++) {
+ char ch = value.charAt(i);
+ switch (ch) {
+ case '"':
+ sb.append("\\\"");
+ break;
+ case '\\':
+ sb.append("\\\\");
+ break;
+ case '\b':
+ sb.append("\\b");
+ break;
+ case '\f':
+ sb.append("\\f");
+ break;
+ case '\n':
+ sb.append("\\n");
+ break;
+ case '\r':
+ sb.append("\\r");
+ break;
+ case '\t':
+ sb.append("\\t");
+ break;
+ default:
+ //Reference: http://www.unicode.org/versions/Unicode5.1.0/
+ if (ch >= '\u0000' && ch <= '\u001F' ||
+ ch >= '\u007F' && ch <= '\u009F' ||
+ ch >= '\u2000' && ch <= '\u20FF') {
+
+ String ss = Integer.toHexString(ch);
+ sb.append("\\u");
+ for (int k = 0; k < 4 - ss.length(); k++) {
+ sb.append('0');
+ }
+ sb.append(ss.toUpperCase());
+ } else {
+ sb.append(ch);
+ }
+ }
+ }
+
+ return sb.append('"').toString();
+ }
+
}
\ No newline at end of file