DBFlute: Buri機能で権限処理に対応

@DBFlute, Java, Buri, S2Buri
http://d.hatena.ne.jp/jflute/20090310/1236690449
こちらのDBFluteBuri機能ですが、権限処理に対応しました。
(まだプロトタイプ扱いの機能です)

要はSimpleBuriProcessorじゃなくて
BuriAutoSelectProcessorを使うようにしました。
(dbflute.diconではburiBase.diconをinclude)
すると、UserDataが指定できるようになります。
権限処理が必要か否かはBuri内部で自動で判断してくれます。
不要な場合は単に指定されたuserDataが無視されるだけです。
_buriAutoSelectProcessor.toNextStatusAction
  (processPath, entity, userData, action.code());
但し、BehaviorのメソッドではUserDataは引数で
指定するわけじゃありません。ので以前と変わりません。
UserDataはUserDataProviderインターフェース経由で
Behavior内部で自動で取得するようになります。
というのは「UserDataってセッションから取得」が多いので、
呼び出しプログラムが毎回セッションからUserDataを取得して
指定するのではなく、一括の定義でセッションからの取得した
方が効率が良いからです。
UserDataProviderの実装クラスをburi-user.diconに
定義することでBehaviorはそのクラスからUserDataを
取得するようになります。
public Object provide(BuriDef.BuriProcess process
                    , Entity entity
                    , BuriDef.BuriAction action) {
    // ...セッションから取得
}
もし、DBFluteの共通カラム機能を利用している場合は、
恐らくほとんど場合、そのUserDataとして扱うデータは、
共通カラムで扱うデータと同じになることが多いでしょう。
そこでUserDataProviderのベーシックな実装として、
BasicBuriUserDataProviderクラスが自動生成されます。
ぴったり要件に合うようであればこれをdiconに登録します。
(その場合、BasicParticipantProviderとセットで利用)
public Object provide(BuriDef.BuriProcess process
                    , Entity entity
                    , BuriDef.BuriAction action) {
    IdentityInfo identityInfo = new IdentityInfo();
    identityInfo.setIdString(getAccessUserOnThread());
    return identityInfo;
}
protected String getAccessUserOnThread() {
    return AccessContext.getAccessContextOnThread().getAccessUser();
}
その他、DBFlute用のDataAccessRuleなど
DBFluteBuriを扱うために必要な拡張クラスを
DBFlute自身が自動生成するようにしました。
(Buri関連のdiconは自動生成しないので、それらクラスを
手動で定義する必要があります)

もろもろ詳しく知りたい方は、dbflute-buri-exampleを参考に。