OSDN Git Service

9a356c16541838b9e08d3108408b9d72d619c1b7
[pf3gnuchains/gcc-fork.git] / libjava / java / text / Collator.java
1 // Collator.java - Locale-sensitive string comparison.
2
3 /* Copyright (C) 1999, 2000  Free Software Foundation
4
5    This file is part of libgcj.
6
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
9 details.  */
10
11 package java.text;
12
13 import java.util.Locale;
14 import java.util.MissingResourceException;
15 import java.util.ResourceBundle;
16 import java.util.Comparator;
17
18 /**
19  * @author Tom Tromey <tromey@cygnus.com>
20  * @date March 18, 1999
21  */
22 /* Written using "Java Class Libraries", 2nd edition, plus online
23  * API docs for JDK 1.2 from http://www.javasoft.com.
24  * Status: Mostly complete, but parts stubbed out.  Look for FIXME.
25  */
26
27 public abstract class Collator implements Comparator, Cloneable
28 {
29   public static final int NO_DECOMPOSITION = 0;
30   public static final int CANONICAL_DECOMPOSITION = 1;
31   public static final int FULL_DECOMPOSITION = 2;
32
33   public static final int PRIMARY = 0;
34   public static final int SECONDARY = 1;
35   public static final int TERTIARY = 2;
36   public static final int IDENTICAL = 3;
37
38   protected Collator ()
39   {
40     strength = TERTIARY;
41     decmp = CANONICAL_DECOMPOSITION;
42   }
43
44   public abstract int compare (String source, String target);
45
46   public int compare (Object o1, Object o2)
47   {
48     return compare ((String) o1, (String) o2);
49   }
50
51   public boolean equals (Object obj)
52   {
53     if (! (obj instanceof Collator))
54       return false;
55     Collator c = (Collator) obj;
56     return decmp == c.decmp && strength == c.strength;
57   }
58
59   public boolean equals (String source, String target)
60   {
61     return compare (source, target) == 0;
62   }
63
64   public Object clone ()
65   {
66     return super.clone ();
67   }
68
69   public static synchronized Locale[] getAvailableLocales ()
70   {
71     // FIXME.
72     return null;
73   }
74
75   public abstract CollationKey getCollationKey (String source);
76
77   public synchronized int getDecomposition ()
78   {
79     return decmp;
80   }
81
82   public static Collator getInstance ()
83   {
84     return getInstance (Locale.getDefault());
85   }
86
87   public static Collator getInstance (Locale loc)
88   {
89     ResourceBundle res;
90     String pattern;
91     try
92       {
93         res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
94         pattern = res.getString("collatorRule");
95       }
96     catch (MissingResourceException x)
97       {
98         return null;
99       }
100     try
101       {
102         return new RuleBasedCollator (pattern);
103       }
104     catch (ParseException x)
105       {
106         return null;
107       }
108   }
109
110   public synchronized int getStrength ()
111   {
112     return strength;
113   }
114
115   public abstract int hashCode ();
116
117   public synchronized void setDecomposition (int mode)
118   {
119     if (mode != NO_DECOMPOSITION
120         && mode != CANONICAL_DECOMPOSITION
121         && mode != FULL_DECOMPOSITION)
122       throw new IllegalArgumentException ();
123     decmp = mode;
124   }
125
126   public synchronized void setStrength (int strength)
127   {
128     if (strength != PRIMARY && strength != SECONDARY
129         && strength != TERTIARY && strength != IDENTICAL)
130       throw new IllegalArgumentException ();
131     this.strength = strength;
132   }
133
134   // Decompose a single character and append results to the buffer.
135   native final void decomposeCharacter (char c, StringBuffer buf);
136
137   // These names are fixed by the serialization spec.
138   int decmp;
139   int strength;
140 }