2 *******************************************************************************
\r
3 * Copyright (C) 2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl.jdkadapter;
\r
9 import java.text.CollationKey;
\r
11 import com.ibm.icu.text.Collator;
\r
14 * CollatorICU is an adapter class which wraps ICU4J Collator and
\r
15 * implements java.text.Collator APIs.
\r
17 public class CollatorICU extends java.text.Collator {
\r
19 private Collator fIcuCollator;
\r
21 private CollatorICU(Collator icuCollator) {
\r
22 fIcuCollator = icuCollator;
\r
25 public static java.text.Collator wrap(Collator icuCollator) {
\r
26 return new CollatorICU(icuCollator);
\r
29 public Collator unwrap() {
\r
30 return fIcuCollator;
\r
33 public Object clone() {
\r
34 CollatorICU other = (CollatorICU)super.clone();
\r
36 other.fIcuCollator = (Collator)fIcuCollator.clone();
\r
37 } catch (CloneNotSupportedException e) {
\r
38 // ICU Collator clone() may throw CloneNotSupportedException,
\r
39 // but JDK does not. We use UnsupportedOperationException instead
\r
41 throw new UnsupportedOperationException("clone() is not supported by this ICU Collator.");
\r
46 public int compare(Object o1, Object o2) {
\r
47 return fIcuCollator.compare(o1, o2);
\r
50 public int compare(String source, String target) {
\r
51 return fIcuCollator.compare(source, target);
\r
54 public boolean equals(Object that) {
\r
55 if (that instanceof CollatorICU) {
\r
56 return ((CollatorICU)that).fIcuCollator.equals(fIcuCollator);
\r
61 public boolean equals(String source, String target) {
\r
62 return fIcuCollator.equals(source, target);
\r
65 public CollationKey getCollationKey(String source) {
\r
66 com.ibm.icu.text.CollationKey icuCollKey = fIcuCollator.getCollationKey(source);
\r
67 return CollationKeyICU.wrap(icuCollKey);
\r
70 public int getDecomposition() {
\r
71 int mode = java.text.Collator.NO_DECOMPOSITION;
\r
73 if (fIcuCollator.getStrength() == Collator.IDENTICAL) {
\r
74 return java.text.Collator.FULL_DECOMPOSITION;
\r
76 int icuMode = fIcuCollator.getDecomposition();
\r
77 if (icuMode == Collator.CANONICAL_DECOMPOSITION) {
\r
78 mode = java.text.Collator.CANONICAL_DECOMPOSITION;
\r
80 // else if (icuMode == Collator.NO_DECOMPOSITION) {
\r
81 // mode = java.text.Collator.NO_DECOMPOSITION;
\r
84 // throw new IllegalStateException("Unknown decomposition mode is used by the ICU Collator.");
\r
90 public int getStrength() {
\r
92 int icuStrength = fIcuCollator.getStrength();
\r
93 switch (icuStrength) {
\r
94 case Collator.IDENTICAL:
\r
95 strength = java.text.Collator.IDENTICAL;
\r
97 case Collator.PRIMARY:
\r
98 strength = java.text.Collator.PRIMARY;
\r
100 case Collator.SECONDARY:
\r
101 strength = java.text.Collator.SECONDARY;
\r
103 case Collator.TERTIARY:
\r
104 strength = java.text.Collator.TERTIARY;
\r
106 case Collator.QUATERNARY:
\r
107 // Note: No quaternary support in Java..
\r
108 // Return tertiary instead for now.
\r
109 strength = java.text.Collator.TERTIARY;
\r
112 throw new IllegalStateException("Unknown strength is used by the ICU Collator.");
\r
117 public int hashCode() {
\r
118 return fIcuCollator.hashCode();
\r
121 public void setDecomposition(int decompositionMode) {
\r
122 switch (decompositionMode) {
\r
123 case java.text.Collator.CANONICAL_DECOMPOSITION:
\r
124 fIcuCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
\r
126 case java.text.Collator.NO_DECOMPOSITION:
\r
127 fIcuCollator.setDecomposition(Collator.NO_DECOMPOSITION);
\r
129 case java.text.Collator.FULL_DECOMPOSITION:
\r
130 // Not supported by ICU.
\r
131 // This option is interpreted as IDENTICAL strength.
\r
132 fIcuCollator.setStrength(Collator.IDENTICAL);
\r
135 throw new IllegalArgumentException("Invalid decomposition mode.");
\r
139 public void setStrength(int newStrength) {
\r
140 switch (newStrength) {
\r
141 case java.text.Collator.IDENTICAL:
\r
142 fIcuCollator.setStrength(Collator.IDENTICAL);
\r
144 case java.text.Collator.PRIMARY:
\r
145 fIcuCollator.setStrength(Collator.PRIMARY);
\r
147 case java.text.Collator.SECONDARY:
\r
148 fIcuCollator.setStrength(Collator.SECONDARY);
\r
150 case java.text.Collator.TERTIARY:
\r
151 fIcuCollator.setStrength(Collator.TERTIARY);
\r
154 throw new IllegalArgumentException("Invalid strength.");
\r