summaryrefslogtreecommitdiffstats
path: root/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java')
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java27
1 files changed, 23 insertions, 4 deletions
diff --git a/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java b/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
index 8f771418959..d31573c76a4 100644
--- a/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
+++ b/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
@@ -1,15 +1,15 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.docproc;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import com.yahoo.document.Document;
import com.yahoo.document.DocumentId;
+import com.yahoo.document.Field;
import com.yahoo.document.annotation.Annotation;
+import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.StructuredFieldValue;
-import com.yahoo.yolean.Exceptions;
+
/**
* Subtyped by factory classes for concrete document types. The factory classes are auto-generated
@@ -28,5 +28,24 @@ public abstract class AbstractConcreteDocumentFactory extends com.yahoo.componen
*
* @return A concrete document instance
*/
- public abstract com.yahoo.document.Document getDocumentCopy(java.lang.String type, com.yahoo.document.datatypes.StructuredFieldValue src, com.yahoo.document.DocumentId id);
+ public abstract Document getDocumentCopy(java.lang.String type, StructuredFieldValue src, DocumentId id);
+
+ /**
+ * If the FieldValue is a StructuredFieldValue it will upgrade to the concrete type
+ * @param field
+ * @param fv
+ * @return fv or upgraded fv
+ */
+ public FieldValue optionallyUpgrade(Field field, FieldValue fv) {
+ if (fv instanceof StructuredFieldValue) {
+ try {
+ return structTypes().get(field.getDataType().getName())
+ .getConstructor(StructuredFieldValue.class)
+ .newInstance(fv);
+ } catch (java.lang.Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ return fv;
+ }
}