aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java30
1 files changed, 20 insertions, 10 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java
index 2efecc235ac..787d7aa5863 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java
@@ -2,18 +2,20 @@
package com.yahoo.search.grouping.request;
import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* This class represents an uca-function in a {@link GroupingExpression}.
*
- * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a>
+ * @author Ulf Lilleengen
+ * @author bratseth
*/
public class UcaFunction extends FunctionNode {
private final String locale;
private final String strength;
-
/**
* Constructs a new instance of this class.
*
@@ -21,9 +23,7 @@ public class UcaFunction extends FunctionNode {
* @param locale The locale to used for sorting.
*/
public UcaFunction(GroupingExpression exp, String locale) {
- super("uca", Arrays.asList(exp, new StringValue(locale)));
- this.locale = locale;
- this.strength = "TERTIARY";
+ this(null, null, Arrays.asList(exp, new StringValue(locale)));
}
/**
@@ -34,12 +34,22 @@ public class UcaFunction extends FunctionNode {
* @param strength The strength level to use.
*/
public UcaFunction(GroupingExpression exp, String locale, String strength) {
- super("uca", Arrays.asList(exp, new StringValue(locale), new StringValue(strength)));
- if (!validStrength(strength)) {
+ this(null, null, Arrays.asList(exp, new StringValue(locale), new StringValue(strength)));
+ if ( ! validStrength(strength))
throw new IllegalArgumentException("Not a valid UCA strength: " + strength);
- }
- this.locale = locale;
- this.strength = strength;
+ }
+
+ private UcaFunction(String label, Integer level, List<GroupingExpression> args) {
+ super("uca", label, level, args);
+ this.locale = ((StringValue)args.get(1)).getValue();
+ this.strength = args.size() > 2 ? ((StringValue)args.get(1)).getValue() : "TERTIARY";
+ }
+
+ @Override
+ public UcaFunction copy() {
+ return new UcaFunction(getLabel(),
+ getLevelOrNull(),
+ args().stream().map(arg -> arg.copy()).collect(Collectors.toList()));
}
private boolean validStrength(String strength) {