final int size = (int) CanonUtils.getPropertySize( ref, property, param );
final EdsDataType type = CanonUtils.getPropertyType( ref, property, param );
final Memory memory = new Memory( size > 0 ? size : 1 );
final EdsError err = CanonUtils.getPropertyData( ref, property, param, size, memory );
if ( err == EdsError.EDS_ERR_OK ) {
switch ( type ) {
case kEdsDataType_Unknown: //Unknown
return null;
case kEdsDataType_String: //EdsChar[]
return (T) memory.getString( 0 );
case kEdsDataType_Int8: //EdsInt8
case kEdsDataType_UInt8: //EdsUInt8
return (T) Byte.valueOf( memory.getByte( 0 ) );
case kEdsDataType_Int16: //EdsInt16
case kEdsDataType_UInt16: //EdsUInt16
return (T) Short.valueOf( memory.getShort( 0 ) );
case kEdsDataType_Int32: //EdsInt32
case kEdsDataType_UInt32: //EdsUInt32
return (T) Long.valueOf( memory.getNativeLong( 0 ).longValue() );
case kEdsDataType_Int64: //EdsInt64
case kEdsDataType_UInt64: //EdsUInt64
return (T) Long.valueOf( memory.getLong( 0 ) );
case kEdsDataType_Float: //EdsFloat
return (T) Float.valueOf( memory.getFloat( 0 ) );
case kEdsDataType_Double: //EdsDouble
return (T) Double.valueOf( memory.getDouble( 0 ) );
case kEdsDataType_ByteBlock: //Byte Block // TODO: According to API, is either EdsInt8[] or EdsUInt32[], but perhaps former is a typo or an old value
return (T) memory.getIntArray( 0, size / 4 );
case kEdsDataType_Rational: //EdsRational
return (T) new EdsRational( memory );
case kEdsDataType_Point: //EdsPoint
return (T) new EdsPoint( memory );
case kEdsDataType_Rect: //EdsRect
return (T) new EdsRect( memory );
case kEdsDataType_Time: //EdsTime
return (T) new EdsTime( memory );
case kEdsDataType_FocusInfo: //EdsFocusInfo
return (T) new EdsFocusInfo( memory );
case kEdsDataType_PictureStyleDesc: //EdsPictureStyleDesc
return (T) new EdsPictureStyleDesc( memory );
case kEdsDataType_Int8_Array: //EdsInt8[]
case kEdsDataType_UInt8_Array: //EdsUInt8[]
return (T) memory.getByteArray( 0, size );
case kEdsDataType_Int16_Array: //EdsInt16[]
case kEdsDataType_UInt16_Array: //EdsUInt16[]
return (T) memory.getShortArray( 0, size / 2 );
case kEdsDataType_Int32_Array: //EdsInt32[]
case kEdsDataType_UInt32_Array: //EdsUInt32[]
return (T) memory.getIntArray( 0, size / 4 );
case kEdsDataType_Bool: //EdsBool // TODO: implement
case kEdsDataType_Bool_Array: //EdsBool[] // TODO: implement
case kEdsDataType_Rational_Array: //EdsRational[] // TODO: implement
default:
throw new IllegalStateException( type.description() + " (" +
type.name() +
") is not currently supported by GetPropertyCommand" );
}
}
throw new IllegalArgumentException( "An error occurred while getting " +
property.name() + " data (error " +
err.value() + ": " + err.name() +
" - " + err.description() + ")" );
}