diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2018-05-30 11:49:30 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2018-05-30 12:00:47 +0000 |
commit | da548fe36497db918469d5fd0d958b41629ffbdf (patch) | |
tree | ad4f6d6f618ceaf654d0482a605d1e8aa77a95e2 /container-search/src/main/java/com/yahoo/search/rendering | |
parent | 89c889a357afee2bbd6bbfae097875e6f4da658d (diff) |
move all hasFieldsField handling inside the FieldConsumer
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/rendering')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java index 8375e63984d..55c846ccb5b 100644 --- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java +++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java @@ -463,17 +463,6 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { return ! (hit instanceof DefaultErrorHit); } - private static void fieldsStart(MutableBoolean hasFieldsField, JsonGenerator generator) throws IOException { - if (hasFieldsField.get()) return; - generator.writeObjectFieldStart(FIELDS); - hasFieldsField.set(true); - } - - private void fieldsEnd(MutableBoolean hasFieldsField) throws IOException { - if ( ! hasFieldsField.get()) return; - generator.writeEndObject(); - } - private void renderHitContents(Hit hit) throws IOException { String id = hit.getDisplayId(); if (id != null) @@ -499,14 +488,13 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { } private void renderAllFields(Hit hit) throws IOException { - MutableBoolean hasFieldsField = new MutableBoolean(false); - renderTotalHitCount(hit, hasFieldsField); - renderStandardFields(hit, hasFieldsField); - fieldsEnd(hasFieldsField); + fieldConsumer.startHitFields(); + renderTotalHitCount(hit); + renderStandardFields(hit); + fieldConsumer.endHitFields(); } - private void renderStandardFields(Hit hit, MutableBoolean hasFieldsField) { - fieldConsumer.setCurrent(hasFieldsField); + private void renderStandardFields(Hit hit) { hit.forEachFieldAsRaw(fieldConsumer); } @@ -572,11 +560,13 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getTo()) : id.getTo()).toString(); } - private void renderTotalHitCount(Hit hit, MutableBoolean hasFieldsField) throws IOException { + private void renderTotalHitCount(Hit hit) throws IOException { if ( ! (getRecursionLevel() == 1 && hit instanceof HitGroup)) return; - fieldsStart(hasFieldsField, generator); + fieldConsumer.ensureFieldsField(); generator.writeNumberField(TOTAL_COUNT, getResult().getTotalHitCount()); + // alternative for the above two lines: + // fieldConsumer.accept(TOTAL_COUNT, getResult().getTotalHitCount()); } @Override @@ -685,18 +675,32 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { } /** - * Called before each use of this for a hit to keep track of whether we + * Call before using this for a hit to track whether we * have created the "fields" field of the JSON object */ - void setCurrent(MutableBoolean hasFieldsField) { - this.hasFieldsField = hasFieldsField; + void startHitFields() { + this.hasFieldsField = new MutableBoolean(false); + } + + /** Call before rendering a field to the generator */ + void ensureFieldsField() throws IOException { + if (hasFieldsField.get()) return; + generator.writeObjectFieldStart(FIELDS); + hasFieldsField.set(true); + } + + /** Call after all fields in a hit to close the "fields" field of the JSON object */ + void endHitFields() throws IOException { + if ( ! hasFieldsField.get()) return; + generator.writeEndObject(); + this.hasFieldsField = null; } @Override public void accept(String name, Object value) { try { if (shouldRender(name, value)) { - fieldsStart(hasFieldsField, generator); + ensureFieldsField(); generator.writeFieldName(name); renderFieldContents(value); } @@ -710,7 +714,7 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { public void accept(String name, byte[] utf8Data, int offset, int length) { try { if (shouldRenderUtf8Value(name, length)) { - fieldsStart(hasFieldsField, generator); + ensureFieldsField(); generator.writeFieldName(name); generator.writeUTF8String(utf8Data, offset, length); } |