FileDocCategorySizeDatePackage
CodeSetComponentInfo.javaAPI DocJava SE 5 API10032Fri Aug 26 14:54:20 BST 2005com.sun.corba.se.impl.encoding

CodeSetComponentInfo

public final class CodeSetComponentInfo extends Object

Fields Summary
private CodeSetComponent
forCharData
private CodeSetComponent
forWCharData
public static final CodeSetComponentInfo
JAVASOFT_DEFAULT_CODESETS
Our default code set scheme is as follows: char data: Native code set: ISO 8859-1 (8-bit) Conversion sets: UTF-8, ISO 646 (7-bit) wchar data: Native code set: UTF-16 Conversion sets: UCS-2 Pre-Merlin/J2EE 1.3 JavaSoft ORBs listed ISO646 for char and UCS-2 for wchar, and provided no conversion sets. They also didn't do correct negotiation or provide the fallback sets. UCS-2 is still in the conversion list for backwards compatibility. The fallbacks are UTF-8 for char and UTF-16 for wchar. In GIOP 1.1, interoperability with wchar is limited to 2 byte fixed width encodings since its wchars aren't preceded by a length. Thus, I've chosen not to include UTF-8 in the conversion set for wchar data.
public static final CodeSetContext
LOCAL_CODE_SETS
Code sets for local cases without a connection.
Constructors Summary
public CodeSetComponentInfo()

        forCharData = CodeSetComponentInfo.JAVASOFT_DEFAULT_CODESETS.forCharData;
        forWCharData = CodeSetComponentInfo.JAVASOFT_DEFAULT_CODESETS.forWCharData;
    
public CodeSetComponentInfo(CodeSetComponent charData, CodeSetComponent wcharData)

        forCharData = charData;
        forWCharData = wcharData;
    
Methods Summary
public static com.sun.corba.se.impl.encoding.CodeSetComponentInfo$CodeSetComponentcreateFromString(java.lang.String str)
Creates a CodeSetComponent from a String which contains a comma delimited list of OSF Code Set Registry numbers. An INITIALIZE exception is thrown if any of the numbers are not known by our registry. Used by corba.ORB init. The first number in the list is taken as the native code set, and the rest is the conversion code set list. The numbers can either be decimal or hex.

        CodeSetComponent charData 
            = new CodeSetComponent(OSFCodeSetRegistry.ISO_8859_1.getNumber(),
                                   new int[] {
                                       OSFCodeSetRegistry.UTF_8.getNumber(),
                                       OSFCodeSetRegistry.ISO_646.getNumber()
                                   });

        CodeSetComponent wcharData
            = new CodeSetComponent(OSFCodeSetRegistry.UTF_16.getNumber(),
                                   new int[]
                                   {
                                       OSFCodeSetRegistry.UCS_2.getNumber()
                                   });

        JAVASOFT_DEFAULT_CODESETS = new CodeSetComponentInfo(charData, wcharData);
    
	ORBUtilSystemException wrapper = ORBUtilSystemException.get(
	    CORBALogDomains.RPC_ENCODING ) ;

        if (str == null || str.length() == 0)
	    throw wrapper.badCodeSetString() ;

        StringTokenizer stok = new StringTokenizer(str, ", ", false);
        int nativeSet = 0;
        int conversionInts[] = null;

        try {

            // The first value is the native code set
            nativeSet = Integer.decode(stok.nextToken()).intValue();

            if (OSFCodeSetRegistry.lookupEntry(nativeSet) == null)
		throw wrapper.unknownNativeCodeset( new Integer(nativeSet) ) ;

            List conversionList = new ArrayList(10);

            // Now process the other values as part of the
            // conversion code set list.
            while (stok.hasMoreTokens()) {
                
                // decode allows us to specify hex, decimal, etc
                Integer value = Integer.decode(stok.nextToken());

                if (OSFCodeSetRegistry.lookupEntry(value.intValue()) == null)
		    throw wrapper.unknownConversionCodeSet( value ) ;

                conversionList.add(value);
            }

            conversionInts = new int[conversionList.size()];

            for (int i = 0; i < conversionInts.length; i++)
                conversionInts[i] = ((Integer)conversionList.get(i)).intValue();

        } catch (NumberFormatException nfe) {
	    throw wrapper.invalidCodeSetNumber( nfe ) ;
        } catch (NoSuchElementException nsee) {
	    throw wrapper.invalidCodeSetString( nsee, str ) ;
        }

        // Otherwise return the CodeSetComponent representing
        // the given values
        return new CodeSetComponent(nativeSet, conversionInts);
    
public booleanequals(java.lang.Object obj)

	if (this == obj)
	    return true ;

	if (!(obj instanceof CodeSetComponentInfo))
	    return false ;

	CodeSetComponentInfo other = (CodeSetComponentInfo)obj ;
	return forCharData.equals( other.forCharData ) &&
	    forWCharData.equals( other.forWCharData ) ;
    
public com.sun.corba.se.impl.encoding.CodeSetComponentInfo$CodeSetComponentgetCharComponent()

        return forCharData;
    
public com.sun.corba.se.impl.encoding.CodeSetComponentInfo$CodeSetComponentgetWCharComponent()

        return forWCharData;
    
public inthashCode()

	return forCharData.hashCode() ^ forWCharData.hashCode() ;
    
public voidread(MarshalInputStream in)

        forCharData = new CodeSetComponent();
	forCharData.read(in);
        forWCharData = new CodeSetComponent();
	forWCharData.read(in);
    
public java.lang.StringtoString()

        StringBuffer sbuf = new StringBuffer("CodeSetComponentInfo(");

        sbuf.append("char_data:");
        sbuf.append(forCharData.toString());
        sbuf.append(" wchar_data:");
        sbuf.append(forWCharData.toString());
	sbuf.append(")");

        return sbuf.toString();
    
public voidwrite(MarshalOutputStream out)

	forCharData.write(out);
	forWCharData.write(out);