@SuppressWarnings("deprecation")
private void writeValue( Object value ) throws IOException
{
// the caller has already created an element for us.
TagElement te = stack.peek();
int type = checkValue( value );
switch (type)
{
case TypeCode.NULL:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, NULL_TYPE );
break;
}
case TypeCode.BOOLEAN_FALSE:
case TypeCode.BOOLEAN_TRUE:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, BOOLEAN_TYPE );
te.addCdata( value.toString() );
break;
}
case TypeCode.BYTE:
case TypeCode.SHORT:
case TypeCode.INT:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, INTEGER_TYPE );
te.addCdata( value.toString() );
break;
}
case TypeCode.LONG:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, LONG_TYPE );
te.addCdata( value.toString() );
break;
}
case TypeCode.FLOAT:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, FLOAT_TYPE );
te.addCdata( value.toString() );
break;
}
case TypeCode.DOUBLE:
{
te.setAttr( null, ELEMENT_TYPE_ATTR, DOUBLE_TYPE );
te.addCdata( value.toString() );
break;
}
case TypeCode.BYTES:
{
byte[] b = (byte[]) value;
te.setAttr( null, ELEMENT_TYPE_ATTR, BYTES_TYPE );
te.addCdata( bytes2string( b ) );
break;
}
case TypeCode.EMPTY_STRING:
case TypeCode.STRING:
{
String s = (String) value;
te.setAttr( null, ELEMENT_TYPE_ATTR, STRING_TYPE );
te.addCdata( s );
break;
}
case TypeCode.ARRAY:
te.setAttr( null, ELEMENT_TYPE_ATTR, ARRAY_TYPE );
if (value instanceof ArrayValue)
writeArray( (ArrayValue) value, null );
else
writeArray( toArrayValue( value, null ), null );
break;
case TypeCode.STRUCT:
case TypeCode.CUSTOM:
{
StructValue struct = vf.exportCustomValue( value );
if (struct == null)
throw new UnsupportedOperationException( "unsupported type "+value.getClass() );
te.setAttr( null, ELEMENT_TYPE_ATTR, CUSTOM_TYPE );
writeStruct( struct );
break;
}
default: