aboutsummaryrefslogtreecommitdiffstats
path: root/predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java
Publish
Diffstat (limited to 'predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java')
-rw-r--r--predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java b/predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java
new file mode 100644
index 00000000000..be560514995
--- /dev/null
+++ b/predicate-search-core/src/main/java/com/yahoo/document/predicate/FeatureSet.java
@@ -0,0 +1,119 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document.predicate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen Hult</a>
+ */
+public class FeatureSet extends PredicateValue {
+
+ private Set<String> values;
+ private String key;
+
+ public FeatureSet(String key, String... values) {
+ this(key, Arrays.asList(values));
+ }
+
+ public FeatureSet(String key, Collection<String> values) {
+ Objects.requireNonNull(key, "key");
+ if (values == null) {
+ throw new NullPointerException("values");
+ }
+ this.key = key;
+ this.values = new TreeSet<>(values);
+ }
+
+ public FeatureSet setKey(String key) {
+ Objects.requireNonNull(key, "key");
+ this.key = key;
+ return this;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public FeatureSet addValue(String value) {
+ Objects.requireNonNull(value, "value");
+ values.add(value);
+ return this;
+ }
+
+ public FeatureSet addValues(Collection<String> values) {
+ if (values == null) {
+ throw new NullPointerException("values");
+ }
+ this.values.addAll(values);
+ return this;
+ }
+
+ public FeatureSet setValues(Collection<String> values) {
+ if (values == null) {
+ throw new NullPointerException("values");
+ }
+ this.values.clear();
+ this.values.addAll(values);
+ return this;
+ }
+
+ public Set<String> getValues() {
+ return values;
+ }
+
+ @Override
+ public FeatureSet clone() throws CloneNotSupportedException {
+ FeatureSet obj = (FeatureSet)super.clone();
+ obj.values = new TreeSet<>(values);
+ return obj;
+ }
+
+ @Override
+ public int hashCode() {
+ return (key.hashCode() + values.hashCode()) * 31;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof FeatureSet)) {
+ return false;
+ }
+ FeatureSet rhs = (FeatureSet)obj;
+ if (!key.equals(rhs.key)) {
+ return false;
+ }
+ if (!values.equals(rhs.values)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ protected void appendTo(StringBuilder out) {
+ appendInAsTo("in", out);
+ }
+
+ protected void appendNegatedTo(StringBuilder out) {
+ appendInAsTo("not in", out);
+ }
+
+ private void appendInAsTo(String in, StringBuilder out) {
+ appendQuotedTo(key, out);
+ out.append(' ').append(in).append(" [");
+ for (Iterator<String> it = values.iterator(); it.hasNext(); ) {
+ appendQuotedTo(it.next(), out);
+ if (it.hasNext()) {
+ out.append(", ");
+ }
+ }
+ out.append("]");
+ }
+}