diff options
author | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2017-02-09 10:31:02 +0100 |
---|---|---|
committer | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2017-02-09 10:31:02 +0100 |
commit | 409e2de25332de3ddb452745f9bdafbe7d459d4a (patch) | |
tree | 6410b8a722a973c41c5dfc0da0dc1134bb294318 /document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java | |
parent | 9783178a588f9cef47a8274253a5bed9324a20a8 (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.java | 27 |
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; + } } |