summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java41
-rw-r--r--vespajlib/src/main/java/com/yahoo/lang/MutableBoolean.java24
-rw-r--r--vespajlib/src/main/java/com/yahoo/lang/MutableInteger.java3
-rw-r--r--vespajlib/src/main/java/com/yahoo/lang/MutableLong.java3
4 files changed, 48 insertions, 23 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 34b02b1bee8..0729470ae1a 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
@@ -14,6 +14,7 @@ import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.datatypes.TensorFieldValue;
import com.yahoo.document.json.JsonWriter;
+import com.yahoo.lang.MutableBoolean;
import com.yahoo.prelude.fastsearch.FastHit;
import com.yahoo.processing.Response;
import com.yahoo.processing.execution.Execution.Trace;
@@ -472,14 +473,14 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
return ! (hit instanceof DefaultErrorHit);
}
- private boolean fieldsStart(boolean hasFieldsField) throws IOException {
- if (hasFieldsField) return true;
+ private void fieldsStart(MutableBoolean hasFieldsField) throws IOException {
+ if (hasFieldsField.get()) return;
generator.writeObjectFieldStart(FIELDS);
- return true;
+ hasFieldsField.set(true);
}
- private void fieldsEnd(boolean hasFieldsField) throws IOException {
- if (!hasFieldsField) return;
+ private void fieldsEnd(MutableBoolean hasFieldsField) throws IOException {
+ if ( ! hasFieldsField.get()) return;
generator.writeEndObject();
}
@@ -508,24 +509,19 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
private void renderAllFields(Hit hit) throws IOException {
- boolean hasFieldsField = false;
-
- hasFieldsField |= renderTotalHitCount(hit, hasFieldsField);
- hasFieldsField |= renderStandardFields(hit, hasFieldsField);
+ MutableBoolean hasFieldsField = new MutableBoolean(false);
+ renderTotalHitCount(hit, hasFieldsField);
+ renderStandardFields(hit, hasFieldsField);
fieldsEnd(hasFieldsField);
}
- private boolean renderStandardFields(Hit hit, boolean initialHasFieldsField) throws IOException {
- boolean hasFieldsField = initialHasFieldsField;
+ private void renderStandardFields(Hit hit, MutableBoolean hasFieldsField) throws IOException {
for (String fieldName : hit.fieldKeys()) {
- if (!shouldRender(fieldName, hit)) continue;
+ if ( ! shouldRender(fieldName, hit)) continue;
- // We can't look at the size of fieldKeys() and know whether we need
- // the fields object, as all fields may be hidden.
- hasFieldsField |= fieldsStart(hasFieldsField);
- renderField(fieldName, hit);
+ fieldsStart(hasFieldsField);
+ renderField(fieldName, hit.getField(fieldName));
}
- return hasFieldsField;
}
private boolean shouldRender(String fieldName, Hit hit) {
@@ -607,17 +603,16 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getTo()) : id.getTo()).toString();
}
- private boolean renderTotalHitCount(Hit hit, boolean hasFieldsField) throws IOException {
- if ( ! (getRecursionLevel() == 1 && hit instanceof HitGroup)) return false;
+ private void renderTotalHitCount(Hit hit, MutableBoolean hasFieldsField) throws IOException {
+ if ( ! (getRecursionLevel() == 1 && hit instanceof HitGroup)) return;
fieldsStart(hasFieldsField);
generator.writeNumberField(TOTAL_COUNT, getResult().getTotalHitCount());
- return true;
}
- private void renderField(String fieldName, Hit hit) throws IOException {
- generator.writeFieldName(fieldName);
- renderFieldContents(hit.getField(fieldName));
+ private void renderField(String name, Object value) throws IOException {
+ generator.writeFieldName(name);
+ renderFieldContents(value);
}
private void renderFieldContents(Object field) throws IOException {
diff --git a/vespajlib/src/main/java/com/yahoo/lang/MutableBoolean.java b/vespajlib/src/main/java/com/yahoo/lang/MutableBoolean.java
new file mode 100644
index 00000000000..b009ffdd2b6
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/lang/MutableBoolean.java
@@ -0,0 +1,24 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.lang;
+
+/**
+ * A mutable boolean
+ *
+ * @author bratseth
+ */
+public class MutableBoolean {
+
+ private boolean value;
+
+ public MutableBoolean(boolean value) {
+ this.value = value;
+ }
+
+ public boolean get() { return value; }
+
+ public void set(boolean value) { this.value = value; }
+
+ @Override
+ public String toString() { return Boolean.toString(value); }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/lang/MutableInteger.java b/vespajlib/src/main/java/com/yahoo/lang/MutableInteger.java
index 34e928db674..a988a3f6fa2 100644
--- a/vespajlib/src/main/java/com/yahoo/lang/MutableInteger.java
+++ b/vespajlib/src/main/java/com/yahoo/lang/MutableInteger.java
@@ -30,4 +30,7 @@ public class MutableInteger {
return value;
}
+ @Override
+ public String toString() { return Integer.toString(value); }
+
}
diff --git a/vespajlib/src/main/java/com/yahoo/lang/MutableLong.java b/vespajlib/src/main/java/com/yahoo/lang/MutableLong.java
index e0e4a0828a9..36d3a8a6343 100644
--- a/vespajlib/src/main/java/com/yahoo/lang/MutableLong.java
+++ b/vespajlib/src/main/java/com/yahoo/lang/MutableLong.java
@@ -30,4 +30,7 @@ public class MutableLong {
return value;
}
+ @Override
+ public String toString() { return Long.toString(value); }
+
}