]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/localespi/src/com/ibm/icu/impl/jdkadapter/CollatorICU.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / localespi / src / com / ibm / icu / impl / jdkadapter / CollatorICU.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2008, International Business Machines Corporation and         *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.impl.jdkadapter;\r
8 \r
9 import java.text.CollationKey;\r
10 \r
11 import com.ibm.icu.text.Collator;\r
12 \r
13 /**\r
14  * CollatorICU is an adapter class which wraps ICU4J Collator and\r
15  * implements java.text.Collator APIs.\r
16  */\r
17 public class CollatorICU extends java.text.Collator {\r
18 \r
19     private Collator fIcuCollator;\r
20 \r
21     private CollatorICU(Collator icuCollator) {\r
22         fIcuCollator = icuCollator;\r
23     }\r
24 \r
25     public static java.text.Collator wrap(Collator icuCollator) {\r
26         return new CollatorICU(icuCollator);\r
27     }\r
28 \r
29     public Collator unwrap() {\r
30         return fIcuCollator;\r
31     }\r
32 \r
33     public Object clone() {\r
34         CollatorICU other = (CollatorICU)super.clone();\r
35         try {\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
40             // as workwround.\r
41             throw new UnsupportedOperationException("clone() is not supported by this ICU Collator.");\r
42         }\r
43         return other;\r
44     }\r
45 \r
46     public int compare(Object o1, Object o2) {\r
47         return fIcuCollator.compare(o1, o2);\r
48     }\r
49 \r
50     public int compare(String source, String target) {\r
51         return fIcuCollator.compare(source, target);\r
52     }\r
53 \r
54     public boolean equals(Object that) {\r
55         if (that instanceof CollatorICU) {\r
56             return ((CollatorICU)that).fIcuCollator.equals(fIcuCollator);\r
57         }\r
58         return false;\r
59     }\r
60 \r
61     public boolean equals(String source, String target) {\r
62         return fIcuCollator.equals(source, target);\r
63     }\r
64 \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
68     }\r
69 \r
70     public int getDecomposition() {\r
71         int mode = java.text.Collator.NO_DECOMPOSITION;\r
72 \r
73         if (fIcuCollator.getStrength() == Collator.IDENTICAL) {\r
74             return java.text.Collator.FULL_DECOMPOSITION;\r
75         }\r
76         int icuMode = fIcuCollator.getDecomposition();\r
77         if (icuMode == Collator.CANONICAL_DECOMPOSITION) {\r
78             mode = java.text.Collator.CANONICAL_DECOMPOSITION;\r
79         }\r
80 //        else if (icuMode == Collator.NO_DECOMPOSITION) {\r
81 //            mode = java.text.Collator.NO_DECOMPOSITION;\r
82 //        }\r
83 //        else {\r
84 //            throw new IllegalStateException("Unknown decomposition mode is used by the ICU Collator.");\r
85 //        }\r
86 \r
87         return mode;\r
88     }\r
89 \r
90     public int getStrength() {\r
91         int strength;\r
92         int icuStrength = fIcuCollator.getStrength();\r
93         switch (icuStrength) {\r
94         case Collator.IDENTICAL:\r
95             strength = java.text.Collator.IDENTICAL;\r
96             break;\r
97         case Collator.PRIMARY:\r
98             strength = java.text.Collator.PRIMARY;\r
99             break;\r
100         case Collator.SECONDARY:\r
101             strength = java.text.Collator.SECONDARY;\r
102             break;\r
103         case Collator.TERTIARY:\r
104             strength = java.text.Collator.TERTIARY;\r
105             break;\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
110             break;\r
111         default:\r
112             throw new IllegalStateException("Unknown strength is used by the ICU Collator.");\r
113         }\r
114         return strength;\r
115     }\r
116 \r
117     public int hashCode() {\r
118         return fIcuCollator.hashCode();\r
119     }\r
120 \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
125             break;\r
126         case java.text.Collator.NO_DECOMPOSITION:\r
127             fIcuCollator.setDecomposition(Collator.NO_DECOMPOSITION);\r
128             break;\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
133             break;\r
134         default:\r
135             throw new IllegalArgumentException("Invalid decomposition mode.");\r
136         }\r
137     }\r
138 \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
143             break;\r
144         case java.text.Collator.PRIMARY:\r
145             fIcuCollator.setStrength(Collator.PRIMARY);\r
146             break;\r
147         case java.text.Collator.SECONDARY:\r
148             fIcuCollator.setStrength(Collator.SECONDARY);\r
149             break;\r
150         case java.text.Collator.TERTIARY:\r
151             fIcuCollator.setStrength(Collator.TERTIARY);\r
152             break;\r
153         default:\r
154             throw new IllegalArgumentException("Invalid strength.");\r
155         }\r
156     }\r
157 \r
158 }\r