aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
diff options
context:
space:
mode:
authorHaakon Dybdahl <dybdahl@yahoo-inc.com>2017-02-09 10:31:02 +0100
committerHaakon Dybdahl <dybdahl@yahoo-inc.com>2017-02-09 10:31:02 +0100
commit409e2de25332de3ddb452745f9bdafbe7d459d4a (patch)
tree6410b8a722a973c41c5dfc0da0dc1134bb294318 /document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
parent9783178a588f9cef47a8274253a5bed9324a20a8 (diff)
Move more things around.
Diffstat (limited to 'document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java')
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java27
1 files changed, 25 insertions, 2 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java b/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
index 5440300eadf..24ad5f0589a 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
@@ -3,10 +3,13 @@ package com.yahoo.document.json.readers;
import com.fasterxml.jackson.core.JsonToken;
import com.yahoo.document.DataType;
+import com.yahoo.document.DocumentId;
+import com.yahoo.document.PositionDataType;
+import com.yahoo.document.ReferenceDataType;
import com.yahoo.document.datatypes.FieldValue;
-import com.yahoo.document.json.JsonReader;
import com.yahoo.document.json.TokenBuffer;
import com.yahoo.document.update.ValueUpdate;
+import org.apache.commons.codec.binary.Base64;
public class SingleValueReader {
public static final String UPDATE_ASSIGN = "assign";
@@ -17,7 +20,7 @@ public class SingleValueReader {
public static FieldValue readSingleValue(TokenBuffer buffer, JsonToken t, DataType expectedType) {
if (t.isScalarValue()) {
- return JsonReader.readAtomic(buffer, expectedType);
+ return readAtomic(buffer, expectedType);
} else {
return CompositeReader.createComposite(buffer, expectedType);
}
@@ -52,4 +55,24 @@ public class SingleValueReader {
return update;
}
+ public static FieldValue readAtomic(TokenBuffer buffer, DataType expectedType) {
+ if (expectedType.equals(DataType.RAW)) {
+ return expectedType.createFieldValue(new Base64().decode(buffer.currentText()));
+ } else if (expectedType.equals(PositionDataType.INSTANCE)) {
+ return PositionDataType.fromString(buffer.currentText());
+ } else if (expectedType instanceof ReferenceDataType) {
+ return readReferenceFieldValue(buffer, expectedType);
+ } else {
+ return expectedType.createFieldValue(buffer.currentText());
+ }
+ }
+
+ private static FieldValue readReferenceFieldValue(TokenBuffer buffer, DataType expectedType) {
+ final FieldValue value = expectedType.createFieldValue();
+ final String refText = buffer.currentText();
+ if (!refText.isEmpty()) {
+ value.assign(new DocumentId(buffer.currentText()));
+ }
+ return value;
+ }
}