がらくた?

昔は似たようなツールを作った憶えがある。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;