summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-10-15 17:58:13 +0200
committerJon Bratseth <bratseth@gmail.com>2021-10-15 17:58:13 +0200
commit813c270c2ea80953c7b09aac56dc6a5c254aca1e (patch)
tree272ba9fe3a0e7f94e30f7bd5e130eb9c9f4edad9 /config-model/src/main/java/com/yahoo/searchdefinition/Application.java
parent3a755750ba601440cee41d2f19d4370e2817b3c1 (diff)
Add Application abstraction
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/Application.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Application.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Application.java b/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
new file mode 100644
index 00000000000..5eb28201239
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
@@ -0,0 +1,54 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition;
+
+import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.application.api.DeployLogger;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A collection of objects representing the content of an application package.
+ * This is created, then added to, and lastly validated when there is no more content to add.
+ * At that point it is ready to use for deriving configuration.
+ *
+ * @author bratseth
+ */
+public class Application {
+
+ private final ApplicationPackage applicationPackage;
+ private final Map<String, Search> schemas = new LinkedHashMap<>();
+
+ public Application(ApplicationPackage applicationPackage) {
+ this.applicationPackage = applicationPackage;
+ }
+
+ public ApplicationPackage applicationPackage() { return applicationPackage; }
+
+ public void add(Search schema) {
+ if (schemas.containsKey(schema.getName()))
+ throw new IllegalArgumentException("Duplicate schema '" + schema.getName() + "' in " + this);
+ schemas.put(schema.getName(), schema);
+ }
+
+ /** Returns an unmodifiable list of the schemas of this application */
+ public Map<String, Search> schemas() { return Collections.unmodifiableMap(schemas); }
+
+ /** Used by SearchBuilder, for now */
+ void replaceSchemasBy(List<Search> schemas) {
+ this.schemas.clear();
+ for (var schema : schemas)
+ this.schemas.put(schema.getName(), schema);
+ }
+
+ /** Validates this. Must be called after all content is added to it. */
+ public void validate(DeployLogger logger) {
+ schemas.values().forEach(schema -> schema.validate(logger));
+ }
+
+ @Override
+ public String toString() { return "application " + applicationPackage.getApplicationId(); }
+
+}