/*=========================================================================== * Copyright ( c ) Robert Mayhew 2002 * All Rights Protected * This software is protected by international copyright law. No part of * this software may be reproduced, duplicated, published, distributed, * rented out, transmitted, or communicated to the public by * telecommunication, in any form or by any means except as expressly * permitted, in writing, by Robert Mayhew. *=========================================================================== * $Id: DatabaseColumnType.java,v 1.2 2003/10/13 19:34:39 Administrator Exp $ *=========================================================================== */ package com.diodesoftware.dbmapper; import java.util.TimeZone; import org.apache.log4j.Logger; import java.util.Calendar; import java.util.TimeZone; import java.sql.ResultSet; import java.sql.SQLException; public class DatabaseColumnType { private static final String VARCHAR_TYPE = "VARCHAR"; private static final String DECIMAL_TYPE = "DECIMAL"; private static final String BLOB_TYPE = "BLOB"; private static final String TEXT_TYPE = "TEXT"; private static final String TINY_TEXT_TYPE = "TINYTEXT"; private static final String LONG_TEXT_TYPE ="LONGTEXT"; private static final String DATE12_TYPE = "DATE12"; private static final String DATEEPOCH_TYPE = "DATEEPOCH"; private static final String PASSWORD_TYPE = "PASSWORD"; private static final String JAVA_SQL_INTEGER = "INTEGER"; private static final String JAVA_SQL_LONG = "LONG"; private static final String JAVA_SQL_STRING = "STRING"; private static final String TIMEZONE_TYPE = "TIMEZONE"; private static final String BOOLEAN_TYPE = "BOOLEAN"; private String type = null; private boolean quotesRequired = false; private String sqlType = null; private int size = -1; private String javaSqlType = null; private Class resultClass = null; private DatabaseColumnType(String type, boolean quotesRequired, String sqlType, String javaSqlType, Class resultClass) { this(type, quotesRequired, sqlType, javaSqlType, resultClass, -1); } private DatabaseColumnType(String type, boolean quotesRequired, String sqlType, String javaSqlType, Class resultClass, int size) { this.type = type; this.quotesRequired = quotesRequired; this.sqlType = sqlType; this.javaSqlType = javaSqlType; this.resultClass = resultClass; this.size = size; } public String getType() { return type; } public String getSqlType() { return sqlType; } public boolean isQuotesRequired() { return false; } public int getSize() { return size; } public boolean hasSetSize() { return size != -1; } public Object getSqlValue(Object o) { Object result = null; if (type == DATE12_TYPE) { result = SQLUtil.calendarToLong((Calendar) o); }else if(type == DATEEPOCH_TYPE){ if(o==null){ result = "0"; }else{ result = new Long(((Calendar)o).getTimeInMillis()); } }else if(type == TIMEZONE_TYPE){ TimeZone tz = (TimeZone)o; result = tz.getID(); } else if(type == BOOLEAN_TYPE) { result = SQLUtil.booleanToString((Boolean)o); } else if(type == PASSWORD_TYPE) { if(o != null) result = PasswordEncrypter.encrypt((String)o); else result = ""; } else { if(o != null) { result = o.toString(); } else { result = "null"; } } return result; } public Object getResultSetValue(ResultSet rs, String name) throws SQLException { Object result = null; if (javaSqlType == JAVA_SQL_STRING) { result = rs.getString(name); if(type == BOOLEAN_TYPE) { result = new Boolean(SQLUtil.getBooleanValue((String)result)); } if(type == TIMEZONE_TYPE){ TimeZone tz = TimeZone.getTimeZone(result.toString()); result = tz; } } else if (javaSqlType == JAVA_SQL_INTEGER) { result = new Integer(rs.getInt(name)); }else if(javaSqlType == JAVA_SQL_LONG) { if (type == DATE12_TYPE) { result = SQLUtil.longToCalendar(rs.getLong(name)); } if(type == DATEEPOCH_TYPE){ Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(rs.getLong(name)); result = cal; } } return result; } public Class getResultClass() { return resultClass; } public static final DatabaseColumnType DECIMAL = new DatabaseColumnType(DECIMAL_TYPE, false, "DECIMAL", JAVA_SQL_INTEGER, Integer.TYPE, 10); public static final DatabaseColumnType VARCHAR = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class); public static final DatabaseColumnType BLOB = new DatabaseColumnType(BLOB_TYPE, true, "TEXT", JAVA_SQL_STRING, String.class); public static final DatabaseColumnType LONG_TEXT = new DatabaseColumnType(LONG_TEXT_TYPE, true, "LONGTEXT", JAVA_SQL_STRING, String.class); public static final DatabaseColumnType TEXT = new DatabaseColumnType(TEXT_TYPE, true, "TEXT", JAVA_SQL_STRING, String.class); public static final DatabaseColumnType TINY_TEXT = new DatabaseColumnType(TINY_TEXT_TYPE, true, "TINYTEXT", JAVA_SQL_STRING, String.class); public static final DatabaseColumnType DATE12 = new DatabaseColumnType(DATE12_TYPE, false, "DECIMAL", JAVA_SQL_LONG, Calendar.class, 12); public static final DatabaseColumnType DATEEPOCH = new DatabaseColumnType(DATEEPOCH_TYPE, false, "DECIMAL", JAVA_SQL_LONG, Calendar.class, 14); public static final DatabaseColumnType BOOLEAN = new DatabaseColumnType(BOOLEAN_TYPE, true, "VARCHAR", JAVA_SQL_STRING, Boolean.TYPE, 1); public static final DatabaseColumnType CHAR_20 = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 20); public static final DatabaseColumnType CHAR_100 = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 100); public static final DatabaseColumnType CHAR_200 = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 200); public static final DatabaseColumnType CHAR_40 = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 40); public static final DatabaseColumnType CHAR_3 = new DatabaseColumnType(VARCHAR_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 3); public static final DatabaseColumnType PASSWORD = new DatabaseColumnType(PASSWORD_TYPE, true, "VARCHAR", JAVA_SQL_STRING, String.class, 200); public static final DatabaseColumnType TIMEZONE = new DatabaseColumnType(TIMEZONE_TYPE, true, "VARCHAR", JAVA_SQL_STRING, TimeZone.class, 200); }