Grizzly はデータストリームの変換フレームワークです。 たとえば、Wiki 形式のテキストデータを HTML 形式に変換したり、JPEG の画像データを GIF の画像データに変換するなどを共通の手段により実現するためのフレームワークです。
Grizzly により提供しているフレームワークは、Spring や Seasar2 などの DI と組み合わせて利用することにより、変換方法を各 DI の設定ファイルに記述することができ、利用する際に利用しているソースコード上に変換内容を記述する必要なくなります。
Grizzly の変換フレームワークは、grizzly-framework-x.y.jar になります。 このフレームワークは、変換内容を保持する GrizzlyPipeline と、変換するためのストリームデータを保持する StreamStorage により構成されています。
実際の変換については、grizzly-*-x.y.jar になります。 たとえば、汎用的な変換は grizzly-generic-x.y.jar にまとめてあります。 grizzly-generic-x.y.jar では、HTML をエスケープするなどの汎用的なものが含まれています。
実際にテキストデータを HTML エスケープする変換を Seasar2 を用いて、実装する例を示します。 まず、Seasar2 の dicon ファイルに以下の記述をします。
<components> ... <component class="jp.sf.grizzly.pipeline.GrizzlyPipeline"> <arg>"EscapeHtmlConverter"</arg> <arg>{EscapeHtmlValve}</arg> </component> <component name="EscapeHtmlValve" class="jp.sf.grizzly.pipeline.valve.impl.EscapeHtmlValve" /> ... </components>
GrizzlyPipeline の初めの引数は、パイプラインの名前になります。二番目の引数は、変換バルブのリストになります。 ここでは、EscapeHtmlValve だけしか与えていませんが、複数指定すると、指定された順に変換を実行します。 次に、ご利用のアプリケーションで Grizzly フレームワークの利用方法を示します。 ご利用のコード上では以下のように利用できます。
... SingletonS2ContainerFactory.init(); S2Container container = SingletonS2ContainerFactory.getContainer(); GrizzlyPipeline pipeline = (GrizzlyPipeline) container .getComponent(GrizzlyPipeline.class); StringBuffer buffer = new StringBuffer(); try { // StreamStorage を作成して、変換したいストリームを与える StreamStorage storage = new FileStreamStorageImpl( new FileInputStream("hoge.txt"), "UTF-8"); // invoke の実行で変換が実行されます pipeline.invoke(storage); BufferedReader r = null; try { // storage.getResultInputStream() で変換後のストリームが取得できます r = new BufferedReader(new InputStreamReader(storage .getResultInputStream(), storage.getEncoding())); String l = null; while ((l = r.readLine()) != null) { buffer.append(l); buffer.append("\n"); } } catch (UnsupportedEncodingException e) { log.warn("Unsupported Encoding. ", e); } catch (StreamStorageException e) { log.warn("Stream Storage Exception. ", e); } catch (IOException e) { log.error("I/O Exception. ", e); } finally { if (r != null) { try { r.close(); } catch (IOException e) { } } } // StorageStream を破棄します storage.destroy(); } ...
あとは、ビルドして、grizzly-framework-x.y.jar および grizzly-generic-x.y.jar をクラスパスに追加して、実行すれば変換が実行されます。