summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java
new file mode 100644
index 00000000000..32ed54a6775
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/resolvers/DeterministicResolver.java
@@ -0,0 +1,56 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.pagetemplates.engine.resolvers;
+
+import com.yahoo.search.Query;
+import com.yahoo.search.Result;
+import com.yahoo.search.pagetemplates.engine.Resolution;
+import com.yahoo.search.pagetemplates.engine.Resolver;
+import com.yahoo.search.pagetemplates.model.Choice;
+import com.yahoo.search.pagetemplates.model.MapChoice;
+import com.yahoo.search.pagetemplates.model.PageElement;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A resolver which
+ * <ul>
+ * <li>Always chooses the <i>last</i> alternative of any Choice
+ * <li>Always maps values to placeholders in the order they are listed in the map definition of any MapChoice
+ * </ul>
+ * This is useful for testing.
+ * <p>
+ * The id of this if <code>native.deterministic</code>
+ *
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a>
+ */
+public class DeterministicResolver extends Resolver {
+ public static final String nativeId = "native.deterministic";
+
+ public DeterministicResolver() {}
+
+ protected DeterministicResolver(String id) {
+ super(id);
+ }
+
+ /** Chooses the last alternative of any choice */
+ @Override
+ public void resolve(Choice choice, Query query, Result result, Resolution resolution) {
+ resolution.addChoiceResolution(choice,choice.alternatives().size()-1);
+ }
+
+ /** Chooses a mapping which is always by the literal order given in the source template */
+ @Override
+ public void resolve(MapChoice choice,Query query,Result result,Resolution resolution) {
+ Map<String, List<PageElement>> mapping=new HashMap<>();
+ // Map 1-1 by order
+ List<String> placeholderIds=choice.placeholderIds();
+ List<List<PageElement>> valueList=choice.values();
+ int i=0;
+ for (String placeholderId : placeholderIds)
+ mapping.put(placeholderId,valueList.get(i++));
+ resolution.addMapChoiceResolution(choice,mapping);
+ }
+
+}