diff options
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.java | 30 |
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) { |