aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java b/container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java
new file mode 100644
index 00000000000..92601a5464d
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/query/parser/Parsable.java
@@ -0,0 +1,112 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.parser;
+
+import com.yahoo.language.Language;
+import com.yahoo.search.query.Model;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * <p>This class encapsulates all the parameters required to call {@link Parser#parse(Parsable)}. Because all set-
+ * methods return a reference to self, you can write very compact calls to the parser:</p>
+ *
+ * <pre>
+ * parser.parse(new Parsable()
+ * .setQuery("foo")
+ * .setFilter("bar")
+ * .setDefaultIndexName("default")
+ * .setLanguage(Language.ENGLISH))
+ * </pre>
+ *
+ * <p>In case you are parsing the content of a {@link Model}, you can use the {@link #fromQueryModel(Model)} factory for
+ * convenience.</p>
+ *
+ * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @since 5.1.4
+ */
+public final class Parsable {
+
+ private final Set<String> sourceList = new HashSet<>();
+ private final Set<String> restrictList = new HashSet<>();
+ private String query;
+ private String filter;
+ private String defaultIndexName;
+ private Language language;
+
+ public String getQuery() {
+ return query;
+ }
+
+ public Parsable setQuery(String query) {
+ this.query = query;
+ return this;
+ }
+
+ public String getFilter() {
+ return filter;
+ }
+
+ public Parsable setFilter(String filter) {
+ this.filter = filter;
+ return this;
+ }
+
+ public String getDefaultIndexName() {
+ return defaultIndexName;
+ }
+
+ public Parsable setDefaultIndexName(String defaultIndexName) {
+ this.defaultIndexName = defaultIndexName;
+ return this;
+ }
+
+ public Language getLanguage() {
+ return language;
+ }
+
+ public Parsable setLanguage(Language language) {
+ this.language = language;
+ return this;
+ }
+
+ public Set<String> getSources() {
+ return sourceList;
+ }
+
+ public Parsable addSource(String sourceName) {
+ sourceList.add(sourceName);
+ return this;
+ }
+
+ public Parsable addSources(Collection<String> sourceNames) {
+ sourceList.addAll(sourceNames);
+ return this;
+ }
+
+ public Set<String> getRestrict() {
+ return restrictList;
+ }
+
+ public Parsable addRestrict(String restrictName) {
+ restrictList.add(restrictName);
+ return this;
+ }
+
+ public Parsable addRestricts(Collection<String> restrictNames) {
+ restrictList.addAll(restrictNames);
+ return this;
+ }
+
+ public static Parsable fromQueryModel(Model model) {
+ return new Parsable()
+ .setQuery(model.getQueryString())
+ .setFilter(model.getFilter())
+ .setLanguage(model.getParsingLanguage())
+ .setDefaultIndexName(model.getDefaultIndex())
+ .addSources(model.getSources())
+ .addRestricts(model.getRestrict());
+ }
+
+}