入門記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