summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/ExtendedField.java31
-rw-r--r--document/src/main/java/com/yahoo/document/ExtendedStringField.java47
2 files changed, 78 insertions, 0 deletions
diff --git a/document/src/main/java/com/yahoo/document/ExtendedField.java b/document/src/main/java/com/yahoo/document/ExtendedField.java
new file mode 100644
index 00000000000..55087d16974
--- /dev/null
+++ b/document/src/main/java/com/yahoo/document/ExtendedField.java
@@ -0,0 +1,31 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document;
+
+import com.yahoo.document.datatypes.FieldValue;
+import com.yahoo.document.datatypes.StructuredFieldValue;
+
+/**
+ * This adds an Extractor to the Field that can be used to get access the backed value
+ * used in the concrete document types.
+ * @author baldersheim
+ */
+public class ExtendedField extends Field {
+ public static interface Extract {
+ Object get(StructuredFieldValue doc);
+ void set(StructuredFieldValue doc, Object value);
+ }
+ private final Extract extract;
+ public ExtendedField(String name, DataType type, Extract extract) {
+ super(name, type);
+ this.extract = extract;
+ }
+ public FieldValue getFieldValue(StructuredFieldValue doc) {
+ Object raw = extract.get(doc);
+ return raw == null ? null : getDataType().createFieldValue(raw);
+ }
+ public FieldValue setFieldValue(StructuredFieldValue doc, FieldValue fv) {
+ FieldValue old = getFieldValue(doc);
+ extract.set(doc, (fv == null) ? null : fv.getWrappedValue());
+ return old;
+ }
+}
diff --git a/document/src/main/java/com/yahoo/document/ExtendedStringField.java b/document/src/main/java/com/yahoo/document/ExtendedStringField.java
new file mode 100644
index 00000000000..4fb052b9b56
--- /dev/null
+++ b/document/src/main/java/com/yahoo/document/ExtendedStringField.java
@@ -0,0 +1,47 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document;
+
+import com.yahoo.document.annotation.SpanTree;
+import com.yahoo.document.datatypes.FieldValue;
+import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.document.datatypes.StructuredFieldValue;
+import java.util.Map;
+
+/**
+ * This adds an Extractor to the ExtendedField that can be used to get access the backed spantrees
+ * used in the concrete document types.
+ * @author baldersheim
+ */
+public class ExtendedStringField extends ExtendedField {
+ public static interface ExtractSpanTrees {
+ Map<String, SpanTree> get(StructuredFieldValue doc);
+ void set(StructuredFieldValue doc, Map<String, SpanTree> trees);
+ }
+ private final ExtractSpanTrees extractSpanTrees;
+ public ExtendedStringField(String name, DataType type, Extract extract, ExtractSpanTrees extractSpanTrees) {
+ super(name, type, extract);
+ this.extractSpanTrees = extractSpanTrees;
+ }
+
+ @Override
+ public FieldValue getFieldValue(StructuredFieldValue doc) {
+ StringFieldValue sfv = (StringFieldValue) super.getFieldValue(doc);
+ Map<String, SpanTree> trees = extractSpanTrees.get(doc);
+ if (trees != null) {
+ for (SpanTree tree : trees.values()) {
+ sfv.setSpanTree(tree);
+ }
+ }
+ return sfv;
+ }
+
+ @Override
+ public FieldValue setFieldValue(StructuredFieldValue doc, FieldValue fv) {
+ FieldValue old = getFieldValue(doc);
+ StringFieldValue sfv = (StringFieldValue) fv;
+ super.setFieldValue(doc, sfv);
+ extractSpanTrees.set(doc, (sfv == null) ? null : sfv.getSpanTreeMap());
+ return old;
+ }
+
+}