]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/classes/localespi/src/com/ibm/icu/impl/jdkadapter/CollatorICU.java
Added flags.
[Dictionary.git] / jars / icu4j-52_1 / main / classes / localespi / src / com / ibm / icu / impl / jdkadapter / CollatorICU.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2008, International Business Machines Corporation and         *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.impl.jdkadapter;
8
9 import java.text.CollationKey;
10
11 import com.ibm.icu.text.Collator;
12
13 /**
14  * CollatorICU is an adapter class which wraps ICU4J Collator and
15  * implements java.text.Collator APIs.
16  */
17 public class CollatorICU extends java.text.Collator {
18
19     private Collator fIcuCollator;
20
21     private CollatorICU(Collator icuCollator) {
22         fIcuCollator = icuCollator;
23     }
24
25     public static java.text.Collator wrap(Collator icuCollator) {
26         return new CollatorICU(icuCollator);
27     }
28
29     public Collator unwrap() {
30         return fIcuCollator;
31     }
32
33     public Object clone() {
34         CollatorICU other = (CollatorICU)super.clone();
35         try {
36             other.fIcuCollator = (Collator)fIcuCollator.clone();
37         } catch (CloneNotSupportedException e) {
38             // ICU Collator clone() may throw CloneNotSupportedException,
39             // but JDK does not.  We use UnsupportedOperationException instead
40             // as workwround.
41             throw new UnsupportedOperationException("clone() is not supported by this ICU Collator.");
42         }
43         return other;
44     }
45
46     public int compare(Object o1, Object o2) {
47         return fIcuCollator.compare(o1, o2);
48     }
49
50     public int compare(String source, String target) {
51         return fIcuCollator.compare(source, target);
52     }
53
54     public boolean equals(Object that) {
55         if (that instanceof CollatorICU) {
56             return ((CollatorICU)that).fIcuCollator.equals(fIcuCollator);
57         }
58         return false;
59     }
60
61     public boolean equals(String source, String target) {
62         return fIcuCollator.equals(source, target);
63     }
64
65     public CollationKey getCollationKey(String source) {
66         com.ibm.icu.text.CollationKey icuCollKey = fIcuCollator.getCollationKey(source);
67         return CollationKeyICU.wrap(icuCollKey);
68     }
69
70     public int getDecomposition() {
71         int mode = java.text.Collator.NO_DECOMPOSITION;
72
73         if (fIcuCollator.getStrength() == Collator.IDENTICAL) {
74             return java.text.Collator.FULL_DECOMPOSITION;
75         }
76         int icuMode = fIcuCollator.getDecomposition();
77         if (icuMode == Collator.CANONICAL_DECOMPOSITION) {
78             mode = java.text.Collator.CANONICAL_DECOMPOSITION;
79         }
80 //        else if (icuMode == Collator.NO_DECOMPOSITION) {
81 //            mode = java.text.Collator.NO_DECOMPOSITION;
82 //        }
83 //        else {
84 //            throw new IllegalStateException("Unknown decomposition mode is used by the ICU Collator.");
85 //        }
86
87         return mode;
88     }
89
90     public int getStrength() {
91         int strength;
92         int icuStrength = fIcuCollator.getStrength();
93         switch (icuStrength) {
94         case Collator.IDENTICAL:
95             strength = java.text.Collator.IDENTICAL;
96             break;
97         case Collator.PRIMARY:
98             strength = java.text.Collator.PRIMARY;
99             break;
100         case Collator.SECONDARY:
101             strength = java.text.Collator.SECONDARY;
102             break;
103         case Collator.TERTIARY:
104             strength = java.text.Collator.TERTIARY;
105             break;
106         case Collator.QUATERNARY:
107             // Note: No quaternary support in Java..
108             // Return tertiary instead for now.
109             strength = java.text.Collator.TERTIARY;
110             break;
111         default:
112             throw new IllegalStateException("Unknown strength is used by the ICU Collator.");
113         }
114         return strength;
115     }
116
117     public int hashCode() {
118         return fIcuCollator.hashCode();
119     }
120
121     public void setDecomposition(int decompositionMode) {
122         switch (decompositionMode) {
123         case java.text.Collator.CANONICAL_DECOMPOSITION:
124             fIcuCollator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
125             break;
126         case java.text.Collator.NO_DECOMPOSITION:
127             fIcuCollator.setDecomposition(Collator.NO_DECOMPOSITION);
128             break;
129         case java.text.Collator.FULL_DECOMPOSITION:
130             // Not supported by ICU.
131             // This option is interpreted as IDENTICAL strength.
132             fIcuCollator.setStrength(Collator.IDENTICAL);
133             break;
134         default:
135             throw new IllegalArgumentException("Invalid decomposition mode.");
136         }
137     }
138
139     public void setStrength(int newStrength) {
140         switch (newStrength) {
141         case java.text.Collator.IDENTICAL:
142             fIcuCollator.setStrength(Collator.IDENTICAL);
143             break;
144         case java.text.Collator.PRIMARY:
145             fIcuCollator.setStrength(Collator.PRIMARY);
146             break;
147         case java.text.Collator.SECONDARY:
148             fIcuCollator.setStrength(Collator.SECONDARY);
149             break;
150         case java.text.Collator.TERTIARY:
151             fIcuCollator.setStrength(Collator.TERTIARY);
152             break;
153         default:
154             throw new IllegalArgumentException("Invalid strength.");
155         }
156     }
157
158 }