昔は似たようなツールを作った憶えがある。Oracleのユーザテーブル定義情報を読んで、テーブル列に相当するBeanを作成するもの。
今回、iBATIS,Velocity,Google guiceを使って作り、以前、Jcronを作って置いた場所に入れておいた。
その中の一部であるが、ここで紹介。
import java.util.HashMap;
import java.util.Map;
import com.google.inject.Provider;
/**
* create Map<String,TypeAssign>
*/
public class TypeAssignMapProvider implements Provider<Map<String,TypeAssign>>{
/* (非 Javadoc)
* @see com.google.inject.Provider#get()
*/
public Map<String,TypeAssign> get(){
Map<String,TypeAssign> map = new HashMap<String,TypeAssign>();
TypeAssignEnum[] typeAssignEnums = TypeAssignEnum.values();
for(int i=0;i < typeAssignEnums.length;i++){
try{
map.put(typeAssignEnums[i].name(),typeAssignEnums[i].createTypeAssign());
}catch(InstantiationException e){
throw new RuntimeException(
"◆ at TypeAssignMapProvider#get() InstantiationException "
+"type="+typeAssignEnums[i].name()+" : "+e.getMessage(),e);
}catch(IllegalAccessException e){
throw new RuntimeException(
"◆ at TypeAssignMapProvider#get() IllegalAccessException "
+"type="+typeAssignEnums[i].name()+" : "+e.getMessage(),e);
}
}
return map;
}
}
===============================================
/**
* DB type <-> TypeAssign
*/
public enum TypeAssignEnum{
VARCHAR(StringAssign.class)
,VARCHAR2(StringAssign.class)
,CHAR(StringAssign.class)
,DATE(DateAssign.class)
,TIMESTAMP(DateAssign.class)
,NUMBER(NumberAssign.class)
,INTEGER(NumberAssign.class)
,LONG(NumberAssign.class)
,SHORT(NumberAssign.class)
,BLOB(ByteArrayAssign.class)
,CLOB(CharArrayAssign.class)
,RAW(ByteArrayAssign.class);
//
private Class<? extends TypeAssign> cls;
private TypeAssignEnum(Class<? extends TypeAssign> cls){
this.cls = cls;
}
public TypeAssign createTypeAssign() throws InstantiationException
,IllegalAccessException{
return this.cls.newInstance();
}
}
===============================================
/* (非 Javadoc)
* @see com.google.inject.Module#configure(com.google.inject.Binder)
*/
public void configure(Binder binder){
binder.bind(Map.class).annotatedWith(Names.named("typeassign"))
.toProvider(new TypeAssignMapProvider());
==================
@SuppressWarnings("unchecked")
@Inject @Named("typeassign") private Map typeMap;