/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.translator; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import org.teiid.core.types.BinaryType; import org.teiid.core.types.BlobType; import org.teiid.core.types.ClobType; import org.teiid.core.types.DataTypeManager; import org.teiid.core.types.GeometryType; import org.teiid.core.types.JDBCSQLTypeInfo; import org.teiid.core.types.NullType; import org.teiid.core.types.XMLType; import org.teiid.core.types.basic.ObjectToAnyTransform; import org.teiid.core.util.TimestampWithTimezone; /** */ public class TypeFacility { public static final class RUNTIME_CODES { public static final int STRING = DataTypeManager.DefaultTypeCodes.STRING; public static final int CHAR = DataTypeManager.DefaultTypeCodes.CHAR; public static final int BOOLEAN = DataTypeManager.DefaultTypeCodes.BOOLEAN; public static final int BYTE = DataTypeManager.DefaultTypeCodes.BYTE; public static final int SHORT = DataTypeManager.DefaultTypeCodes.SHORT; public static final int INTEGER = DataTypeManager.DefaultTypeCodes.INTEGER; public static final int LONG = DataTypeManager.DefaultTypeCodes.LONG; public static final int BIG_INTEGER = DataTypeManager.DefaultTypeCodes.BIGINTEGER; public static final int FLOAT = DataTypeManager.DefaultTypeCodes.FLOAT; public static final int DOUBLE = DataTypeManager.DefaultTypeCodes.DOUBLE; public static final int BIG_DECIMAL = DataTypeManager.DefaultTypeCodes.BIGDECIMAL; public static final int DATE = DataTypeManager.DefaultTypeCodes.DATE; public static final int TIME = DataTypeManager.DefaultTypeCodes.TIME; public static final int TIMESTAMP = DataTypeManager.DefaultTypeCodes.TIMESTAMP; public static final int OBJECT = DataTypeManager.DefaultTypeCodes.OBJECT; public static final int BLOB = DataTypeManager.DefaultTypeCodes.BLOB; public static final int CLOB = DataTypeManager.DefaultTypeCodes.CLOB; public static final int XML = DataTypeManager.DefaultTypeCodes.XML; public static final int NULL = DataTypeManager.DefaultTypeCodes.NULL; public static final int VARBINARY = DataTypeManager.DefaultTypeCodes.VARBINARY; public static final int GEOMETRY = DataTypeManager.DefaultTypeCodes.GEOMETRY; } public interface RUNTIME_TYPES { public static final Class<String> STRING = DataTypeManager.DefaultDataClasses.STRING; public static final Class<Boolean> BOOLEAN = DataTypeManager.DefaultDataClasses.BOOLEAN; public static final Class<Byte> BYTE = DataTypeManager.DefaultDataClasses.BYTE; public static final Class<Short> SHORT = DataTypeManager.DefaultDataClasses.SHORT; public static final Class<Character> CHAR = DataTypeManager.DefaultDataClasses.CHAR; public static final Class<Integer> INTEGER = DataTypeManager.DefaultDataClasses.INTEGER; public static final Class<Long> LONG = DataTypeManager.DefaultDataClasses.LONG; public static final Class<BigInteger> BIG_INTEGER = DataTypeManager.DefaultDataClasses.BIG_INTEGER; public static final Class<Float> FLOAT = DataTypeManager.DefaultDataClasses.FLOAT; public static final Class<Double> DOUBLE = DataTypeManager.DefaultDataClasses.DOUBLE; public static final Class<? extends BigDecimal> BIG_DECIMAL = DataTypeManager.DefaultDataClasses.BIG_DECIMAL; public static final Class<java.sql.Date> DATE = DataTypeManager.DefaultDataClasses.DATE; public static final Class<Time> TIME = DataTypeManager.DefaultDataClasses.TIME; public static final Class<Timestamp> TIMESTAMP = DataTypeManager.DefaultDataClasses.TIMESTAMP; public static final Class<Object> OBJECT = DataTypeManager.DefaultDataClasses.OBJECT; public static final Class<BlobType> BLOB = DataTypeManager.DefaultDataClasses.BLOB; public static final Class<ClobType> CLOB = DataTypeManager.DefaultDataClasses.CLOB; public static final Class<XMLType> XML = DataTypeManager.DefaultDataClasses.XML; public static final Class<NullType> NULL = DataTypeManager.DefaultDataClasses.NULL; public static final Class<BinaryType> VARBINARY = DataTypeManager.DefaultDataClasses.VARBINARY; public static final Class<GeometryType> GEOMETRY = DataTypeManager.DefaultDataClasses.GEOMETRY; } public static final class RUNTIME_NAMES { public static final String STRING = DataTypeManager.DefaultDataTypes.STRING; public static final String BOOLEAN = DataTypeManager.DefaultDataTypes.BOOLEAN; public static final String BYTE = DataTypeManager.DefaultDataTypes.BYTE; public static final String SHORT = DataTypeManager.DefaultDataTypes.SHORT; public static final String CHAR = DataTypeManager.DefaultDataTypes.CHAR; public static final String INTEGER = DataTypeManager.DefaultDataTypes.INTEGER; public static final String LONG = DataTypeManager.DefaultDataTypes.LONG; public static final String BIG_INTEGER = DataTypeManager.DefaultDataTypes.BIG_INTEGER; public static final String FLOAT = DataTypeManager.DefaultDataTypes.FLOAT; public static final String DOUBLE = DataTypeManager.DefaultDataTypes.DOUBLE; public static final String BIG_DECIMAL = DataTypeManager.DefaultDataTypes.BIG_DECIMAL; public static final String DATE = DataTypeManager.DefaultDataTypes.DATE; public static final String TIME = DataTypeManager.DefaultDataTypes.TIME; public static final String TIMESTAMP = DataTypeManager.DefaultDataTypes.TIMESTAMP; public static final String OBJECT = DataTypeManager.DefaultDataTypes.OBJECT; public static final String NULL = DataTypeManager.DefaultDataTypes.NULL; public static final String BLOB = DataTypeManager.DefaultDataTypes.BLOB; public static final String CLOB = DataTypeManager.DefaultDataTypes.CLOB; public static final String XML = DataTypeManager.DefaultDataTypes.XML; public static final String VARBINARY = DataTypeManager.DefaultDataTypes.VARBINARY; public static final String GEOMETRY = DataTypeManager.DefaultDataTypes.GEOMETRY; } /** * Get the Class constant for the given String runtime type name * <br/>IMPORTANT: only considered the default runtime types */ public static Class<?> getDataTypeClass(String type) { return DataTypeManager.getDataTypeClass(type); } /** * Get the String constant for the given runtime type class */ public static String getDataTypeName(Class<?> type) { return DataTypeManager.getDataTypeName(type); } /** * Get the closest runtime type for the given class */ public static Class<?> getRuntimeType(Class<?> type) { if (type.isPrimitive()) { return convertPrimitiveToObject(type); } return DataTypeManager.getRuntimeType(type); } /** * Get the SQL type for the given runtime type Class constant * @param type * @return */ public static final int getSQLTypeFromRuntimeType(Class<?> type) { return JDBCSQLTypeInfo.getSQLTypeFromRuntimeType(type); } /** * Get the runtime type name for the given SQL type * @param sqlType * @return */ public static final String getDataTypeNameFromSQLType(int sqlType) { if (sqlType == Types.ARRAY) { return RUNTIME_NAMES.OBJECT; } return JDBCSQLTypeInfo.getTypeName(sqlType); } /** * Convert the given value to the closest runtime type see {@link RUNTIME_TYPES} * @param value * @return */ public Object convertToRuntimeType(Object value) { return DataTypeManager.convertToRuntimeType(value, true); } /** * Convert the given date to a target type, optionally adjusting its display * for a given target Calendar. * @param date * @param initial * @param target * @param targetType * @return */ public Object convertDate(Date date, TimeZone initial, Calendar target, Class<?> targetType) { return TimestampWithTimezone.create(date, initial, target, targetType); } /** * Convert a primitive class to the corresponding object class * @param clazz * @return */ public static Class<?> convertPrimitiveToObject(Class<?> clazz) { return ObjectToAnyTransform.convertPrimitiveToObject(clazz); } }