From d10b2f1d0359e814e1f972c49f15272044c327b1 Mon Sep 17 00:00:00 2001 From: Arne H Juul Date: Fri, 18 Mar 2022 10:52:50 +0000 Subject: slight NewDocumentReferenceDataType cleanup * avoid using getTargetType() when possible, as it might be just a placeholder * add toString() suitable for debugging --- .../NewDocumentReferenceDataType.java | 42 ++++++++-------------- .../searchdefinition/DocumentModelBuilder.java | 3 +- .../DocumentReferenceResolver.java | 4 +-- .../configmodel/producers/DocumentManager.java | 2 +- .../vespa/configmodel/producers/DocumentTypes.java | 2 +- .../processing/ReferenceFieldTestCase.java | 3 +- 6 files changed, 22 insertions(+), 34 deletions(-) (limited to 'config-model') 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()); } } -- cgit v1.2.3