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