001 /** 002 * ======================================== 003 * JFreeReport : a free Java report library 004 * ======================================== 005 * 006 * Project Info: http://reporting.pentaho.org/ 007 * 008 * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors. 009 * 010 * This library is free software; you can redistribute it and/or modify it under the terms 011 * of the GNU Lesser General Public License as published by the Free Software Foundation; 012 * either version 2.1 of the License, or (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU Lesser General Public License for more details. 017 * 018 * You should have received a copy of the GNU Lesser General Public License along with this 019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, 020 * Boston, MA 02111-1307, USA. 021 * 022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 023 * in the United States and other countries.] 024 * 025 * ------------ 026 * $Id: TypeMapper.java 3525 2007-10-16 11:43:48Z tmorgner $ 027 * ------------ 028 * (C) Copyright 2000-2005, by Object Refinery Limited. 029 * (C) Copyright 2005-2007, by Pentaho Corporation. 030 */ 031 package org.jfree.report.modules.misc.tablemodel; 032 033 import java.sql.Blob; 034 import java.sql.Clob; 035 import java.sql.Ref; 036 import java.sql.ResultSetMetaData; 037 import java.sql.SQLException; 038 import java.sql.Struct; 039 import java.sql.Time; 040 import java.sql.Timestamp; 041 import java.sql.Types; 042 043 import org.jfree.util.ObjectUtilities; 044 045 /** 046 * @author $Author: tmorgner $ 047 * @version $Id: TypeMapper.java 3525 2007-10-16 11:43:48Z tmorgner $ 048 */ 049 public class TypeMapper 050 { 051 private static final Class byteArrayClass = byte[].class; 052 053 private static Class mapSQLType (final int t) 054 { 055 switch (t) 056 { 057 case Types.ARRAY: 058 return Object[].class; 059 case Types.BIGINT: 060 return Long.class; 061 case Types.BINARY: 062 return byteArrayClass; 063 case Types.BIT: 064 return Boolean.class; 065 case Types.BLOB: 066 return Blob.class; 067 case 16: // Types.BOOLEAN was not part of JDK1.2.2 068 return Boolean.class; 069 case Types.CHAR: 070 return String.class; 071 case Types.CLOB: 072 return Clob.class; 073 case 70: // Types.DATALINK was not part of JDK 1.2.2 074 return Object.class; 075 case Types.DATE: 076 return java.sql.Date.class; 077 case Types.DECIMAL: 078 return java.math.BigDecimal.class; 079 case Types.DISTINCT: 080 return Object.class; 081 case Types.DOUBLE: 082 return Double.class; 083 case Types.FLOAT: 084 return Double.class; 085 case Types.INTEGER: 086 return Integer.class; 087 case Types.JAVA_OBJECT: 088 return Object.class; 089 case Types.LONGVARBINARY: 090 return byteArrayClass; 091 case Types.LONGVARCHAR: 092 return String.class; 093 case Types.NULL: 094 return Object.class; 095 case Types.NUMERIC: 096 return java.math.BigDecimal.class; 097 case Types.OTHER: 098 return Object.class; 099 case Types.REAL: 100 return Float.class; 101 case Types.REF: 102 return Ref.class; 103 case Types.SMALLINT: 104 return Short.class; 105 case Types.STRUCT: 106 return Struct.class; 107 case Types.TIME: 108 return Time.class; 109 case Types.TIMESTAMP: 110 return Timestamp.class; 111 case Types.TINYINT: 112 return Byte.class; 113 case Types.VARBINARY: 114 return byteArrayClass; 115 case Types.VARCHAR: 116 return String.class; 117 default: 118 return Object.class; 119 } 120 } 121 122 public static Class[] mapTypes (final ResultSetMetaData rsmd) 123 { 124 final Class[] types; 125 try 126 { 127 types = new Class[rsmd.getColumnCount()]; 128 } 129 catch (SQLException sqle) 130 { 131 return null; 132 } 133 134 final ClassLoader cl = ObjectUtilities.getClassLoader(TypeMapper.class); 135 for (int i = 0; i < types.length; i++) 136 { 137 try 138 { 139 try 140 { 141 final String tn = rsmd.getColumnClassName(i + 1); 142 types[i] = cl.loadClass(tn); 143 } 144 catch (Exception oops) 145 { 146 final int colType = rsmd.getColumnType(i + 1); 147 types[i] = mapSQLType(colType); 148 } 149 } 150 catch (Exception e) 151 { 152 types[i] = Object.class; 153 } 154 } 155 156 return types; 157 } 158 159 private TypeMapper () 160 { 161 } 162 }