summaryrefslogtreecommitdiffstats
path: root/document/src/main
diff options
context:
space:
mode:
authorfreva <valerijf@yahoo-inc.com>2017-02-10 12:14:24 +0100
committerfreva <valerijf@yahoo-inc.com>2017-02-10 12:14:24 +0100
commit61bfebfd4fff9c8c0fbdaa11cee30604b0ff5241 (patch)
treecd2de22b00a5d8b68580075995a2b7ec5fcd51e1 /document/src/main
parent47b2a2968895b3cfd32d6c709503fd8b705da017 (diff)
CompositeReader can now resolve primitive fields as well
Diffstat (limited to 'document/src/main')
-rw-r--r--document/src/main/java/com/yahoo/document/json/document/DocumentParser.java23
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java9
2 files changed, 18 insertions, 14 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java b/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
index a9fad40912b..f046eff4360 100644
--- a/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
+++ b/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
@@ -36,9 +36,7 @@ public class DocumentParser {
public Optional<DocumentParseInfo> parse(Optional<DocumentId> documentIdArg) throws IOException {
indentLevel = 0;
DocumentParseInfo documentParseInfo = new DocumentParseInfo();
- if (documentIdArg.isPresent()) {
- documentParseInfo.documentId = documentIdArg.get();
- }
+ documentIdArg.ifPresent(documentId -> documentParseInfo.documentId = documentId);
do {
parseOneItem(documentParseInfo, documentIdArg.isPresent() /* doc id set externally */);
} while (indentLevel > 0L);
@@ -57,8 +55,8 @@ public class DocumentParser {
}
if (indentLevel == 1L) {
handleIdentLevelOne(documentParseInfo, docIdAndOperationIsSetExternally);
- } else if (indentLevel == 2L) {
- handleIdentLevelTwo(documentParseInfo);
+ } else if (indentLevel > 1L) {
+ handleIdentLevelOnePlus(documentParseInfo);
}
}
@@ -75,10 +73,10 @@ public class DocumentParser {
indentLevel--;
return;
case START_ARRAY:
- indentLevel+=10000L;
+ indentLevel += 10000L;
break;
case END_ARRAY:
- indentLevel-=10000L;
+ indentLevel -= 10000L;
break;
}
}
@@ -111,13 +109,18 @@ public class DocumentParser {
}
}
- private void handleIdentLevelTwo(DocumentParseInfo documentParseInfo) {
+ private void handleIdentLevelOnePlus(DocumentParseInfo documentParseInfo) {
try {
JsonToken currentToken = parser.getCurrentToken();
- // "Fields" opens a dictionary and is therefore on level two which might be surprising.
- if (currentToken == JsonToken.START_OBJECT && FIELDS.equals(parser.getCurrentName())) {
+ // "fields" opens a dictionary and is therefore on level two which might be surprising.
+ if (indentLevel == 2 && currentToken == JsonToken.START_OBJECT && FIELDS.equals(parser.getCurrentName())) {
documentParseInfo.fieldsBuffer.bufferObject(currentToken, parser);
processIndent();
+
+ // "fieldpaths" opens an array and is therefore on level 10001 which might be surprising
+ } else if (indentLevel == 10001 && currentToken == JsonToken.START_ARRAY && FIELDPATHS.equals(parser.getCurrentName())) {
+ documentParseInfo.fieldpathsBuffer.bufferArray(currentToken, parser);
+ processIndent();
}
} catch (IOException e) {
throw new RuntimeException("Got IO exception while parsing document", e);
diff --git a/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java b/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
index b9f4d1d4613..712ab81899b 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
@@ -22,7 +22,11 @@ public class CompositeReader {
@SuppressWarnings({ "cast", "rawtypes" })
public static FieldValue createComposite(TokenBuffer buffer, DataType expectedType) {
FieldValue fieldValue = expectedType.createFieldValue();
- populateComposite(buffer, fieldValue);
+ if (buffer.currentToken().isStructStart()) {
+ populateComposite(buffer, fieldValue);
+ } else {
+ fieldValue.assign(buffer.currentText());
+ }
return fieldValue;
}
@@ -54,7 +58,4 @@ public class CompositeReader {
}
expectCompositeEnd(buffer.currentToken());
}
-
-
-
}