1 /* 2 * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package com.sun.corba.se.impl.encoding; 26 27 /** 28 * 29 * Information from the OSF code set registry version 1.2g. 30 * 31 * Use the Entry corresponding to the desired code set. 32 * 33 * Consider rename to CodeSetRegistry since OSF is dead. 34 */ 35 public final class OSFCodeSetRegistry 36 { 37 // Numbers from the OSF code set registry version 1.2g. 38 // 39 // Please see the individual Entry definitions for 40 // more details. 41 public static final int ISO_8859_1_VALUE = 0x00010001; 42 public static final int UTF_16_VALUE = 0x00010109; 43 public static final int UTF_8_VALUE = 0x05010001; 44 public static final int UCS_2_VALUE = 0x00010100; 45 public static final int ISO_646_VALUE = 0x00010020; 46 47 private OSFCodeSetRegistry() {} 48 49 /** 50 * An entry in the OSF registry which allows users 51 * to find out the equivalent Java character encoding 52 * name as well as some other facts from the registry. 53 */ 54 public final static class Entry 55 { 56 private String javaName; 57 private int encodingNum; 58 private boolean isFixedWidth; 59 private int maxBytesPerChar; 60 61 private Entry(String javaName, 62 int encodingNum, 63 boolean isFixedWidth, 64 int maxBytesPerChar) { 65 this.javaName = javaName; 66 this.encodingNum = encodingNum; 67 this.isFixedWidth = isFixedWidth; 68 this.maxBytesPerChar = maxBytesPerChar; 69 } 70 71 /** 72 * Returns the Java equivalent name. If the encoding has 73 * an optional byte order marker, this name will map to the 74 * Java encoding that includes the marker. 75 */ 76 public String getName() { 77 return javaName; 78 } 79 80 /** 81 * Get the OSF registry number for this code set. 82 */ 83 public int getNumber() { 84 return encodingNum; 85 } 86 87 /** 88 * Is this a fixed or variable width code set? (In CORBA 89 * terms, "non-byte-oriented" or a "byte-oriented" 90 * code set, respectively) 91 */ 92 public boolean isFixedWidth() { 93 return isFixedWidth; 94 } 95 96 public int getMaxBytesPerChar() { 97 return maxBytesPerChar; 98 } 99 100 /** 101 * First checks reference equality since it's expected 102 * people will use the pre-defined constant Entries. 103 */ 104 public boolean equals(Object obj) { 105 if (this == obj) 106 return true; 107 108 if (!(obj instanceof OSFCodeSetRegistry.Entry)) 109 return false; 110 111 OSFCodeSetRegistry.Entry other 112 = (OSFCodeSetRegistry.Entry)obj; 113 114 return (javaName.equals(other.javaName) && 115 encodingNum == other.encodingNum && 116 isFixedWidth == other.isFixedWidth && 117 maxBytesPerChar == other.maxBytesPerChar); 118 } 119 120 /** 121 * Uses the registry number as the hash code. 122 */ 123 public int hashCode() { 124 return encodingNum; 125 } 126 } 127 128 /** 129 * 8-bit encoding required for GIOP 1.0, and used as the char set 130 * when nothing else is specified. 131 */ 132 public static final Entry ISO_8859_1 133 = new Entry("ISO-8859-1", 134 ISO_8859_1_VALUE, 135 true, 136 1); 137 138 /** 139 * UTF-16 as specified in the OSF registry has an optional 140 * byte order marker. UTF-16BE and UTF-16LE are not in the OSF 141 * registry since it is no longer being developed. When the OMG 142 * switches to the IANA registry, these can be public. Right 143 * now, they're used internally by CodeSetConversion. 144 */ 145 static final Entry UTF_16BE 146 = new Entry("UTF-16BE", 147 -1, 148 true, 149 2); 150 151 static final Entry UTF_16LE 152 = new Entry("UTF-16LE", 153 -2, 154 true, 155 2); 156 157 /** 158 * Fallback wchar code set. 159 * 160 * In the resolution of issue 3405b, UTF-16 defaults to big endian, so 161 * doesn't have to have a byte order marker. Unfortunately, this has to be 162 * a special case for compatibility. 163 */ 164 public static final Entry UTF_16 165 = new Entry("UTF-16", 166 UTF_16_VALUE, 167 true, 168 4); 169 170 /** 171 * Fallback char code set. Also the code set for char data 172 * in encapsulations. However, since CORBA says chars are 173 * only one octet, it is really the same as Latin-1. 174 */ 175 public static final Entry UTF_8 176 = new Entry("UTF-8", 177 UTF_8_VALUE, 178 false, 179 6); 180 181 /* 182 * At least in JDK 1.3, UCS-2 isn't one of the mandatory Java character 183 * encodings. However, our old ORBs require what they call UCS2, even 184 * though they didn't necessarily do the correct encoding of it. 185 * 186 * This is a special case for our legacy ORBs, and put as the last thing 187 * in our conversion list for wchar data. 188 * 189 * If a foreign ORB actually tries to speak UCS2 with us, it probably 190 * won't work! Beware! 191 */ 192 public static final Entry UCS_2 193 = new Entry("UCS-2", 194 UCS_2_VALUE, 195 true, 196 2); 197 198 /** 199 * This is the encoding older JavaSoft ORBs advertised as their 200 * CORBA char code set. Actually, they took the lower byte of 201 * the Java char. This is a 7-bit encoding, so they 202 * were really sending ISO8859-1. 203 */ 204 public static final Entry ISO_646 205 = new Entry("US-ASCII", 206 ISO_646_VALUE, 207 true, 208 1); 209 210 /** 211 * Given an OSF registry value, return the corresponding Entry. 212 * Returns null if an Entry for that value is unavailable. 213 */ 214 public static Entry lookupEntry(int encodingValue) { 215 switch(encodingValue) { 216 case ISO_8859_1_VALUE: 217 return OSFCodeSetRegistry.ISO_8859_1; 218 case UTF_16_VALUE: 219 return OSFCodeSetRegistry.UTF_16; 220 case UTF_8_VALUE: 221 return OSFCodeSetRegistry.UTF_8; 222 case ISO_646_VALUE: 223 return OSFCodeSetRegistry.ISO_646; 224 case UCS_2_VALUE: 225 return OSFCodeSetRegistry.UCS_2; 226 default: 227 return null; 228 } 229 } 230 }