diff options
Diffstat (limited to 'document')
-rw-r--r-- | document/src/main/java/com/yahoo/document/ExtendedField.java | 31 | ||||
-rw-r--r-- | document/src/main/java/com/yahoo/document/ExtendedStringField.java | 47 |
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; + } + +} |