summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-03-18 10:52:50 +0000
committerArne H Juul <arnej@yahooinc.com>2022-03-18 12:04:26 +0000
commitd10b2f1d0359e814e1f972c49f15272044c327b1 (patch)
tree23a9a8bc227c679df0223c056942410c2fad9599
parent7a936b42393e65c0c5886b9747018ebab839c887 (diff)
slight NewDocumentReferenceDataType cleanup
* avoid using getTargetType() when possible, as it might be just a placeholder * add toString() suitable for debugging
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/NewDocumentReferenceDataType.java42
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentReferenceResolver.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java3
6 files changed, 22 insertions, 34 deletions
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentReferenceDataType.java b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentReferenceDataType.java
index 7652000389b..994e969eeb0 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentReferenceDataType.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentReferenceDataType.java
@@ -18,18 +18,20 @@ import com.yahoo.document.datatypes.ReferenceFieldValue;
@SuppressWarnings("deprecation")
public final class NewDocumentReferenceDataType extends DataType {
- private StructuredDataType target;
- private DocumentType docTypeTarget = null;
+ private final StructuredDataType target;
+ private final DocumentType docTypeTarget;
private ReferenceDataType delegate = null;
private final boolean temporary;
private NewDocumentReferenceDataType(NewDocumentType.Name nameAndId,
StructuredDataType target,
+ DocumentType docTypeTarget,
boolean temporary)
{
super(nameAndId.getName(), nameAndId.getId());
this.target = target;
+ this.docTypeTarget = docTypeTarget;
this.temporary = temporary;
}
@@ -39,47 +41,27 @@ public final class NewDocumentReferenceDataType extends DataType {
}
public static NewDocumentReferenceDataType forDocumentName(String documentName) {
- return new NewDocumentReferenceDataType(buildTypeName(documentName),
- TemporaryStructuredDataType.create(documentName),
- true);
+ return new NewDocumentReferenceDataType(new DocumentType(documentName));
}
public NewDocumentReferenceDataType(DocumentType document) {
- this(buildTypeName(document.getName()), document, true);
- this.docTypeTarget = document;
+ this(buildTypeName(document.getName()), document, document, true);
}
public NewDocumentReferenceDataType(NewDocumentType document) {
- this(buildTypeName(document.getName()), document, false);
+ this(buildTypeName(document.getName()), document, new DocumentType(document.getName()), false);
}
public boolean isTemporary() { return temporary; }
public StructuredDataType getTargetType() { return target; }
-
- public void setTargetType(StructuredDataType type) {
- assert(target.getName().equals(type.getName()));
- if (temporary) {
- this.target = type;
- if ((docTypeTarget == null) && (type instanceof DocumentType)) {
- this.docTypeTarget = (DocumentType) type;
- }
- } else {
- throw new IllegalStateException
- (String.format("Unexpected attempt to replace already concrete target " +
- "type in NewDocumentReferenceDataType instance (type is '%s')", target.getName()));
- }
- }
+ public String getTargetTypeName() { return target.getName(); }
+ public int getTargetTypeId() { return target.getId(); }
@Override
public FieldValue createFieldValue() {
// TODO why do we even need this
if (delegate == null) {
- if (docTypeTarget == null) {
- var tmptmp = TemporaryStructuredDataType.create(target.getName());
- var tmp = ReferenceDataType.createWithInferredId(tmptmp);
- return tmp.createFieldValue();
- }
delegate = ReferenceDataType.createWithInferredId(docTypeTarget);
}
return delegate.createFieldValue();
@@ -109,4 +91,10 @@ public final class NewDocumentReferenceDataType extends DataType {
}
return false;
}
+
+ @Override
+ public String toString() {
+ return "{NDRTDT " + getName() + " id=" + getId() + " target=" + target + " [" + target.getClass().getSimpleName() + "]}";
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
index 16f60e40809..fb161cb8292 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentModelBuilder.java
@@ -306,8 +306,7 @@ public class DocumentModelBuilder {
}
else if (type instanceof NewDocumentReferenceDataType) {
var t = (NewDocumentReferenceDataType) type;
- var tt = t.getTargetType();
- var doc = getDocumentType(docs, tt.getId());
+ var doc = getDocumentType(docs, t.getTargetTypeId());
type = doc.getReferenceDataType();
}
if (type != original) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentReferenceResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentReferenceResolver.java
index 446187eed00..2e8362f1839 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentReferenceResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentReferenceResolver.java
@@ -16,7 +16,7 @@ import static java.util.stream.Collectors.toMap;
/**
* Resolves all document references in the search definitions
*
- * Iterates through all document fields having a {@link NewDocumentReferenceDataType} and uses {@link NewDocumentReferenceDataType#getTargetType()}
+ * Iterates through all document fields having a {@link NewDocumentReferenceDataType} and uses {@link NewDocumentReferenceDataType#getTargetTypeName()}
* to determine the referenced document. This information is aggregated into a {@link DocumentReferences} object.
*
* @author bjorncs
@@ -88,7 +88,7 @@ public class DocumentReferenceResolver {
}
private static String getTargetDocumentName(NewDocumentReferenceDataType reference) {
- return reference.getTargetType().getName();
+ return reference.getTargetTypeName();
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
index 43b32ed391e..ff311795089 100644
--- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
+++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
@@ -178,7 +178,7 @@ public class DocumentManager {
if (refType.isTemporary()) {
throw new IllegalArgumentException("Still temporary: " + refType);
}
- builder.referencetype(new Datatype.Referencetype.Builder().target_type_id(refType.getTargetType().getId()));
+ builder.referencetype(new Datatype.Referencetype.Builder().target_type_id(refType.getTargetTypeId()));
} else {
throw new IllegalArgumentException("Can not create config for data type " + type + " of class " + type.getClass());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
index dd6ae6cf2ee..1240dac8bf1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
+++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
@@ -224,7 +224,7 @@ public class DocumentTypes {
DocumenttypesConfig.Documenttype.Referencetype.Builder refBuilder =
new DocumenttypesConfig.Documenttype.Referencetype.Builder();
refBuilder.id(refType.getId());
- refBuilder.target_type_id(type.getTargetType().getId());
+ refBuilder.target_type_id(type.getTargetTypeId());
documentBuilder.referencetype(refBuilder);
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
index c517e36bce1..bfd87580dbe 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ReferenceFieldTestCase.java
@@ -108,7 +108,8 @@ public class ReferenceFieldTestCase {
DataType dataType = field.getDataType();
assertTrue(dataType instanceof NewDocumentReferenceDataType);
NewDocumentReferenceDataType refField = (NewDocumentReferenceDataType) dataType;
- assertEquals(referencedDocType, refField.getTargetType().getName());
+ assertEquals(referencedDocType, refField.getTargetTypeName());
+ assertTrue(! refField.isTemporary());
}
}