[Seasar-user:20765] Re: [Doma-Gen]useDelegateについて

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2011年 5月 19日 (木) 22:29:54 JST


中村(taedium)です。

> 固定で埋め込んで問題ないのですが、条件分岐をテンプレートにいれて
> 作る・作らないの判定を入れることができればと思ったしだいです。

Doma-Genが提供するAntタスクのGenクラスを
継承して新しいタスクを作成すれば、
比較的簡単にテンプレートから任意のデータにアクセスできます。

たとえば、今回の例に合わせると、次のようなコードを作成する
ことになります。

public class MyGen extends Gen {
    @Override
    protected void generateDao(DaoDesc daoDesc) {
        // オリジナルを自前のオブジェクトでラップ
        super.generateDao(new MyDaoDesc(daoDesc));
    }

    public class MyDaoDesc extends DaoDesc {
        private DaoDesc daoDesc;
        public MyDaoDesc(DaoDesc daoDesc) {
            this.daoDesc = daoDesc;
        }
        // テンプレートからアクセスしたいデータをアクセサで公開
        public boolean isUseDelegate() {
            return daoConfig.isUseDelegate();
        }
        // 親のDaoDescのメソッドはすべてオーバーライドして
        // daoDescインスタンスフィールドに委譲する
        ...
    }
}

そして、build.xml の taskdef 要素ではGenクラスの代わりに独自に作成した
MyGenクラスを登録するようにします。

 <taskdef name="gen" 
   classname="example.MyGen" 
   classpathref="classpath" 
   loaderref="genLoaderref" />

これでDaoのテンプレートから次の記述が有効になります。

  <#if useDelegate></#if>

Genクラスはいろんなところがオーバーライドできるようになっているので
好きにカスタマイズできます。お試しください。

-- 
Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>




Seasar-user メーリングリストの案内