/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program 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 distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.type.descriptor;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.internal.CoreLogging;
import org.hibernate.internal.CoreMessageLogger;
(Badly named) helper for dealing with standard JDBC types as defined by Types
Author: Steve Ebersole
/**
* (Badly named) helper for dealing with standard JDBC types as defined by {@link java.sql.Types}
*
* @author Steve Ebersole
*/
public final class JdbcTypeNameMapper {
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( JdbcTypeNameMapper.class );
private static Map<Integer,String> JDBC_TYPE_MAP = buildJdbcTypeMap();
private static Map<Integer, String> buildJdbcTypeMap() {
HashMap<Integer, String> map = new HashMap<Integer, String>();
Field[] fields = java.sql.Types.class.getFields();
if ( fields == null ) {
throw new HibernateException( "Unexpected problem extracting JDBC type mapping codes from java.sql.Types" );
}
for ( Field field : fields ) {
try {
final int code = field.getInt( null );
String old = map.put( code, field.getName() );
if ( old != null ) {
LOG.JavaSqlTypesMappedSameCodeMultipleTimes( code, old, field.getName() );
}
}
catch ( IllegalAccessException e ) {
throw new HibernateException( "Unable to access JDBC type mapping [" + field.getName() + "]", e );
}
}
return Collections.unmodifiableMap( map );
}
Determine whether the given JDBC type code represents a standard JDBC type ("standard" being those defined on Types
). NOTE : Types.OTHER
is also "filtered out" as being non-standard. Params: - typeCode – The JDBC type code to check
Returns: true
to indicate the type code is a standard type code; false
otherwise.
/**
* Determine whether the given JDBC type code represents a standard JDBC type ("standard" being those defined on
* {@link java.sql.Types}).
*
* NOTE : {@link java.sql.Types#OTHER} is also "filtered out" as being non-standard.
*
* @param typeCode The JDBC type code to check
*
* @return {@code true} to indicate the type code is a standard type code; {@code false} otherwise.
*/
public static boolean isStandardTypeCode(int typeCode) {
return isStandardTypeCode( Integer.valueOf( typeCode ) );
}
Same as call to isStandardTypeCode(int)
See Also:
/**
* Same as call to {@link #isStandardTypeCode(int)}
*
* @see #isStandardTypeCode(int)
*/
public static boolean isStandardTypeCode(Integer typeCode) {
return JDBC_TYPE_MAP.containsKey( typeCode );
}
Get the type name as in the static field names defined on Types
. If a type code is not recognized, it is reported as UNKNOWN(?)
where '?' is replace with the given type code. Intended as useful for logging purposes... Params: - typeCode – The type code to find the name for.
Returns: The type name.
/**
* Get the type name as in the static field names defined on {@link java.sql.Types}. If a type code is not
* recognized, it is reported as {@code UNKNOWN(?)} where '?' is replace with the given type code.
*
* Intended as useful for logging purposes...
*
* @param typeCode The type code to find the name for.
*
* @return The type name.
*/
public static String getTypeName(Integer typeCode) {
String name = JDBC_TYPE_MAP.get( typeCode );
if ( name == null ) {
return "UNKNOWN(" + typeCode + ")";
}
return name;
}
private JdbcTypeNameMapper() {
}
}