From 93958006886da9462961e5d1202ff05b9dd4c357 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Wed, 25 Jan 2017 11:32:07 +0100 Subject: Simplify AST classes used for imported fields. --- .../java/com/yahoo/searchdefinition/Search.java | 6 ++-- .../searchdefinition/document/ImportedFields.java | 24 ---------------- .../document/TemporaryFieldReference.java | 33 ---------------------- .../document/TemporaryImportedField.java | 32 +++++++++++++-------- .../document/TemporaryImportedFields.java | 26 +++++++++++++++++ config-model/src/main/javacc/SDParser.jj | 22 +++++---------- .../processing/ImportedFieldsTestCase.java | 10 +++---- 7 files changed, 61 insertions(+), 92 deletions(-) delete mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java delete mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java create mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java (limited to 'config-model') diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java index 710f49dddb6..2e31dfe37d5 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java @@ -70,7 +70,7 @@ public class Search implements Serializable { // Ranking constants defined inside this s.d. private Map rankingConstants = new HashMap<>(); - private ImportedFields importedFields = new ImportedFields(); + private TemporaryImportedFields temporaryImportedFields = new TemporaryImportedFields(); private ApplicationPackage sourceApplication; @@ -156,8 +156,8 @@ public class Search implements Serializable { return rankingConstants.values(); } - public ImportedFields importedFields() { - return importedFields; + public TemporaryImportedFields importedFields() { + return temporaryImportedFields; } /** diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java deleted file mode 100644 index 01d14104d2b..00000000000 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImportedFields.java +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.searchdefinition.document; - -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * A set of fields that are imported from referenced document types. - * - * @author geirst - */ -public class ImportedFields { - - private final Map fields = new LinkedHashMap<>(); - - public void add(TemporaryImportedField importedField) { - fields.put(importedField.fieldName(), importedField); - } - - public Map fields() { - return Collections.unmodifiableMap(fields); - } -} diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java deleted file mode 100644 index 2dea3f9bf88..00000000000 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryFieldReference.java +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.searchdefinition.document; - -/** - * Temporary reference to a field in another document type. - * - * After all SD files are parsed this temporary reference can be validated and connected - * to the actual field instance in the referenced document type. - * - * @author geirst - */ -public class TemporaryFieldReference { - - private final String refFieldName; - private final String fieldNameInRefType; - - /** - * @param refFieldName points to a field of type reference (in this document type). - * @param fieldNameInRefType points to a field in the referenced document type. - */ - public TemporaryFieldReference(String refFieldName, String fieldNameInRefType) { - this.refFieldName = refFieldName; - this.fieldNameInRefType = fieldNameInRefType; - } - - public String refFieldName() { - return refFieldName; - } - - public String fieldNameInRefType() { - return fieldNameInRefType; - } -} diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java index 23a5e05c55f..5c400c8d5f2 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedField.java @@ -2,28 +2,36 @@ package com.yahoo.searchdefinition.document; /** - * Temporary field that is imported from a field in a referenced document type. + * A field that is imported from a field in a referenced document type and given an alias name. * - * After all SD files are parsed this temporary field can be validated and connected - * to the actual field instance in the referenced document type. + * This is temporary AST structure that only refers to the imported field by name. * * @author geirst */ public class TemporaryImportedField { - private final String fieldName; - private final TemporaryFieldReference reference; + private final String aliasFieldName; + private final String documentReferenceFieldName; + private final String foreignFieldName; - public TemporaryImportedField(String fieldName, TemporaryFieldReference reference) { - this.fieldName = fieldName; - this.reference = reference; + public TemporaryImportedField(String aliasFieldName, + String documentReferenceFieldName, + String foreignFieldName) { + this.aliasFieldName = aliasFieldName; + this.documentReferenceFieldName = documentReferenceFieldName; + this.foreignFieldName = foreignFieldName; } - public String fieldName() { - return fieldName; + public String aliasFieldName() { + return aliasFieldName; } - public TemporaryFieldReference reference() { - return reference; + public String documentReferenceFieldName() { + return documentReferenceFieldName; } + + public String foreignFieldName() { + return foreignFieldName; + } + } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java new file mode 100644 index 00000000000..e791e27e534 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/TemporaryImportedFields.java @@ -0,0 +1,26 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.searchdefinition.document; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * A set of fields that are imported from referenced document types. + * + * This is temporary AST structure that only refers to the imported fields by name. + * + * @author geirst + */ +public class TemporaryImportedFields { + + private final Map fields = new LinkedHashMap<>(); + + public void add(TemporaryImportedField importedField) { + fields.put(importedField.aliasFieldName(), importedField); + } + + public Map fields() { + return Collections.unmodifiableMap(fields); + } +} diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index d8725b81969..cb6ac8c96f3 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -2391,33 +2391,25 @@ TensorType tensorType(String errorMessage) : } void importField(Search search) : -{ - TemporaryFieldReference reference; - String fieldName; -} -{ - reference = fieldReference() fieldName = identifier() lbrace() - - { - search.importedFields().add(new TemporaryImportedField(fieldName, reference)); - } -} - -TemporaryFieldReference fieldReference() : { String fieldRefSpec; + String aliasFieldName; } { - fieldRefSpec = identifier() + fieldRefSpec = identifier() aliasFieldName = identifier() lbrace() + { if (StringUtils.countMatches(fieldRefSpec, ".") != 1) { throw new IllegalArgumentException("Illegal field reference spec '" + fieldRefSpec + "': Does not include a single '.'"); } int indexOfDot = fieldRefSpec.indexOf('.'); - return new TemporaryFieldReference(fieldRefSpec.substring(0, indexOfDot), fieldRefSpec.substring(indexOfDot + 1)); + String documentReferenceFieldName = fieldRefSpec.substring(0, indexOfDot); + String foreignFieldName = fieldRefSpec.substring(indexOfDot + 1); + search.importedFields().add(new TemporaryImportedField(aliasFieldName, documentReferenceFieldName, foreignFieldName)); } } + /** * This rule consumes an expression token and returns its image. * diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java index 434cfd72136..083c74409c2 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsTestCase.java @@ -51,10 +51,10 @@ public class ImportedFieldsTestCase { return builder.getSearch(); } - private static void assertSearchContainsTemporaryImportedField(String fieldName, String refFieldName, String fieldNameInRefType, Search search) { - TemporaryImportedField importedField = search.importedFields().fields().get(fieldName); - assertEquals(fieldName, importedField.fieldName()); - assertEquals(refFieldName, importedField.reference().refFieldName()); - assertEquals(fieldNameInRefType, importedField.reference().fieldNameInRefType()); + private static void assertSearchContainsTemporaryImportedField(String aliasFieldName, String documentReferenceFieldName, String foreignFieldName, Search search) { + TemporaryImportedField importedField = search.importedFields().fields().get(aliasFieldName); + assertEquals(aliasFieldName, importedField.aliasFieldName()); + assertEquals(documentReferenceFieldName, importedField.documentReferenceFieldName()); + assertEquals(foreignFieldName, importedField.foreignFieldName()); } } -- cgit v1.2.3