自動生成

S2DaoMakerとDtoMaker(自作)を統合して、DB設計書と画面項目書(両方Excel)から以下のものを生成するように。

  • Daoインターフェース
  • Entityクラス
  • Dtoクラス(画面入力・画面出力)
  • validation.xml(WebWork2用)
  • mapping.xml(dozer用)
  • Dxoインターフェース

Dxoには以下のInterceptorを適用(今のところはDxoの実装クラスは未考慮)

public class DxoInterceptor extends AbstractInterceptor {
  private MapperIF mapper;
  public Object invoke(MethodInvocation methodinvocation) throws Throwable {
    if (methodinvocation.getMethod().getName().startsWith("mapping")) {
      if (methodinvocation.getArguments().length == 2) {
        mapper.map(methodinvocation.getArguments()[0], methodinvocation.getArguments()[1]);
      }
    }
    return null;
  }
  public void setMapper(MapperIF mapper) {
    this.mapper = mapper;
  }
}

Dxoはこんな感じ

public interface CompanyDtoDxo {
  public void mapping(CompanyDto dto, Company entity);
  public void mapping(Company entity, CompanyDto dto);
}

dxo.dicon

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components23.dtd">
<components namespace="dxo">
  <include path="aop.dicon"/>
  <component name="mapper" class="net.sf.dozer.util.mapping.DozerBeanMapper" instance="singleton" autoBinding="none">
    <property name="mappingFiles">{"mapping.xml"}</property>
  </component>
  <component name="interceptor" class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
    <initMethod name="add">
      <arg><component class="DxoInterceptor" /></arg>
    </initMethod>
  </component>
  <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
    <property name="instanceDef">@org.seasar.framework.container.deployer.InstanceDefFactory@SINGLETON</property>
    <property name="autoNaming">
      <component class="org.seasar.framework.container.autoregister.DefaultAutoNaming" />
    </property>
    <initMethod name="addClassPattern">
      <arg>"test.dxo"</arg>
      <arg>".*Dxo"</arg>
    </initMethod>
  </component>
  <component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
    <property name="interceptor">interceptor</property>
    <initMethod name="addClassPattern">
      <arg>"test.dxo"</arg>
      <arg>".*Dxo"</arg>
    </initMethod>
  </component>
</components>