読者です 読者をやめる 読者になる 読者になる

Tigerアノテーション(3)

ちょっと間があきましたが、クラスに対するアノテーションの取得方法を見直しました。
前よりちょっときれいになりました。


で、それはおいといて。

S2Daoっぽく、実装クラスに対してBaoInterceptorを仕掛けた場合も考慮してみたいと思っています。

public interface PurePetitionBao {
    public List getWaitApprove(String userData);
    public List getEndApprove(String userData);
    public List getNowPetition(String userData);
    public List getReturning(String userData);
    public void petition(FurnitureItemDto dto, String userData);
    public void approve(FurnitureItemDto dto, String userData);
    public void returning(FurnitureItemDto dto, String userData);
}

という純粋な(アノテーションのない)インタフェースに対して、

@BuriProcess("資産管理.購入申請")
@BuriConverter(@BuriConvertRule(clazz = Long.class, ognl = "FurnitureItemDao.getFurnitureItem(#data)"))
public abstract class TigerPetitionBaoImpl implements PurePetitionBao {

    private static final Log logger = LogFactory
        .getLog(TigerPetitionBaoImpl.class);

    private StandardBuriInvoker invoker;
    public void setStandardBuriInvoker(StandardBuriInvoker invoker) {
        this.invoker = invoker;
    }

    public List getWaitApprove(String userData) {
        logger.debug("IMPLEMENTATION: getDataListFromPathAndUser 資産管理.購入申請.承認待ち");
        return invoker.getDataListFromPathAndUser("資産管理.購入申請.承認待ち", userData);
    }

    @BuriActivity("承認済み")
    @BuriArgs("userData")
    public abstract List getEndApprove(String userData);

    @BuriActivity("申請中")
    @BuriArgs("userData")
    public abstract List getNowPetition(String userData);

    @BuriActivity("差し戻し済み")
    @BuriArgs("userData")
    public abstract List getReturning(String userData);

    @BuriArgs( { "data", "userData" })
    public abstract void petition(FurnitureItemDto dto, String userData);

    @BuriAction("approve")
    @BuriArgs( { "data", "userData" })
    public abstract void approve(FurnitureItemDto dto, String userData);

    @BuriAction("returning")
    @BuriArgs( { "data", "userData" })
    public abstract void returning(FurnitureItemDto dto, String userData);
}

と、BaoInterceptor頼りの抽象メソッドと実装メソッドを混在させた実装クラスが作れるようにしたいわけです。
こうすれば、ちょっと特殊なことをしたいところだけ実装すれば済むので、結構楽になるかなと。


BaoInterceptorImplに対する仕込み(追加3行くらい)は済んでいるのでコミットするだけですが、こんな仕様いかがでしょうか?

テスト対象クラス名がいまいちな気もしますが、Tiger系でのテストケースも一応用意しています。


#Ver.0.3に対する本筋とは無関係なところで地味な改造をしています...。