* and the rest is the conversion code set list.
*
* The numbers can either be decimal or hex.
*/
public static CodeSetComponent createFromString(String str) {
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);