aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java b/container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java
new file mode 100644
index 00000000000..8bc6cba7f67
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/query/textserialize/item/TermConverter.java
@@ -0,0 +1,53 @@
+// 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.textserialize.item;
+
+import com.yahoo.prelude.query.Item;
+import com.yahoo.prelude.query.TermItem;
+import com.yahoo.search.query.textserialize.serializer.DispatchForm;
+import com.yahoo.search.query.textserialize.serializer.ItemIdMapper;
+
+/**
+ * @author tonytv
+ */
+public abstract class TermConverter implements ItemFormConverter {
+ @Override
+ public Object formToItem(String name, ItemArguments arguments, ItemContext context) {
+ ensureOnlyOneChild(arguments);
+ String word = getWord(arguments);
+
+ TermItem item = newTermItem(word);
+ ItemInitializer.initialize(item, arguments, context);
+ return item;
+ }
+
+ abstract TermItem newTermItem(String word);
+
+
+ private void ensureOnlyOneChild(ItemArguments arguments) {
+ if (arguments.children.size() != 1) {
+ throw new IllegalArgumentException("Expected exactly one argument, got '" +
+ arguments.children.toString() + "'");
+ }
+ }
+
+ private String getWord(ItemArguments arguments) {
+ Object word = arguments.children.get(0);
+
+ if (!(word instanceof String)) {
+ throw new RuntimeException("Expected string, got '" + word + "' [" + word.getClass().getName() + "].");
+ }
+ return (String)word;
+ }
+
+ @Override
+ public DispatchForm itemToForm(Item item, ItemIdMapper itemIdMapper) {
+ TermItem termItem = (TermItem)item;
+
+ DispatchForm form = new DispatchForm(termItem.getItemType().name());
+ ItemInitializer.initializeForm(form, item, itemIdMapper);
+ form.addChild(getValue(termItem));
+ return form;
+ }
+
+ protected abstract String getValue(TermItem item);
+}