diff options
Diffstat (limited to 'src/java.corba/share/classes/com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java')
-rw-r--r-- | src/java.corba/share/classes/com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/src/java.corba/share/classes/com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java b/src/java.corba/share/classes/com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java new file mode 100644 index 0000000..6950082 --- /dev/null +++ b/src/java.corba/share/classes/com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.java @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.corba.se.impl.encoding; + +/** + * + * Information from the OSF code set registry version 1.2g. + * + * Use the Entry corresponding to the desired code set. + * + * Consider rename to CodeSetRegistry since OSF is dead. + */ +public final class OSFCodeSetRegistry +{ + // Numbers from the OSF code set registry version 1.2g. + // + // Please see the individual Entry definitions for + // more details. + public static final int ISO_8859_1_VALUE = 0x00010001; + public static final int UTF_16_VALUE = 0x00010109; + public static final int UTF_8_VALUE = 0x05010001; + public static final int UCS_2_VALUE = 0x00010100; + public static final int ISO_646_VALUE = 0x00010020; + + private OSFCodeSetRegistry() {} + + /** + * An entry in the OSF registry which allows users + * to find out the equivalent Java character encoding + * name as well as some other facts from the registry. + */ + public final static class Entry + { + private String javaName; + private int encodingNum; + private boolean isFixedWidth; + private int maxBytesPerChar; + + private Entry(String javaName, + int encodingNum, + boolean isFixedWidth, + int maxBytesPerChar) { + this.javaName = javaName; + this.encodingNum = encodingNum; + this.isFixedWidth = isFixedWidth; + this.maxBytesPerChar = maxBytesPerChar; + } + + /** + * Returns the Java equivalent name. If the encoding has + * an optional byte order marker, this name will map to the + * Java encoding that includes the marker. + */ + public String getName() { + return javaName; + } + + /** + * Get the OSF registry number for this code set. + */ + public int getNumber() { + return encodingNum; + } + + /** + * Is this a fixed or variable width code set? (In CORBA + * terms, "non-byte-oriented" or a "byte-oriented" + * code set, respectively) + */ + public boolean isFixedWidth() { + return isFixedWidth; + } + + public int getMaxBytesPerChar() { + return maxBytesPerChar; + } + + /** + * First checks reference equality since it's expected + * people will use the pre-defined constant Entries. + */ + public boolean equals(Object obj) { + if (this == obj) + return true; + + if (!(obj instanceof OSFCodeSetRegistry.Entry)) + return false; + + OSFCodeSetRegistry.Entry other + = (OSFCodeSetRegistry.Entry)obj; + + return (javaName.equals(other.javaName) && + encodingNum == other.encodingNum && + isFixedWidth == other.isFixedWidth && + maxBytesPerChar == other.maxBytesPerChar); + } + + /** + * Uses the registry number as the hash code. + */ + public int hashCode() { + return encodingNum; + } + } + + /** + * 8-bit encoding required for GIOP 1.0, and used as the char set + * when nothing else is specified. + */ + public static final Entry ISO_8859_1 + = new Entry("ISO-8859-1", + ISO_8859_1_VALUE, + true, + 1); + + /** + * UTF-16 as specified in the OSF registry has an optional + * byte order marker. UTF-16BE and UTF-16LE are not in the OSF + * registry since it is no longer being developed. When the OMG + * switches to the IANA registry, these can be public. Right + * now, they're used internally by CodeSetConversion. + */ + static final Entry UTF_16BE + = new Entry("UTF-16BE", + -1, + true, + 2); + + static final Entry UTF_16LE + = new Entry("UTF-16LE", + -2, + true, + 2); + + /** + * Fallback wchar code set. + * + * In the resolution of issue 3405b, UTF-16 defaults to big endian, so + * doesn't have to have a byte order marker. Unfortunately, this has to be + * a special case for compatibility. + */ + public static final Entry UTF_16 + = new Entry("UTF-16", + UTF_16_VALUE, + true, + 4); + + /** + * Fallback char code set. Also the code set for char data + * in encapsulations. However, since CORBA says chars are + * only one octet, it is really the same as Latin-1. + */ + public static final Entry UTF_8 + = new Entry("UTF-8", + UTF_8_VALUE, + false, + 6); + + /* + * At least in JDK 1.3, UCS-2 isn't one of the mandatory Java character + * encodings. However, our old ORBs require what they call UCS2, even + * though they didn't necessarily do the correct encoding of it. + * + * This is a special case for our legacy ORBs, and put as the last thing + * in our conversion list for wchar data. + * + * If a foreign ORB actually tries to speak UCS2 with us, it probably + * won't work! Beware! + */ + public static final Entry UCS_2 + = new Entry("UCS-2", + UCS_2_VALUE, + true, + 2); + + /** + * This is the encoding older JavaSoft ORBs advertised as their + * CORBA char code set. Actually, they took the lower byte of + * the Java char. This is a 7-bit encoding, so they + * were really sending ISO8859-1. + */ + public static final Entry ISO_646 + = new Entry("US-ASCII", + ISO_646_VALUE, + true, + 1); + + /** + * Given an OSF registry value, return the corresponding Entry. + * Returns null if an Entry for that value is unavailable. + */ + public static Entry lookupEntry(int encodingValue) { + switch(encodingValue) { + case ISO_8859_1_VALUE: + return OSFCodeSetRegistry.ISO_8859_1; + case UTF_16_VALUE: + return OSFCodeSetRegistry.UTF_16; + case UTF_8_VALUE: + return OSFCodeSetRegistry.UTF_8; + case ISO_646_VALUE: + return OSFCodeSetRegistry.ISO_646; + case UCS_2_VALUE: + return OSFCodeSetRegistry.UCS_2; + default: + return null; + } + } +} |