| MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > HTML ページの事前解析 | << | >> | 
本節では、 PageMixer フレームワークにおける HTML ページの事前解析に関して説明します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| 表記 | 完全名 | 
|---|---|
| ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext | 
| DataProvider | jp.ne.dti.lares.foozy.pagemixer.mixer.DataProvider | 
| PageParser | jp.ne.dti.lares.foozy.pagemixer.mixer.PageParser | 
| PersistentProducer | jp.ne.dti.lares.foozy.pagemixer.mixer.PersistentProducer | 
| Producer | jp.ne.dti.lares.foozy.pagemixer.mixer.Producer | 
| 表記 | 完全名 | 
|---|---|
| BasketFilter | pagemixer.filter.BasketFilter | 
| Bootstrap | pagemixer.filter.Bootstrap | 
本チュートリアルにおけるこれまでの節では、
サンプルプログラムの実行時における HTML ページの解析には、
PageParser を利用してきました。
しかし、このような実行時解析は、 以下のような問題の原因となり得ます。
あるいは、
Producer がプログラム的に作成される可能性もあります。
PageMixer フレームワークは、
Producer のインスタンスが必要なのであって、
HTML ページが必要なのではありません。
そこで、
直接的な Producer の入手が必要となります。
PersistentProducer の利用PageMixer フレームワークは、
外部ファイルとの間で
Producer のシリアライズ/デシリアライズをするために、
"PersistentProducer" クラスを提供しています。
Producer のシリアライズを行うコードは、
以下のようになります。
try{
    PersistentProducer persistent =
    new PersistentProducer();
    persistent.write(filename, producer);
}
catch(IOException e){
    // SOMETHING TO DO
}
PersistentProducer
によるシリアライズ実は、
"PageParser" を利用することで、
指定した HTML ページから生成された
Producer を直接書き出すことが可能です。
詳細は、PageParser を参照してください。
次に、
Producer のデシリアライズを行うコードは、
以下のようになります。
try{
    PersistentProducer persistent =
    new PersistentProducer();
    Producer producer = persistent.read(filename);
}
catch(IOException e){
    // SOMETHING TO DO
}
catch(ClassNotFoundException e){
    // SOMETHING TO DO
}
PersistentProducer
によるデシリアライズ度々ですが、
実は Bootstrap クラスは、
Producer のデシリアライズを行うユーティリティメソッド
"readinProducer(String)" を提供していますので、
チュートリアル環境でのデシリアライズは、
容易に行うことが出来ます。
以上で必要なものが全て揃いました。
最初に
PageParser#main を起動することで、
指定された HTML ページから生成された
Producer を、
指定されたファイルにシリアライズします。
次に、以下のコードに示す手順により、
ファイルから Producer をデシリアライズし、
Token シーケンスを生成します
(詳細は pagemixer.filter.PreparseSample を参照してください)。
try{
    final Object providerkey =
    "Shop.Basket.BasketEntryProvider";
    final Object dataKey =
    "Shop.Basket.BasketEntry";
    Bootstrap bootstrap = new Bootstrap()
    {
        protected Producer createProducer()
            throws IOException, //
                   ClassNotFoundException //
        {
            return readinProducer(filename);
        }
        protected void prepare(ConsumerContext context)
        {
            List entryList = BasketEntry.getEntryList();
            ListDataProvider provider =
            new ListDataProvider(entryList);
            context.setValue(providerKey, provider);
        }
    };
    BasketFilter filter =
    new BasketFilter(providerKey, dataKey);
    bootstrap.execute(filter);
}
catch(Exception e){
    e.printStackTrace(System.err);
}
入力用のサンプル HTML ファイルは、
配布物中の "src/demo/servlet/war/WEB-INF/page/demosite"
配下にある
"basket.ja.html" です。
"BasketFilter" に関しては、
"フィルタの組み合わせ"
節で説明しました。
| MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > HTML ページの事前解析 | << | >> |