aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/document
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2017-01-23 11:14:22 +0100
committerTor Brede Vekterli <vekterli@yahoo-inc.com>2017-01-23 11:18:58 +0100
commit221524523637b8ae4b2798c43da3284265389106 (patch)
tree0de8acc94edcc5753a11415e779aa953bdf5f4fa /document/src/main/java/com/yahoo/document
parent12c42638b7374bfd2f6ce379bf9b8f3986cfe2a2 (diff)
Add JSON serialization of non-empty reference fields
Diffstat (limited to 'document/src/main/java/com/yahoo/document')
-rw-r--r--document/src/main/java/com/yahoo/document/ReferenceDataType.java19
-rw-r--r--document/src/main/java/com/yahoo/document/json/DocumentUpdateJsonSerializer.java2
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonReader.java8
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java10
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonWriter.java4
5 files changed, 37 insertions, 6 deletions
diff --git a/document/src/main/java/com/yahoo/document/ReferenceDataType.java b/document/src/main/java/com/yahoo/document/ReferenceDataType.java
index 0c8d8fcc2d8..89249c4a8e4 100644
--- a/document/src/main/java/com/yahoo/document/ReferenceDataType.java
+++ b/document/src/main/java/com/yahoo/document/ReferenceDataType.java
@@ -9,11 +9,26 @@ public class ReferenceDataType extends DataType {
private final DocumentType targetType;
public ReferenceDataType(DocumentType targetType, int id) {
- super("Reference<" + targetType.getName() + ">", id);
+ super(buildTypeName(targetType), id);
this.targetType = targetType;
}
- public DataType getTargetType() { return targetType; }
+ private ReferenceDataType(DocumentType targetType) {
+ super(buildTypeName(targetType), 0);
+ setId(getName().hashCode());
+ this.targetType = targetType;
+ }
+
+ private static String buildTypeName(DocumentType targetType) {
+ return "Reference<" + targetType.getName() + ">";
+ }
+
+ // Creates a new type where the numeric ID is based no the hash of targetType
+ public static ReferenceDataType createWithInferredId(DocumentType targetType) {
+ return new ReferenceDataType(targetType);
+ }
+
+ public DocumentType getTargetType() { return targetType; }
@Override
public ReferenceFieldValue createFieldValue() {
diff --git a/document/src/main/java/com/yahoo/document/json/DocumentUpdateJsonSerializer.java b/document/src/main/java/com/yahoo/document/json/DocumentUpdateJsonSerializer.java
index af156f9dea0..a6aeb5c3bb5 100644
--- a/document/src/main/java/com/yahoo/document/json/DocumentUpdateJsonSerializer.java
+++ b/document/src/main/java/com/yahoo/document/json/DocumentUpdateJsonSerializer.java
@@ -273,7 +273,7 @@ public class DocumentUpdateJsonSerializer
@Override
public void write(FieldBase field, ReferenceFieldValue value) {
- // TODO!
+ serializeReferenceField(generator, field, value);
}
@Override
diff --git a/document/src/main/java/com/yahoo/document/json/JsonReader.java b/document/src/main/java/com/yahoo/document/json/JsonReader.java
index e0740338aae..2315adc5f0f 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonReader.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonReader.java
@@ -21,6 +21,7 @@ import com.yahoo.document.DocumentUpdate;
import com.yahoo.document.Field;
import com.yahoo.document.MapDataType;
import com.yahoo.document.PositionDataType;
+import com.yahoo.document.ReferenceDataType;
import com.yahoo.document.TestAndSetCondition;
import com.yahoo.document.WeightedSetDataType;
import com.yahoo.document.datatypes.CollectionFieldValue;
@@ -49,7 +50,7 @@ import java.util.Optional;
* Initialize Vespa documents/updates/removes from an InputStream containing a
* valid JSON representation of a feed.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
* @since 5.1.25
*/
@Beta
@@ -646,6 +647,11 @@ public class JsonReader {
return expectedType.createFieldValue(new Base64().decode(buffer.currentText()));
} else if (expectedType.equals(PositionDataType.INSTANCE)) {
return PositionDataType.fromString(buffer.currentText());
+ } else if (expectedType instanceof ReferenceDataType) {
+ // TODO wrappu wrappu
+ FieldValue value = expectedType.createFieldValue();
+ value.assign(new DocumentId(buffer.currentText()));
+ return value;
} else {
return expectedType.createFieldValue(buffer.currentText());
}
diff --git a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
index 8c6ee898c0e..dcd49479767 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonSerializationHelper.java
@@ -14,6 +14,7 @@ import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.MapFieldValue;
import com.yahoo.document.datatypes.PredicateFieldValue;
import com.yahoo.document.datatypes.Raw;
+import com.yahoo.document.datatypes.ReferenceFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.StructuredFieldValue;
@@ -104,6 +105,15 @@ public class JsonSerializationHelper {
generator.writeEndObject();
}
+ public static void serializeReferenceField(JsonGenerator generator, FieldBase field, ReferenceFieldValue value) {
+ wrapIOException(() -> {
+ fieldNameIfNotNull(generator, field);
+ // TODO need testing of empty reference!
+ if (value.getDocumentId().isPresent()) {
+ generator.writeString(value.getDocumentId().get().toString());
+ }
+ });
+ }
public static void serializeStringField(JsonGenerator generator, FieldBase field, StringFieldValue value) {
// Hide empty strings
diff --git a/document/src/main/java/com/yahoo/document/json/JsonWriter.java b/document/src/main/java/com/yahoo/document/json/JsonWriter.java
index 734b16253fb..6ad526a2aaa 100644
--- a/document/src/main/java/com/yahoo/document/json/JsonWriter.java
+++ b/document/src/main/java/com/yahoo/document/json/JsonWriter.java
@@ -42,7 +42,7 @@ import static com.yahoo.document.json.JsonSerializationHelper.*;
/**
* Serialize Document and other FieldValue instances as JSON.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class JsonWriter implements DocumentWriter {
@@ -184,7 +184,7 @@ public class JsonWriter implements DocumentWriter {
@Override
public void write(FieldBase field, ReferenceFieldValue value) {
- // TODO!
+ serializeReferenceField(generator, field, value);
}
@Override