xref: /aosp_15_r20/external/cldr/tools/cldr-code/src/main/java/org/unicode/cldr/util/ComparatorUtilities.java (revision 912701f9769bb47905792267661f0baf2b85bed5)
1 package org.unicode.cldr.util;
2 
3 import com.ibm.icu.text.Collator;
4 import com.ibm.icu.text.UTF16;
5 import com.ibm.icu.util.ULocale;
6 import java.util.Comparator;
7 
8 public class ComparatorUtilities {
9 
10     public static final UTF16.StringComparator CODE_POINT_COMPARATOR =
11             new UTF16.StringComparator(true, false, 0);
12 
getIcuCollator(String localeId, int strength)13     public static Collator getIcuCollator(String localeId, int strength) {
14         return getIcuCollator(new ULocale(localeId), strength);
15     }
16 
getIcuCollator(ULocale localeId, int strength)17     public static Collator getIcuCollator(ULocale localeId, int strength) {
18         Collator temp = Collator.getInstance(localeId);
19         temp.setStrength(strength);
20         temp.freeze();
21         return temp;
22     }
23 
24     // TODO: decouple from ICUServiceBuilder
getCldrCollator(String localeId, int strength)25     public static Collator getCldrCollator(String localeId, int strength) {
26         Collator col = null;
27         try {
28             ICUServiceBuilder isb = null;
29             isb = ICUServiceBuilder.forLocale(CLDRLocale.getInstance(localeId));
30             col = isb.getRuleBasedCollator().setStrength2(strength).freeze();
31         } catch (Exception e) {
32         }
33         return col != null
34                 ? col
35                 : Collator.getInstance(new ULocale(localeId)).setStrength2(strength).freeze();
36     }
37 
wrapForCodePoints(Comparator<String> comparator)38     public static Comparator<String> wrapForCodePoints(Comparator<String> comparator) {
39         return comparator == null
40                 ? CODE_POINT_COMPARATOR
41                 : new MultiComparator<>(comparator, CODE_POINT_COMPARATOR);
42     }
43 }
44