package com.ycsoft.daos.config;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.helper.GenericsHelper;
/**
* <p> 加载配置相关信息,包括表名等信息 </p>
* @see com.ycsoft.daos.config.POJO
* @see com.ycsoft.daos.config.Table
* @author hh
*/
@SuppressWarnings("unchecked")
public final class Settings {
private static Map<String , Table> tables = new HashMap<String,Table>() ;
private Settings(){}
/**
* <p>通过<tt>POJO</tt>类的模板获取一个对应的<tt>TableBean</tt>的注释信息</p>
* @param cls 类的模板
*/
public static Table getTable(Class cls)throws JDBCException{
Class entityClass = null ;
try {
entityClass =GenericsHelper.getGenericsClass(cls);
} catch (Exception e) {
throw new JDBCException("未指明的泛型,获取失败!",e);
}
if(!tables.containsKey(entityClass.getName()))
addTable(entityClass);
return tables.get(entityClass.getName());
}
/**
* <p> 通过一个新的类的Class。获取相应的TableBean注释。 </p>
* @param entityClass
*/
private static void addTable(Class entityClass){
try {
Object entity = Class.forName(entityClass.getName()).newInstance();
Annotation[] ann = entity.getClass().getAnnotations();
Table table = null;
boolean b = true ;
for (Annotation annotation : ann) {
if(annotation instanceof POJO){
table = new Table((POJO)annotation);
b = false ;
}
}
//没有配置注释,则采用默认的值
if(b){
table = table == null ? new Table(): table ;
table.setTableName(entityClass.getSimpleName());
}
tables.put(entityClass.getName(), table);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}