summaryrefslogtreecommitdiff
path: root/gnu/java/nio/charset/Provider.java
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2002-11-08 12:15:32 +0000
committerMichael Koch <konqueror@gmx.de>2002-11-08 12:15:32 +0000
commit03e7fa338ecf4ad04592db8ac84e175646416213 (patch)
tree672c51dbc3e6331a6ee29c1dedb7031495f3436b /gnu/java/nio/charset/Provider.java
parent607c7096d2fe8bef1455b837ccb8d4ed7ae2e083 (diff)
downloadclasspath-03e7fa338ecf4ad04592db8ac84e175646416213.tar.gz
2002-11-08 Jesse Rosenstock <jmr@fulcrummicro.com>
* java/nio/charset/CharacterCodingException.java: This class must be public. * java/nio/charset/Charset.java: Implemented whole class. * java/nio/charset/CharsetDecoder.java: Implemented whole class. * java/nio/charset/CharsetEncoder.java: Implemented whole class. * java/nio/charset/CoderMalfunctionError.java: This class must be public. * java/nio/charset/CoderResult.java: Implemented whole class. * java/nio/charset/CodingErrorAction.java: This class must be public. * java/nio/charset/IllegalCharsetNameException.java: This class must be public, better implementation. * java/nio/charset/MalformedInputException.java: This class must be public, better implementation. * java/nio/charset/UnmappableCharacterException.java: This class must be public, better implementation. * java/nio/charset/UnsupportedCharsetException.java: This class must be public, better implementation. * gnu/java/nio/charset/ISO_8859_1.java, gnu/java/nio/charset/Provider.java, gnu/java/nio/charset/US_ASCII.java, gnu/java/nio/charset/UTF_16.java, gnu/java/nio/charset/UTF_16BE.java, gnu/java/nio/charset/UTF_16Decoder.java, gnu/java/nio/charset/UTF_16Encoder.java, gnu/java/nio/charset/UTF_16LE.java, gnu/java/nio/charset/UTF_8.java, gnu/java/nio/charset/Makefile.am, gnu/java/nio/charset/.cvsignore: New files. * gnu/java/nio/Makefile.am: Add new subdir charset. * configure.in: Added gnu/java/nio/charset/Makefile to AC_OUTPUT.
Diffstat (limited to 'gnu/java/nio/charset/Provider.java')
-rw-r--r--gnu/java/nio/charset/Provider.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/gnu/java/nio/charset/Provider.java b/gnu/java/nio/charset/Provider.java
new file mode 100644
index 000000000..adad1da68
--- /dev/null
+++ b/gnu/java/nio/charset/Provider.java
@@ -0,0 +1,98 @@
+package gnu.java.nio.charset;
+
+import java.nio.charset.Charset;
+import java.nio.charset.spi.CharsetProvider;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * Charset provider for the required charsets. Used by
+ * {@link Charset#charsetForName} and * {@link Charset#availableCharsets}.
+ *
+ * @author Jesse Rosenstock
+ * @see Charset
+ */
+public final class Provider extends CharsetProvider
+{
+ private static Provider singleton;
+
+ static
+ {
+ synchronized (Provider.class)
+ {
+ singleton = null;
+ }
+ }
+
+ /**
+ * Map from charset name to charset canonical name.
+ */
+ private final HashMap canonicalNames;
+
+ /**
+ * Map from canonical name to Charset.
+ * TODO: We may want to use soft references. We would then need to keep
+ * track of the class name to regenerate the object.
+ */
+ private final HashMap charsets;
+
+ private Provider ()
+ {
+ // FIXME: We might need to make the name comparison case insensitive.
+ // Verify this with the Sun JDK.
+ canonicalNames = new HashMap ();
+ charsets = new HashMap ();
+
+ // US-ASCII aka ISO646-US
+ addCharset (new US_ASCII ());
+
+ // ISO-8859-1 aka ISO-LATIN-1
+ addCharset (new ISO_8859_1 ());
+
+ // UTF-8
+ addCharset (new UTF_8 ());
+
+ // UTF-16BE
+ addCharset (new UTF_16BE ());
+
+ // UTF-16LE
+ addCharset (new UTF_16LE ());
+
+ // UTF-16
+ addCharset (new UTF_16 ());
+ }
+
+ public Iterator charsets ()
+ {
+ return Collections.unmodifiableCollection (charsets.values ())
+ .iterator ();
+ }
+
+ public Charset charsetForName (String charsetName)
+ {
+ return (Charset) charsets.get (canonicalize (charsetName));
+ }
+
+ private Object canonicalize (String charsetName)
+ {
+ Object o = canonicalNames.get (charsetName);
+ return o == null ? charsetName : o;
+ }
+
+ private void addCharset (Charset cs)
+ {
+ String canonicalName = cs.name ();
+ charsets.put (canonicalName, cs);
+
+ for (Iterator i = cs.aliases ().iterator (); i.hasNext (); )
+ canonicalNames.put (i.next (), canonicalName);
+ }
+
+ public static synchronized Provider provider ()
+ {
+ if (singleton == null)
+ singleton = new Provider ();
+ return singleton;
+ }
+}