/* * 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; } } }