diff options
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java b/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java index 765ad858535..a781adcefb7 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java @@ -9,6 +9,8 @@ import com.yahoo.schema.document.ImportedComplexField; import com.yahoo.schema.document.ImportedField; import com.yahoo.vespa.config.search.ImportedFieldsConfig; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import static com.yahoo.schema.document.ComplexAttributeFieldUtils.isArrayOfSimpleStruct; @@ -40,8 +42,11 @@ public class ImportedFields extends Derived implements ImportedFieldsConfig.Prod @Override public void getConfig(ImportedFieldsConfig.Builder builder) { + // Replace if (importedFields.isPresent()) { - importedFields.get().fields().forEach( (name, field) -> considerField(builder, field)); + List<ImportedField> imported = new ArrayList<>(); + importedFields.get().fields().forEach( (name, field) -> considerField(imported, field)); + builder.attribute(imported.stream().map(ImportedFields::createAttributeBuilder).toList()); } } @@ -49,47 +54,46 @@ public class ImportedFields extends Derived implements ImportedFieldsConfig.Prod return fieldName.indexOf('.') != -1; } - private static void considerField(ImportedFieldsConfig.Builder builder, ImportedField field) { + private static void considerField(List<ImportedField> importedFields, ImportedField field) { if (field instanceof ImportedComplexField) { - considerComplexField(builder, (ImportedComplexField) field); + considerComplexField(importedFields, (ImportedComplexField) field); } else { - considerSimpleField(builder, field); + considerSimpleField(importedFields, field); } } - private static void considerComplexField(ImportedFieldsConfig.Builder builder, ImportedComplexField field) { + private static void considerComplexField(List<ImportedField> importedFields, ImportedComplexField field) { ImmutableSDField targetField = field.targetField(); if (GeoPos.isAnyPos(targetField)) { // no action needed } else if (isArrayOfSimpleStruct(targetField)) { - considerNestedFields(builder, field); + considerNestedFields(importedFields, field); } else if (isMapOfSimpleStruct(targetField)) { - considerSimpleField(builder, field.getNestedField("key")); - considerNestedFields(builder, field.getNestedField("value")); + considerSimpleField(importedFields, field.getNestedField("key")); + considerNestedFields(importedFields, field.getNestedField("value")); } else if (isMapOfPrimitiveType(targetField)) { - considerSimpleField(builder, field.getNestedField("key")); - considerSimpleField(builder, field.getNestedField("value")); + considerSimpleField(importedFields, field.getNestedField("key")); + considerSimpleField(importedFields, field.getNestedField("value")); } } - private static void considerNestedFields(ImportedFieldsConfig.Builder builder, ImportedField field) { - if (field instanceof ImportedComplexField) { - ImportedComplexField complexField = (ImportedComplexField) field; - complexField.getNestedFields().forEach(nestedField -> considerSimpleField(builder, nestedField)); + private static void considerNestedFields(List<ImportedField> importedFields, ImportedField field) { + if (field instanceof ImportedComplexField complexField) { + complexField.getNestedFields().forEach(nestedField -> considerSimpleField(importedFields, nestedField)); } } - private static void considerSimpleField(ImportedFieldsConfig.Builder builder, ImportedField field) { + private static void considerSimpleField(List<ImportedField> importedFields, ImportedField field) { ImmutableSDField targetField = field.targetField(); String targetFieldName = targetField.getName(); if (!isNestedFieldName(targetFieldName)) { if (targetField.doesAttributing()) { - builder.attribute.add(createAttributeBuilder(field)); + importedFields.add(field); } } else { Attribute attribute = targetField.getAttribute(); if (attribute != null) { - builder.attribute.add(createAttributeBuilder(field)); + importedFields.add(field); } } } |