/*******************************************************************************
* Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
******************************************************************************/
package se.unlogic.standardutils.dao;
import se.unlogic.standardutils.dao.querys.PreparedStatementQuery;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.util.HashMap;
/**
* This class provides a static map containing mappings from classes to their corresponding set methods in the {@link PreparedStatement} interface.<p>
*
* {@link Integer}, {@link Long}, {@link Double}, {@link Float}, {@link Boolean} and {@link Byte} types are mapped to the setObject method in order to allow null values.<p>
*
* All other types are mapped to their default set method in the {@link PreparedStatement} interface.
*
* @author Robert "Unlogic" Olofsson (unlogic@unlogic.se)
*
*/
public class PreparedStatementQueryMethods {
protected static final HashMap<Class<?>,Method> QUERY_METHOD_MAP = new HashMap<Class<?>, Method>();
protected static final Method SET_OBJECT_METHOD;
static{
try {
//Special methods mappings
QUERY_METHOD_MAP.put(Integer.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
QUERY_METHOD_MAP.put(Long.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
QUERY_METHOD_MAP.put(Double.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
QUERY_METHOD_MAP.put(Float.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
QUERY_METHOD_MAP.put(Boolean.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
QUERY_METHOD_MAP.put(Byte.class, PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class));
Method[] methods = PreparedStatementQuery.class.getMethods();
for(Method method : methods){
if(method.getName().startsWith("set") && !method.getName().equals("setObject") && method.getParameterTypes().length == 2 && method.getParameterTypes()[0] == int.class){
//System.out.println("Adding method " + method);
QUERY_METHOD_MAP.put(method.getParameterTypes()[1], method);
}
}
SET_OBJECT_METHOD = PreparedStatementQuery.class.getMethod("setObject", int.class,Object.class);
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
public static Method getQueryMethod(Class<?> clazz) {
return QUERY_METHOD_MAP.get(clazz);
}
public static Method getObjectQueryMethod(){
return SET_OBJECT_METHOD;
}
}