summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/config/Schema.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/config/Schema.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/config/Schema.java71
1 files changed, 71 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/config/Schema.java b/container-search/src/main/java/com/yahoo/search/config/Schema.java
new file mode 100644
index 00000000000..57712c731f4
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/config/Schema.java
@@ -0,0 +1,71 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.config;
+
+import com.yahoo.api.annotations.Beta;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Information about a schema which is part of the application running this.
+ *
+ * This is immutable.
+ *
+ * @author bratseth
+ */
+@Beta
+public class Schema {
+
+ private final String name;
+ private final Map<String, RankProfile> rankProfiles;
+
+ private Schema(Builder builder) {
+ this.name = builder.name;
+ this.rankProfiles = Map.copyOf(builder.rankProfiles);
+ }
+
+ public String name() { return name; }
+ public Map<String, RankProfile> rankProfiles() { return rankProfiles; }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) return true;
+ if ( ! (o instanceof Schema)) return false;
+ Schema other = (Schema)o;
+ if ( ! other.name.equals(this.name)) return false;
+ if ( ! other.rankProfiles.equals(this.rankProfiles)) return false;
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, rankProfiles);
+ }
+
+ @Override
+ public String toString() {
+ return "schema '" + name + "'";
+ }
+
+ public static class Builder {
+
+ private final String name;
+ private final Map<String, RankProfile> rankProfiles = new HashMap<>();
+
+ public Builder(String name) {
+ this.name = Objects.requireNonNull(name);
+ }
+
+ public Builder add(RankProfile profile) {
+ rankProfiles.put(profile.name(), Objects.requireNonNull(profile));
+ return this;
+ }
+
+ public Schema build() {
+ return new Schema(this);
+ }
+
+ }
+
+}