package org.csstudio.dal.simple; import java.util.BitSet; import org.csstudio.dal.DoubleProperty; import org.csstudio.dal.DoubleSeqProperty; import org.csstudio.dal.DynamicValueProperty; import org.csstudio.dal.EnumProperty; import org.csstudio.dal.LongProperty; import org.csstudio.dal.LongSeqProperty; import org.csstudio.dal.ObjectProperty; import org.csstudio.dal.ObjectSeqProperty; import org.csstudio.dal.PatternProperty; import org.csstudio.dal.StringProperty; import org.csstudio.dal.StringSeqProperty; /** * Enumeration for data types supported by DAL and this broker. * * @author ikriznar * */ public enum DataFlavor { OBJECT(Object.class,ObjectProperty.class), OBJECTS(Object[].class,ObjectSeqProperty.class), DOUBLE(Double.class,DoubleProperty.class), DOUBLES(double[].class,DoubleSeqProperty.class), LONG(Long.class,LongProperty.class), LONGS(long[].class,LongSeqProperty.class), STRING(String.class,StringProperty.class), STRINGS(String[].class,StringSeqProperty.class), PATTERN(BitSet.class,PatternProperty.class), ENUM(Long.class,EnumProperty.class), ANYDATA(AnyData.class,null); private Class<? extends DynamicValueProperty<?>> dalType; private Class<?> javaType; private DataFlavor(Class<?> javaType, Class<? extends DynamicValueProperty<?>> dalType) { this.javaType=javaType; this.dalType=dalType; } public Class<? extends DynamicValueProperty<?>> getDALType() { return dalType; } public Class<?> getJavaType() { return javaType; } public static DataFlavor fromJavaType(Class<?> javaType) { Class<?> c= toDALDataType(javaType); DataFlavor[] d= DataFlavor.values(); for (int i = 0; i < d.length; i++) { if (d[i].getJavaType() == c) { return d[i]; } } return null; } /** * Converts Java data type to one of DAL supported Java data types, * such as <code>Double</code>, <code>Long</code>, <code>String</code> and similar. * @param type Java data type * @return DAL supported Java data type */ public static Class<?> toDALDataType(Class<?> type) { if (type==null) { return null; } if (type == Double.class || type == Float.class || type == double.class || type == float.class) { return Double.class; } if (type == Double[].class || type == Float[].class || type == double[].class || type == float[].class) { return double[].class; } if (type == Long.class || type == Integer.class || type == Short.class || type == long.class || type == int.class || type == short.class || type == char.class) { return Long.class; } if (type == Long[].class || type == Integer[].class || type == Short[].class || type == long[].class || type == int[].class || type == short[].class || type == char[].class) { return long[].class; } if (type == String.class || type == String[].class || type == Object.class || type == Object[].class || type == BitSet.class || type == AnyData.class) { return type; } return null; } public static Class<? extends DynamicValueProperty<?>> toDALPropertyType(Class<?> javaType) { Class<?> t= toDALDataType(javaType); if (t == Double.class) { return DoubleProperty.class; } if (t == double[].class) { return DoubleSeqProperty.class; } if (t == Long.class) { return LongProperty.class; } if (t == long[].class) { return LongSeqProperty.class; } if (t == String.class) { return LongProperty.class; } if (t == String[].class) { return LongSeqProperty.class; } if (t == Object.class) { return ObjectProperty.class; } if (t == Object[].class) { return ObjectSeqProperty.class; } if (t == Object.class) { return ObjectProperty.class; } if (t == BitSet.class) { return PatternProperty.class; } return null; } }