入門記6:動かしてみる。(「Bao?んなもんシラネ編」)
前回作ったBaoと全く同じ動きをするモノを、Baoを使わずに作ってみました。
id:makotanからお勧めしてもらったBuriAutoSelectProcessorを使います。
Baoを使った場合のJUnitをDocumentBaoTestとしたので、DocumentProcessorTestというJUnitを作ります。
以前のBaoを使ったサンプルと同じ事をしようとすると。。。こんな感じになります。
public class DocumentProcessorTest extends S2TestCase { private static final String DICON_PATH = "app.dicon"; @Override protected void setUp() throws Exception { super.setUp(); super.include(DICON_PATH); } @SuppressWarnings("unchecked") public void testTx() { BuriAutoSelectProcessor processor = (BuriAutoSelectProcessor) super.getComponent(BuriAutoSelectProcessor.class); DocumentDto doc1 = new DocumentDto("文書A", "文書Aです。"); DocumentDto doc2 = new DocumentDto("文書B", "文書Bです。"); DocumentDto doc3 = new DocumentDto("文書C", "文書Cです。"); // 1st processor.toNextStatus("文書管理パッケージ.文書管理プロセス.登録", doc1, null); System.out.println(processor.getDataListFromPath("文書管理パッケージ.文書管理プロセス.公開中", doc1, DocumentDto.class).size()); List<DocumentDto> list = processor.getDataListFromPath( "文書管理パッケージ.文書管理プロセス.公開中", doc1, DocumentDto.class); for (DocumentDto dto: list) { System.out.println(dto); } assertEquals(1, processor.getDataListFromPath( "文書管理パッケージ.文書管理プロセス.公開中", doc1, DocumentDto.class).size()); // 2nd processor.toNextStatus("文書管理パッケージ.文書管理プロセス.登録", doc2, null); processor.toNextStatus("文書管理パッケージ.文書管理プロセス.登録", doc3, null); assertEquals(3, processor.getDataListFromPath( "文書管理パッケージ.文書管理プロセス.公開中", doc2, DocumentDto.class).size()); // 3rd processor.toNextStatus("文書管理パッケージ.文書管理プロセス.公開中", doc1, null); assertEquals(2, processor.getDataListFromPath( "文書管理パッケージ.文書管理プロセス.公開中", doc1, DocumentDto.class).size()); // 4th processor.toNextStatus("文書管理パッケージ.文書管理プロセス.公開中", doc2, null); processor.toNextStatus("文書管理パッケージ.文書管理プロセス.公開中", doc3, null); assertEquals(0, processor.getDataListFromPath( "文書管理パッケージ.文書管理プロセス.公開中", doc1, DocumentDto.class).size()); } }
Buriは高レイヤのインターフェイスとしてBaoを提供している訳で、その裏では上記のような事をしているんですねぇ。
ちなみに、このBuriAutoSelectProcessorのどのへんがAutoSelectなのか。
BuriのProsessorにはorg.escafe.buri.engine.processor.SimpleBuriProcessorとorg.escafe.buri.engine.processor.StandardBuriProcessorの2つがありまして、権限管理をするかしないかによってこのProsessorを呼び分けているようなのですが、それを適宜判断してくれるのでAutoSelectなんですね。ナールホド
ちなみに、指定する状態と結果として望む状態のズレがめんどくさいな、と感じるようであればきっとBaoを使った方が良いんでしょうね。
(追記)
一部の誤ったコードを訂正@ぶり祭w