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 re...@apache.org on 2015/01/16 18:18:44 UTC
svn commit: r1652462 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java
Author: reschke
Date: Fri Jan 16 17:18:44 2015
New Revision: 1652462
URL: http://svn.apache.org/r1652462
Log:
OAK-2376 - cleanup
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java?rev=1652462&r1=1652461&r2=1652462&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializer.java Fri Jan 16 17:18:44 2015
@@ -197,16 +197,8 @@ public class RDBDocumentSerializer {
String s = fromBlobData(bdata);
json = new JsopTokenizer(s);
json.read('{');
- if (!json.matches('}')) {
- do {
- String key = json.readString();
- json.read(':');
- Object value = fromJson(json);
- doc.put(key, value);
- } while (json.matches(','));
- json.read('}');
- json.read(JsopReader.END);
- }
+ readDocumentFromJson(json, doc);
+ json.read(JsopReader.END);
blobInUse = true;
}
} catch (Exception ex) {
@@ -223,15 +215,7 @@ public class RDBDocumentSerializer {
if (blobInUse) {
throw new DocumentStoreException("expected literal \"blob\" but found: " + row.getData());
}
- if (!json.matches('}')) {
- do {
- String key = json.readString();
- json.read(':');
- Object value = fromJson(json);
- doc.put(key, value);
- } while (json.matches(','));
- json.read('}');
- }
+ readDocumentFromJson(json, doc);
} else if (next == JsopReader.STRING) {
if (!blobInUse) {
throw new DocumentStoreException("did not expect \"blob\" here: " + row.getData());
@@ -246,16 +230,17 @@ public class RDBDocumentSerializer {
next = json.read();
if (next == ',') {
do {
- Object ob = fromJson(json);
- List update = (List) ob;
- for (int o = 0; o < update.size(); o++) {
- List op = (List) update.get(o);
+ Object ob = readValueFromJson(json);
+ if (!(ob instanceof List)) {
+ throw new DocumentStoreException("expected array but got: " + ob);
+ }
+ List<List<Object>> update = (List<List<Object>>) ob;
+ for (List<Object> op : update) {
applyUpdate(doc, update, op);
}
} while (json.matches(','));
}
-
json.read(JsopReader.END);
return doc;
@@ -264,7 +249,7 @@ public class RDBDocumentSerializer {
}
}
- private <T extends Document> void applyUpdate(T doc, List update, List op) {
+ private <T extends Document> void applyUpdate(T doc, List updateString, List<Object> op) {
String opcode = op.get(0).toString();
String key = op.get(1).toString();
Revision rev = null;
@@ -291,7 +276,7 @@ public class RDBDocumentSerializer {
}
} else if ("*".equals(opcode)) {
if (rev == null) {
- throw new DocumentStoreException("unexpected operation " + op + " in: " + update);
+ throw new DocumentStoreException("unexpected operation " + op + " in: " + updateString);
} else {
@SuppressWarnings("unchecked")
Map<Revision, Object> m = (Map<Revision, Object>) old;
@@ -307,7 +292,7 @@ public class RDBDocumentSerializer {
}
doc.put(key, ((Long) old) + x);
} else {
- throw new DocumentStoreException("unexpected operation " + op + " in: " + update);
+ throw new DocumentStoreException("unexpected operation " + op + " in: " + updateString);
}
} else if ("M".equals(opcode)) {
if (rev == null) {
@@ -316,15 +301,30 @@ public class RDBDocumentSerializer {
doc.put(key, value);
}
} else {
- throw new DocumentStoreException("unexpected operation " + op + " in: " + update);
+ throw new DocumentStoreException("unexpected operation " + op + " in: " + updateString);
}
} else {
- throw new DocumentStoreException("unexpected operation " + op + " in: " + update);
+ throw new DocumentStoreException("unexpected operation " + op + " in: " + updateString);
+ }
+ }
+
+ /**
+ * Reads from an opened JSON stream ("{" already consumed) into a document.
+ */
+ private static <T extends Document> void readDocumentFromJson(@Nonnull JsopTokenizer json, @Nonnull T doc) {
+ if (!json.matches('}')) {
+ do {
+ String key = json.readString();
+ json.read(':');
+ Object value = readValueFromJson(json);
+ doc.put(key, value);
+ } while (json.matches(','));
+ json.read('}');
}
}
@Nonnull
- private static Object fromJson(@Nonnull JsopTokenizer json) {
+ private static Object readValueFromJson(@Nonnull JsopTokenizer json) {
switch (json.read()) {
case JsopReader.NULL:
return null;
@@ -344,7 +344,7 @@ public class RDBDocumentSerializer {
}
String k = json.readString();
json.read(':');
- map.put(Revision.fromString(k), fromJson(json));
+ map.put(Revision.fromString(k), readValueFromJson(json));
json.matches(',');
}
return map;
@@ -354,7 +354,7 @@ public class RDBDocumentSerializer {
if (json.matches(']')) {
break;
}
- list.add(fromJson(json));
+ list.add(readValueFromJson(json));
json.matches(',');
}
return list;
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java?rev=1652462&r1=1652461&r2=1652462&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentSerializerTest.java Fri Jan 16 17:18:44 2015
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
public class RDBDocumentSerializerTest {