aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java')
-rw-r--r--config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java49
1 files changed, 49 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java b/config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java
new file mode 100644
index 00000000000..10c400bc4d6
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/schema/document/ImportedComplexField.java
@@ -0,0 +1,49 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.schema.document;
+
+import com.yahoo.schema.DocumentReference;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * A complex field that is imported from a concrete field in a referenced document type and given an alias name.
+ */
+public class ImportedComplexField extends ImportedField {
+
+ private Map<String, ImportedField> nestedFields;
+
+ public ImportedComplexField(String fieldName, DocumentReference reference, ImmutableSDField targetField) {
+ super(fieldName, reference, targetField);
+ nestedFields = new java.util.LinkedHashMap<>(0);
+ }
+
+ @Override
+ public ImmutableSDField asImmutableSDField() {
+ return new ImmutableImportedComplexSDField(this);
+ }
+
+ public void addNestedField(ImportedField importedField) {
+ String prefix = fieldName() + ".";
+ assert(importedField.fieldName().substring(0, prefix.length()).equals(prefix));
+ String suffix = importedField.fieldName().substring(prefix.length());
+ nestedFields.put(suffix, importedField);
+ }
+
+ public Collection<ImportedField> getNestedFields() {
+ return nestedFields.values();
+ }
+
+ public ImportedField getNestedField(String name) {
+ if (name.contains(".")) {
+ String superFieldName = name.substring(0,name.indexOf("."));
+ String subFieldName = name.substring(name.indexOf(".")+1);
+ ImportedField superField = nestedFields.get(superFieldName);
+ if (superField != null && superField instanceof ImportedComplexField) {
+ return ((ImportedComplexField)superField).getNestedField(subFieldName);
+ }
+ return null;
+ }
+ return nestedFields.get(name);
+ }
+}