(57)【特許請求の範囲】
【請求項１】
少なくとも画像データの入力に関する処理を実行する第一のソフトウェア部品と画像データの出力に関する処理を実行する第二のソフトウェア部品との実行順に応じた接続によりアプリケーションが構築される画像形成装置であって、
一つのアプリケーションに係る前記ソフトウェア部品の接続関係において並列的な関係にある複数の前記第二のソフトウェア部品の実行順を示す出力順情報に基づいて、当該アプリケーションの前記第一のソフトウェア部品が入力させた画像データに関する処理について、当該複数の前記第二のソフトウェア部品の実行順を制御する出力順制御手段を有することを特徴とする画像形成装置。
【請求項２】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている前記第二のソフトウェア部品とに対して処理の実行の開始を指示し、
前記出力順制御手段は、処理が完了した前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該第二のソフトウェア部品の次に実行される前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする請求項１記載の画像形成装置。
【請求項３】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている複数の前記第二のソフトウェア部品とに対して処理の実行の開始を指示することを特徴とする請求項２記載の画像形成装置。
【請求項４】
少なくとも画像データの入力に関する処理を実行する第一のソフトウェア部品と画像データの出力に関する処理を実行する第二のソフトウェア部品との実行順に応じた接続によりアプリケーションが構築される画像形成装置が実行するアプリケーション制御方法であって、
一つのアプリケーションに係る前記ソフトウェア部品の接続関係において並列的な関係にある複数の前記第二のソフトウェア部品の実行順を示す出力順情報に基づいて、当該アプリケーションの前記第一のソフトウェア部品が入力させた画像データに関する処理について、当該複数の前記第二のソフトウェア部品の実行順を制御する出力順制御手順を有することを特徴とするアプリケーション制御方法。
【請求項５】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている前記第二のソフトウェア部品とに対して処理の実行の開始を指示し、
前記出力順制御手順は、処理が完了した前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該第二のソフトウェア部品の次に実行される前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする請求項４記載のアプリケーション制御方法。
【請求項６】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている複数の前記第二のソフトウェア部品とに対して処理の実行の開始を指示することを特徴とする請求項５記載のアプリケーション制御方法。
【請求項７】
少なくとも画像データの入力に関する処理を実行する第一のソフトウェア部品と画像データの出力に関する処理を実行する第二のソフトウェア部品との実行順に応じた接続によりアプリケーションが構築される画像形成装置に、
一つのアプリケーションに係る前記ソフトウェア部品の接続関係において並列的な関係にある複数の前記第二のソフトウェア部品の実行順を示す出力順情報に基づいて、当該アプリケーションの前記第一のソフトウェア部品が入力させた画像データに関する処理について、当該複数の前記第二のソフトウェア部品の実行順を制御する出力順制御手順を実行させるためのアプリケーション制御プログラム。
【請求項８】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている前記第二のソフトウェア部品とに対して処理の実行の開始を指示し、
前記出力順制御手順は、処理が完了した前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該第二のソフトウェア部品の次に実行される前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする請求項７記載のアプリケーション制御プログラム。
【請求項９】
前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている複数の前記第二のソフトウェア部品とに対して処理の実行の開始を指示することを特徴とする請求項８記載のアプリケーション制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置、アプリケーション制御方法、及びアプリケーション制御プログラムに関する。
【背景技術】
【０００２】
近年におけるプリンタ、コピー機、スキャナ、ファクシミリ、又はこれらの機能を一台の筐体で実現する複合機等の画像形成装置では、メモリ等の制限は厳しいものの、汎用的なコンピュータと同様にＣＰＵを備え、各機能はアプリケーションの制御によって実現されるようになっている。
【０００３】
例えば、特許文献１に記載された画像形成装置では、各アプリケーションから共通的に利用される機能をプラットフォームとして備えており、当該プラットフォームのＡＰＩを利用してアプリケーションを実装することができる。かかる画像形成装置によれば、共通的に利用される機能がプラットフォームとして備えられていることにより、アプリケーションごとに重複した機能の実装が回避され、アプリケーション全体の開発効率を向上させることができる。
【特許文献１】特許第３６７９３４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、一般的に、共通的に利用されるＡＰＩを備えたプラットフォームについては、当該プラットフォームによって提供される機能又はインタフェースの粒度が適切に設計されていないと、アプリケーションの開発効率の向上が期待以上に図れない場合がある。
【０００５】
例えば、当該粒度が小さ過ぎると、単純なサービスを提供するアプリケーションであるにもかかわらず、多くのＡＰＩの呼び出しが必要とされ、そのソースコードは複雑なものとなってしまう。
【０００６】
一方、当該粒度が大き過ぎると、或るインタフェースによって提供されている機能の一部について変更を加えたサービスを提供するアプリケーションを実装したい場合、当該プラットフォーム内を修正しなければならず、開発工数の増加を招いてしまいかねない。特に、プラットフォーム内における各モジュールの依存関係が強い場合は、プラットフォームに新規機能を追加するだけでなく、既存部分の修正も必要とされる場合があり、事態はより複雑となる。
【０００７】
また、既存のアプリケーションによって提供されているサービスの一部（例えば、画像の入力処理）を変更したアプリケーションを実装したい場合、当該一部以外の部分については既存のアプリケーションを呼び出すといったようなことは出来ない。したがって、改めてソースコードを記述して新たなアプリケーションを実装しなければならない。
【０００８】
本発明は、上記の点に鑑みてなされたものであって、機能のカスタマイズ又は拡張等を簡便化させることのできる画像形成装置、アプリケーション制御方法、及びアプリケーション制御プログラムの提供を目的とする。
【課題を解決するための手段】
【０００９】
そこで上記課題を解決するため、本発明は、少なくとも画像データの入力に関する処理を実行する第一のソフトウェア部品と画像データの出力に関する処理を実行する第二のソフトウェア部品との実行順に応じた接続によりアプリケーションが構築される画像形成装置であって、前記ソフトウェア部品の接続関係において並列的な関係にある複数の前記第二のソフトウェア部品の実行順を示す出力順情報に基づいて複数の前記第二のソフトウェア部品の実行順を制御する出力順制御手段を有することを特徴とする。
【００１０】
また、本発明は、前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている前記第二のソフトウェア部品とに対して処理の実行の開始を指示し、前記出力順制御手段は、処理が完了した前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該第二のソフトウェア部品の次に実行される前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする。
【００１１】
また、本発明は、前記アプリケーションは、当該アプリケーションの実行の開始に応じ、前記第二のソフトウェア部品以外のソフトウェア部品と前記出力順情報が示す実行順において最初に実行対象とされている複数の前記第二のソフトウェア部品とに対して処理の実行の開始を指示することを特徴とする。
【００１２】
また、本発明は、前記出力順制御手段は、処理が完了した複数の前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該複数の第二のソフトウェア部品の次に実行される前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする。
【００１３】
また、本発明は、前記出力順制御手段は、処理が完了した前記第二のソフトウェア部品からの通知に応じ、前記出力順情報に基づいて、該第二のソフトウェア部品の次に実行される複数の前記第二のソフトウェア部品に処理の実行の開始を指示することを特徴とする。
【００１４】
このような画像形成装置では、機能のカスタマイズ又は拡張等を簡便化させることができる。
【発明の効果】
【００１５】
本発明によれば、機能のカスタマイズ又は拡張等を簡便化させることのできる画像形成装置、アプリケーション制御方法、及びアプリケーション制御プログラムを提供することができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における複合機のソフトウェア構成例を示す図である。ここで、複合機とは、プリンタ、コピー、スキャナ、又はＦＡＸ等の複数の機能を一台の筐体において実現する画像形成装置をいう。
【００１７】
図１に示されるように、複合機１におけるソフトウェアは、ユーザインタフェース層１０、コントロール層２０、アプリケーションロジック層３０、デバイスサービス層４０、及びデバイス制御層５０等より構成される。なお、図中における各層の上下関係は、層間の呼び出し関係に基づいている。すなわち、基本的に図中において上にある層が下の層を呼び出す。
【００１８】
ユーザインタフェース層１０は、機能（例えば、コピー、印刷、スキャン、ＦＡＸ送信）の実行要求を受け付けるための機能が実装されている部分であり、例えば、通信サーバ部１１及びローカルＵＩ部１２等が含まれる。通信サーバ部１１は、例えば、非図示のクライアントＰＣ（Personal Computer）等からネットワーク経由で要求を受け付ける。ローカルＵＩ部１２は、例えば、非図示のオペレーションパネルを介して入力される要求を受け付ける。ユーザインタフェース層１０において受け付けられた要求は、コントロール層２０に伝えられる。
【００１９】
コントロール層２０は、要求された機能を実現するための処理を制御するための機能が実装されている部分であり、例えば、プラグイン管理部２１及びリクエスト管理部２２等が含まれる。プラグイン管理部２１は、アプリケーションロジック層３０におけるアクティビティ３１やフィルタ等を利用可能な状態にするための処理（プラグイン処理）等を制御する。リクエスト管理部２２は、ユーザインタフェース層１０において受け付けられた要求に応じた複合機１の機能を実行するための処理を制御する。なお、本実施の形態において「複合機１の機能」とは、複合機１がユーザに対して提供する一つのまとまった単位（要求が入力されて最終的な出力が得られるまで）のサービスと同義であり、ソフトウェア的には一つのまとまった単位のサービスを提供するアプリケーションと同義である。
【００２０】
アプリケーションロジック層３０は、それぞれが複合機１において提供される機能の一部を実現する部品群が実装されている部分である。すなわち、アプリケーションロジック層３０における部品を組み合わせることにより一つの機能が実現される。本実施の形態では、各部品を「フィルタ」と呼ぶ。これは、複合機１のソフトウェアアーキテクチャが「パイプ＆フィルタ」と呼ばれる考え方に基づくことによる。
【００２１】
図２は、パイプ＆フィルタの概念を説明するための図である。図２において、「Ｆ」はフィルタを示し、「Ｐ」はパイプを示す。図中に示されるように、各フィルタはパイプによって接続される。フィルタは、入力されたデータに対して変換を施し、その結果を出力する。パイプは、フィルタから出力されたデータを次のフィルタに伝達する。
【００２２】
すなわち、本実施の形態における複合機１では、各機能をドキュメント(データ)に対する「変換」の連続として捉える。複合機の各機能は、ドキュメントの入力、加工、及び出力によって構成されるものとして一般化することができる。そこで「入力」、「加工」、及び「出力」を「変換」として捉え、一つの「変換」を実現するソフトウェア部品がフィルタとして構成される。デバイスからのデータの入力を実現するフィルタを特に「入力フィルタ」という。また、データの加工（画像処理等）を実現するフィルタを特に「変換フィルタ」という。更に、デバイスへのデータの出力を実現するフィルタを特に「出力フィルタ」という。なお、各フィルタは独立しており、フィルタ間における依存関係（呼び出し関係）は基本的に存在しない。したがって、フィルタ単位で追加（インストール）又は削除（アンインストール）が可能とされている。
【００２３】
図１において、アプリケーションロジック層３０には、入力フィルタとして、読取フィルタ３０１、保管文書読出フィルタ３０２、メール受信フィルタ３０３、ＦＡＸ受信フィルタ３０４、ＰＣ文書受信フィルタ３０５、レポートフィルタ３０６等が含まれている。
【００２４】
読取フィルタ３０１は、スキャナによる画像データの読み取りを制御し、読み取られた画像データを出力する。保管文書読出フィルタ３０２は、複合機１の記憶装置に保管されている文書データ（画像データ）を読み出し、読み出されたデータを出力する。メール受信フィルタ３０３は、電子メールの受信し、当該電子メールに含まれているデータを出力する。ＦＡＸ受信フィルタ３０４は、ＦＡＸ受信を制御し、受信されたデータを出力する。ＰＣ文書受信フィルタ３０５は、非図示のクライアントＰＣから印刷データを受信し、受信された印刷データを出力する。レポートフィルタ３０６は、複合機１の設定情報や履歴情報等を、例えば表形式に整形されたデータとして出力する。
【００２５】
また、変換フィルタとしては、文書加工フィルタ３１１及び文書変換フィルタ３１２等が含まれている。文書加工フィルタ３１１は、入力されたデータに所定の画像変換処理（集約、拡大、又は縮小等）を施し、出力する。文書変換フィルタ３１２は、レンダリング処理を実行する。すなわち、入力されたＰｏｓｔＳｃｒｉｐｔデータをビットマップデータに変換して出力する。
【００２６】
また、出力フィルタとしては、印刷フィルタ３２１、保管文書登録フィルタ３２２、メール送信フィルタ３２３、ＦＡＸ送信フィルタ３２４、ＰＣ文書送信フィルタ３２５、及びプレビューフィルタ３２６等が含まれている。
【００２７】
印刷フィルタ３２１は、入力されたデータをプロッタに出力（印刷）させる。保管文書登録フィルタ３２２は、入力されたデータを複合機１内のハードディスク内に保存する。メール送信フィルタ３２３は、入力されたデータを電子メールに添付して送信する。ＦＡＸ送信フィルタ３２４は、入力されたデータをＦＡＸ送信する。ＰＣ文書送信フィルタ３２５は、入力されたデータをクライアントＰＣに送信する。プレビューフィルタ３２６は、入力されたデータを、複合機１のオペレーションパネルにプレビュー表示させる。
【００２８】
例えば、複合機１における各種機能は、次のようなフィルタの組み合わせにより実現される。図３は、本実施の形態の複合機における各機能を実現するためのフィルタの組み合わせの例を示す図である。
【００２９】
例えば、コピー機能は、読取フィルタ３０１と印刷フィルタ３２１とを接続することにより実現される。読取フィルタ３０１によって原稿より読み取られた画像データを印刷フィルタ３２１によって印刷すればよいからである。なお、集約、拡大、又は縮小等の加工が要求された場合は、これらの加工を実現する文書加工フィルタ３１１が二つのフィルタの間に挿入される。
【００３０】
プリンタ機能（クライアントＰＣからの印刷機能）は、ＰＣ文書受信フィルタ３０５と文書変換フィルタ３１２と印刷フィルタ３２１とを接続することにより実現される。スキャンｔｏ  ｅｍａｉｌ機能（スキャンした画像データを電子メールで転送する機能）は、読取フィルタ３０１とメール送信フィルタ３２３とを接続することによって実現される。ＦＡＸ送信機能は、読取フィルタ３０１とＦＡＸ送信フィルタ３２４とを接続することによって実現される。ＦＡＸ受信機能は、ＦＡＸ受信フィルタ３０４と印刷フィルタ３２１とを接続することによって実現される。ドキュメントボックス蓄積機能（スキャンした画像データを複合機１内に保存する機能）は、読取フィルタ３０１と保管文書登録フィルタ３２２とを接続することによって実現される。ドキュメントボックス印刷機能（複合機１内に保存されている文書データを印刷する機能）は、保管文書読出フィルタ３０２と印刷フィルタ３２１とを接続することにより実現される。
【００３１】
図３において、例えば、読取フィルタ３０１については５つの機能において利用されている。このように、各フィルタは複数の機能から利用可能であり、それによって各機能を実現するための開発工数を削減することができる。例えば、コピー機能とスキャン機能（ドキュメントボックス蓄積）について、その動作条件を設定させるためのユーザインタフェースは類似しているものであった。それにも拘わらず、各機能をアプリケーションによって実装する場合には、アプリケーションごとに個別にユーザインタフェースの実装も行われていた。しかし、本実施の形態の複合機１によれば、コピー機能及びスキャン機能のいずれの場合も、読取フィルタ３０１のユーザインタフェースによって設定が行われ、ユーザインタフェースの共通化をも図ることができる。
【００３２】
更に、新たな機能を実現する場合について考える。まず、機能１として、複合機１では対応していないＰＤＬ（Page Description Language）（以下、「他ＰＤＬ」という。）によってクライアントＰＣから送信される印刷データを印刷する機能を実現する場合について考える。この場合、図３におけるプリンタ機能を雛形とすることができる。但し、プリンタ機能では、ＰＣ文書受信フィルタ３０５により出力されるデータがＰｏｓｔＳｃｒｉｐｔ形式であることが前提とされている。文書変換フィルタ３１２が入力データとして扱えるのはＰｏｓｔＳｃｒｉｐｔ形式のデータだからである。しかし、機能１の場合、ＰＣ文書受信フィルタ３０５によって受信され、当該フィルタより出力されるのは他ＰＤＬ形式のデータである。したがって、このまま文書変換フィルタ３１２に転送しても文書変換フィルタ３１２は適切に処理を実行することができない。そこで、他ＰＤＬ形式からＰｏｓｔＳｃｒｉｐｔ形式へのデータ変換を実行する変換フィルタ（以下「他ＰＤＬ−ＰＳ変換フィルタ」という。）を新たに実装し、当該フィルタをＰＣ文書受信フィルタ３０５と文書変換フィルタ３１２との間に挿入すれば、機能１を実現することができる。すなわち、機能１は、ＰＣ文書受信フィルタ３０５と他ＰＤＬ−ＰＳ変換フィルタと文書変換フィルタ３１２と印刷フィルタ３２１とを接続することにより実現される。
【００３３】
次に、機能２として、Ｗｅｂサイトから情報を収集し、収集された情報を印刷する機能（以下「機能２」という。）を実現する場合について考える。この場合、Ｗｅｂサイトから情報を収集するフィルタが存在しない。したがって、少なくともＷｅｂサイトから情報を収集する入力フィルタ（以下「Ｗｅｂ収集フィルタ」という。）を新たに実装する必要がある。また、機能２では最終的に印刷を実行させたいので、出力フィルタとしては印刷フィルタ３２１を用いるのが適切である。ここで問題となるのが、Ｗｅｂ収集フィルタと印刷フィルタ３２１との間をどのように接続するかである。すなわち、印刷フィルタ３２１の入力データはレンダリングされたビットマップである必要があるところ、Ｗｅｂ収集フィルタ内にレンダリング機能を実装するのは非常に工数がかかるので適切ではない。そこで、既にレンダリング機能を実現する文書変換フィルタ３１２を利用することが考えられる。ただし、文書変換フィルタ３１２の入力データは、ＰｏｓｔＳｃｒｉｐｔ形式である必要がある。そこで、Ｗｅｂ収集フィルタを、収集した情報をＰｏｓｔＳｃｒｉｐｔ形式によって出力するように実装すれば、文書変換フィルタ３１２との接続が可能となる。このようにＷｅｂ収集フィルタを実装することにより、機能２は、Ｗｅｂ収集フィルタと文書変換フィルタ３１２と、文書変換フィルタ３１２と印刷フィルタ３２１との接続により実現される。
【００３４】
このように、複合機１では各フィルタを部品として各機能を構築するため、機能のカスタマイズ又は拡張を簡便に行うことができる。すなわち、各フィルタ間には、機能的な依存関係はなく独立性が保たれているため、フィルタの新たな追加やフィルタの組み合わせの変更によって、新たな機能（アプリケーション）を容易に開発することができる。したがって、新たなアプリケーションの実装が要求された場合、当該アプリケーションの一部の処理について実装されていない場合は、当該一部の処理を実現するフィルタのみを開発し、インストールすればよい。よって、コントロール層２０及びアプリケーションロジック層３０より下位の層について、新たなアプリケーションの実装に応じて発生する修正の頻度を低下させることができ、安定したプラットフォームを提供することができる。
【００３５】
アプリケーション層３０には、また、フィルタ管理部３３が含まれている。フィルタ管理部３３は、複合機１にインストールされているフィルタの一覧情報等を管理する。当該一覧情報は、例えば、フィルタのインストール時において、フィルタ管理部３３の管理する記憶領域（記憶装置上における記憶領域）に記録される。
【００３６】
アプリケーション層３０には、更に、アクティビティ３１が含まれている。「アクティビティ」とは、複数のフィルタの組み合わせによって、一つの「機能」（複合機１がユーザに対して提供する一つのまとまった単位のサービス又はアプリケーション）を実現するソフトウェアである。
【００３７】
すなわち、フィルタはそれぞれ独立性が高いため、フィルタの組み合わせ（アプリケーション）を動的に構築することが可能である。具体的には、ジョブの実行要求を受け付けるたびに、利用するフィルタと、フィルタの実行順序、及びそれぞれのフィルタの動作条件等をオペレーションパネルを介してユーザに設定させることにより、ユーザ所望の機能を実現するようにしてもよい。
【００３８】
しかし、コピー機能のように頻繁に利用する機能については、毎回フィルタを選択することにより実行指示を行うのはユーザにとって煩雑である。かかる課題を解決するのがアクティビティ３１である。すなわち、フィルタの組み合わせをアクティビティ３１として予め定義しておけば、ユーザは、アクティビティ３１を単位として実行対象を選択することができる。選択されたアクティビティ３１は、当該アクティビティ３１に定義された組み合わせに係る各フィルタを自動的に実行する。したがって、アクティビティ３１によって、操作の煩雑さを解消することができるとともに、アプリケーション単位で実行対象を選択していた従来のユーザインタフェースと同様の操作感を提供することができる。
【００３９】
図中では、アクティビティ３１として、コピーアクティビティ３１ａ、プリンタアクティビティ３１ｂ、及びマルチ文書アクティビティ３１ｃ等が例示されている。
【００４０】
コピーアクティビティ３１ａは、読取フィルタ３０１と、文書加工フィルタ３１１と、印刷フィルタ３２１との組み合わせにより、コピー機能（コピーアプリケーション）を実現するアクティビティ３１である。
【００４１】
プリンタアクティビティ３１ｂは、ＰＣ文書受信フィルタ３０５と、文書変換フィルタ３１２と、印刷フィルタ３２１との組み合わせにより、印刷機能（プリンタアプリケーション）を実現するアクティビティ３１である。
【００４２】
マルチ文書アクティビティ３１ｃは、入力フィルタ、変換フィルタ、及び出力フィルタのそれぞれについて、自由な組み合わせが可能なアクティビティ３１である。
【００４３】
なお、基本的に各アクティビティ３１は独立しており、アクティビティ３１間における依存関係（呼び出し関係）は基本的に存在しない。したがって、アクティビティ３１単位で追加（インストール）又は削除（アンインストール）が可能である。よって、図１に示されているアクティビティ３１以外にも、必要に応じて各種のフィルタの組み合わせによるアクティビティ３１を作成し、インストールすることができる。
【００４４】
また、アクティビティ３１の実行に際し利用されるフィルタは、固定的ではなく（常に同じではなく）、そのアクティビティ３１に対して設定される動作条件に応じて異なり得る。
【００４５】
デバイスサービス層４０は、アプリケーションロジック層３０における各アクティビティ３１や各フィルタから共通に利用される下位機能が実装されている部分であり、例えば、画像パイプ４１、データ管理部４２、及びパイプ管理部４３等が含まれる。画像パイプ４１は、上述したパイプの機能を実現する。すなわち、或るフィルタからの出力データを次のフィルタに伝達する。データ管理部４２は、各種のデータベースを表現する。例えば、ユーザ情報が登録されたデータベースや、文書又は画像データ等が蓄積されるデータベース等が相当する。パイプ管理部４３は、複合機１において利用可能なパイプの種類の一覧情報等を管理する。後述されるように、パイプには種類がある。当該一覧情報は、例えば、パイプ管理部４３の管理する記憶領域（記憶装置上における記憶領域）に記録される。
【００４６】
デバイス制御層５０は、デバイス（ハードウェア）を制御するドライバと呼ばれるプログラムモジュール群が実装されている部分であり、例えば、スキャナ制御部５１、プロッタ制御部５２、メモリ制御部５３、Ｔｅｌ回線制御部５４、及びネットワーク制御部５５等が含まれる。各制御部は、当該制御部の名前に付けられているデバイスを制御する。
【００４７】
フィルタ及びアクティビティ３１について更に詳しく説明する。図４は、フィルタの構成要素を説明するための図である。図４に示されるように、各フィルタは、フィルタ設定用ＵＩ、フィルタロジック、フィルタ固有下位サービス、及び永続記憶領域情報等より構成される。このうち、フィルタ設定用ＵＩ、フィルタ固有下位サービス、及び永続記憶領域情報については、フィルタによって必ずしも構成要素に含まれない。
【００４８】
フィルタ設定用ＵＩは、フィルタの動作条件等を設定させるための画面をオペレーションパネル等に表示させるプログラムである。例えば、読取フィルタ３０１であれば、解像度、濃度、画像種別等を設定させる画面が相当する。なお、オペレーションパネルの表示がＨＴＭＬデータや、スクリプトに基づいて行われ得ることに鑑みれば、フィルタ設定用ＵＩはＨＴＭＬデータやスクリプトであってもよい。
【００４９】
フィルタロジックは、フィルタの機能を実現するためロジックが実装されたプログラムである。すなわち、フィルタの構成要素としてのフィルタ固有下位サービスや、デバイスサービス層４０又はデバイス制御層５０等を利用して、フィルタ設定用ＵＩを介して設定された動作条件に応じてフィルタの機能を実現する。例えば、読取フィルタ３０１であれば、スキャナによる原稿の読み取り制御のためのロジックが相当する。
【００５０】
フィルタ固有下位サービスは、フィルタロジックを実現するために必要な下位機能（ライブラリ）である。すなわち、デバイスサービス層４０又はデバイス制御層５０相当する機能であるが、他のフィルタから使用されないものについては、フィルタの一部として実装されてもよく、当該一部がフィルタ固有下位サービスに相当する。例えば、読取フィルタ３０１であれば、スキャナを制御するための機能が相当するが、本実施の形態では、デバイス制御層５０においてスキャナ制御部５１として実装されている。したがって、読取フィルタ３０１において、フィルタ固有下位サービスの実装は必ずしも必要ではない。
【００５１】
永続記憶領域情報は、フィルタに対する設定情報（例えば、動作条件のデフォルト値）等、不揮発メモリに保存する必要があるデータのスキーマ定義が相当する。当該スキーマ定義は、フィルタのインストール時にデータ管理部４２に登録される。
【００５２】
図５は、アクティビティの構成要素を説明するための図である。図５に示されるように、アクティビティ３１は、アクティビティＵＩ、アクティビティロジック、及び永続記憶領域情報等より構成される。
【００５３】
アクティビティＵＩは、アクティビティ３１に関する画面（例えば、アクティビティ３１の動作条件等を設定させるための設定画面）をオペレーションパネル等に表示させるための情報又はプログラムである。
【００５４】
アクティビティロジックは、アクティビティ３１の処理内容が実装されたプログラムである。基本的に、アクティビティロジックには、フィルタの組み合わせに関するロジック（例えば、フィルタの実行順、複数のフィルタに跨る設定、フィルタの接続変更、エラー処理等）が実装されている。
【００５５】
永続記憶領域情報は、アクティビティ３１に対する設定情報（例えば、動作条件のデフォルト値）等、不揮発メモリに保存する必要があるデータのスキーマ定義が相当する。当該スキーマ定義は、アクティビティ３１のインストール時にデータ管理部４２に登録される。
【００５６】
図３又は図４に示されるように、フィルタの機能を実現するロジックはフィルタロジックに、アクティビティロジックに実装される。そこで、更に、フィルタロジック及びアクティビティロジックについて詳しく説明する。
【００５７】
図６は、アアクティビティロジックとフィルタロジックとの文書操作に関するクラス構成例を示す図である。ここで、文書操作とは、文書を表現する各種データ（例えば、画像データ）に対する操作（処理）をいう。なお、以下の説明において、「オブジェクト」とは、各クラスのインスタンス、すなわち、クラスの定義に基づいてメモリ上に生成される具体的なデータ（情報）をいう。したがって、オブジェクトが保持又は管理する情報はメモリ上に記憶される。なお、以下の説明において、ＸＸＸオブジェクトとは、ＸＸＸクラスのインスタンスを意味する。
【００５８】
図６において、符号Ａで示される破線で囲まれたクラス、すなわち、アプリケーションロジッククラス４１０、文書操作条件クラス４２０、文書操作ジョブクラス４３０、機能コネクタクラス４４０、及びジョブ開始トリガクラス４５０は、アクティビティロジックを構成するクラス群である。
【００５９】
アプリケーションロジッククラス４１０は、一つのインスタンスで一つのアクティビティ３１のアクティビティロジックを表現するクラスであり、アクティビティ３１の動作条件及びアクティビティ３１のジョブを管理する。斯かる管理機能に対応させて、アクティビティロジッククラス４１０は、文書操作条件クラス４２０及び文書操作ジョブクラス４３０をそれぞれ１対多の多重度で集約する。なお、「アクティビティ３１のジョブ」とは、アクティビティ３１の機能が完了するまでの一連の処理をいい、本実施の形態では特に「文書操作ジョブ」という。例えば、アクティビティ３１が、一つの入力フィルタ、一つの変換フィルタ、一つの出力フィルタより構成される場合、これら三つのフィルタの接続によって実行される処理の開始から終了までの処理工程が、一つの文書操作ジョブに相当する。
【００６０】
文書操作条件クラス４２０は、一つのインスタンスで、一つのアクティビティ３１に対する動作条件を表現及び管理するクラスである。すなわち、アクティビティ３１に設定される動作条件は、文書操作条件オブジェクトにおいて保持される。
【００６１】
機能コネクタクラス４４０は、二つの役割を担う。第一の役割を担うためにインスタンス化される機能コネクタオブジェクトは、アクティビティ３１によって利用されるフィルタ間の接続関係を管理する。第二の役割を担うためにインスタンス化される機能コネクタオブジェクトは、アクティビティ３１が二つ以上の出力フィルタを構成要素とする場合に（以下、このようなアクティビティを「多出力のアクティビティ」という。）、各出力フィルタの実行順（出力順）を管理する。
【００６２】
出力フィルタの実行順（出力順）について説明する。図７は、多出力のアクティビティにおけるフィルタの接続関係の一例を示す図である。図７では、図２と同じ表記法を用いている。すなわち、「Ｆ」はフィルタを示し、「Ｐ」はパイプを示す。
【００６３】
図７において、フィルタ３３１は、入力フィルタである。フィルタ３３２及び３３４は、変換フィルタである。フィルタ３３３及び３３５は、出力フィルタである。図７の例では、フィルタ３３１によって入力されたデータの出力先は二つに分岐し、フィルタ３３２とフィルタ３３４となっている。フィルタ３３２によって処理されたデータは、フィルタ３３３によって出力される。また、フィルタ３３４によって処理されたデータはフィルタ３３５によって出力される。このように多出力の場合、少なくとも複数の出力フィルタは並列的な関係となる。ここで、フィルタ３３３による出力処理と、フィルタ３３５による出力処理との順番（いずれを先に実行させるか、又は同時に実行させるか）を制御したい場合がある。この順番が、出力順に相当する。
【００６４】
なお、図６において、機能コネクタクラス４４０は、ロール名が「フィルタ接続」の関連ｒ１と、ロール名が「出力順」の関連ｒ２とによって文書操作条件クラス４２０に集約される。関連ｒ１は、フィルタ間の接続関係（図７における、フィルタ３３１とフィルタ３３２との接続、フィルタ３３２とフィルタ３３３との接続、フィルタ３３１とフィルタ３３４との接続、フィルタ３３４とフィルタ３３５との接続）を管理する（すなわち、第一の役割を担う）インスタンスに対する関連を示す。関連ｒ２は、出力順を管理する（すなわち、第二の役割を担う）インスタンスに対する関連を示す。
【００６５】
文書操作ジョブクラス４３０は、文書操作ジョブを制御するクラスである。文書操作ジョブクラス４３０は、１対多の多重度でジョブ開始トリガクラス４５０を集約する。
【００６６】
ジョブ開始トリガクラス４５０は、多出力のアクティビティ３１について出力順を制御する必要がある場合、当該出力順を制御するためのクラスである。
【００６７】
ジョブ状態通知先クラス４６０は、フィルタから当該フィルタのジョブの状態の通知を受けるためのインタフェースが定義された抽象クラスである。フィルタのジョブの状態の通知を受ける必要があるクラスは、ジョブ状態通知先クラス４６０を継承する。本実施の形態では、文書操作ジョブクラス４３０及びジョブ開始トリガ４５０が、状態通知先クラス４６０のインタフェースを継承している。なお、フィルタのジョブとは、一つのフィルタによって実行される処理をいい、本実施の形態では、特に「フィルタジョブ」という。
【００６８】
一方、図６において、符号Ｆで示される破線で囲まれたクラス、すなわち、フィルタロジッククラス５１０、フィルタ条件クラス５２０、フィルタジョブクラス５３０、及びパイプジョブクラス５４０は、フィルタロジックを構成するクラス群である。
【００６９】
フィルタロジッククラス５１０は、フィルタロジックを表現するクラスであり、フィルタの動作条件及びフィルタジョブを管理する。斯かる管理機能に対応させて、フィルタロジッククラス５１０は、フィルタ条件クラス５２０及びフィルタジョブクラス５３０をそれぞれ１対多の多重度で集約する
フィルタ条件クラス５２０は、一つのインスタンスで一つのフィルタに対する動作条件を表現及び管理するクラスである。すなわち、フィルタに設定される動作条件は、フィルタ条件クラス５２０において保持される。
【００７０】
フィルタジョブクラス５３０は、フィルタジョブを制御するクラスである。
【００７１】
パイプジョブクラス５４０は、パイプのジョブ（パイプによるフィルタ間のデータの伝達）を制御するクラスである。
【００７２】
フィルタジョブクラス５３０は、パイプジョブクラス５４０に対しそれぞれ一対多の多重度で二つの関連（関連ｒ１２及び関連ｒ１３）を有する。関連ｒ１２は、「データソース（フィルタに対するデータの入力側）」としてのパイプのパイプジョブオブジェクトへの関連である。関連１３は、「データシンク（フィルタからのデータの出力側）」としてのパイプのパイプジョブオブジェクトへの関連である。
【００７３】
以上のように、アクティビティロジック及びフィルタロジックは、主にその動作条件を管理するためのクラスと、そのジョブを制御するためのクラスとによって構成される点について共通する。引き続き図６を参照しつつ、アクティビティロジックを構成するクラスとフィルタロジックを構成するクラスとの関連について説明する。
【００７４】
文書操作条件クラス４２０は、二つの関連（関連ｒ３及び関連ｒ４）によってフィルタ条件クラス５２０を１対多の多重度で集約する。この集約関係は、アクティビティ３１の動作条件は、当該アクティビティ３１が利用する各フィルタの動作条件の集合によって構成されることを示す。関連ｒ３は、「利用するフィルタ」のフィルタ条件オブジェクトに対する関連であり、関連ｒ４は、「機能有効なフィルタ」のフィルタ条件オブジェクトに対する関連である。「利用するフィルタ」とは、アクティビティ３１が静的な意味において利用するフィルタ（すなわち、利用する可能性が有るフィルタ）をいい、アクティビティ３１ごとに異なり得る。したがって、関連ｒ３は、アクティビティ３１が利用する可能性が有るフィルタのフィルタ条件オブジェクトへの関連を示す。「機能有効なフィルタ」とは、アクティビティ３１が動的な意味において利用するフィルタ（すなわち、実際に利用するフィルタ）をいう。したがって、関連ｒ４は、アクティビティが実際に利用するフィルタのフィルタ条件オブジェクトへの関連を示す。なお、「機能有効なフィルタ」は、アクティビティ３１の動作条件に応じて「利用するフィルタ」の中から選択される。
【００７５】
機能コネクタクラス４４０は、フィルタ条件クラス５２０に対して関連ｒ５及び関連ｒ６を有する。関連ｒ５は、「前段のフィルタ」のフィルタ条件オブジェクトに対する関連であり、関連ｒ６は、「後段のフィルタ」のフィルタ条件オブジェクトに対する関連である。「前段のフィルタ」及び「後段のフィルタ」の意味は、機能コネクタオブジェクトの役割に応じて異なる。すなわち、機能コネクタオブジェクトが、フィルタの接続関係を管理するものである場合、「前段のフィルタ」とは、当該接続関係において前に接続されるフィルタを意味し、「後段のフィルタ」とは、当該接続関係において後に接続されるフィルタを意味する。また、機能コネクタオブジェクトが、出力順を管理するものである場合、「前段のフィルタ」とは、先に実行される出力フィルタを意味し、「後段のフィルタ」とは、後に実行される出力フィルタを意味する。
【００７６】
文書操作ジョブクラス４３０は、二つの関連（関連ｒ７及び関連ｒ８）によってフィルタジョブクラス５３０を１対多の多重度で集約する。この集約関係は、文書操作ジョブは、当該アクティビティ３１が利用する各フィルタのフィルタジョブの集合によって構成されることを示す。関連ｒ７は、「制御対象のジョブ」に関するフィルタジョブオブジェクトに対する関連であり、関連ｒ８は、「最初に実行する出力系ジョブ」に関するフィルタジョブオブジェクトに対する関連である。「制御対象のジョブ」とは、文書操作ジョブの実行に応じて実行される各フィルタジョブである。「最初に実行する出力系ジョブ」とは、出力系のジョブ（出力フィルタによるジョブ）のうち、文書操作ジョブの実行の開始に応じて最初に実行開始の指示対象とされるジョブである。後述されるように、文書操作ジョブの実行が開始されると、当該アクティビティ３１が利用する各フィルタに対して並列的にジョブの実行の開始が指示される。但し、出力順が設定されている場合、当該出力順に係る出力フィルタに関しては、出力順において最初の出力フィルタに対してのみ実行の開始が指示される。したがって、関連ｒ８は、出力順において最初の出力フィルタに関するフィルタジョブオブジェクト対する関連である。文書操作ジョブクラス４３０とフィルタジョブクラス５３０との関連ｒ８における多重度は１対多である。したがって、一つの文書操作ジョブにおいて、「最初に実行する出力系ジョブ」は複数存在し得る。
【００７７】
文書操作ジョブクラス４３０は、また、文書操作条件クラス４２０に対して１対１の多重度で関連ｒ１１を有する。したがって、文書操作ジョブオブジェクトでは、対応する文書条条件オブジェクトへの関連が保持される。
【００７８】
ジョブ開始トリガクラス４５０は、フィルタジョブクラス５３０に対して関連ｒ９及び関連ｒ１０を有する。関連ｒ９は、「終了イベント待ち」の対象となるフィルタジョブオブジェクトに対する関連であり、関連ｒ１０は、「ジョブ開始指示対象」となるフィルタジョブオブジェクトに対する関連である。ジョブ開始トリガオブジェクトは、「終了イベント待ち」のフィルタジョブオブジェクトより当該フィルタジョブの終了イベントが通知されると、「ジョブ開始指示対象」のフィルタジョブオブジェクトに対してジョブの開始を指示する。換言すれば、「終了イベント待ち」のフィルタジョブオブジェクトとは、出力順において先に実行される出力フィルタのフィルタジョブオブジェクトであり、「ジョブ開始指示対象」のフィルタジョブオブジェクトとは、出力順において後に実行される出力フィルタのフィルタジョブオブジェクトである。すなわち、関連ｒ９及び関連ｒ１０によって出力順が管理される。なお、ジョブ開始トリガクラス４５０は、フィルタジョブクラス５３０に対して１対多の多重度で関連ｒ９及び関連ｒ１０を有する。したがって、一つのジョブ開始トリガオブジェクトは、複数のフィルタジョブオブジェクトを終了イベント待ちの対象とすることができ、複数のフィルタジョブオブジェクト５３０をジョブ開始指示対象とすることができる。具体的には、出力フィルタを三つ利用するアクティビティ３１の場合、例えば、二つの出力フィルタのジョブの終了を待ち合わせて他のフィルタにジョブの実行を開始させたり、一つのフィルタのフィルタジョブの終了に応じて、他の二つのフィルタのフィルタジョブの実行を開始させたりすることができる。
【００７９】
フィルタジョブクラス５３０は、ジョブ状態通知先クラス４６０を集約する。この関連によって、フィルタジョブクラス５３０は、ジョブの状態の変化（ジョブの終了等）の通知先を識別する。なお、上述したようにジョブ状態通知先クラス４６０は、インタフェースのみが定義されている抽象クラスであり、文書操作ジョブクラス４３０及びジョブ開始トリガクラス４５０が当該インタフェースを継承している。したがって、フィルタジョブオブジェクトからのジョブの状態の変化の通知は、実際の文書操作ジョブオブジェクトやジョブ開始トリガオブジェクトに通知される。但し、ジョブ状態通知先クラス４６０によって、実際の通知先は、フィルタジョブクラス５３０に対して隠蔽される。したがって、フィルタジョブオブジェクトは、実際の通知先を意識する必要はない。
【００８０】
なお、図６に示されるクラス図は、アクティビティロジックとフィルタロジックのフレームワーク部分についてのクラス図である。すなわち、それぞれ具体的なアクティビティ３１やフィルタにおけるアクティビティロジック又はフィルタロジックでは、図６に示されるクラスを継承したクラスによってその機能を拡張することができる。
【００８１】
図６に示されるクラス図に基づいて、コピーアクティビティ３１ａの一つの機能であるコピー蓄積機能の動作条件及びジョブが、オブジェクトとしてどのように表現されるかを示す。その前に、コピー蓄積機能のフィルタ構成について説明しておく。
【００８２】
図８は、コピー蓄積機能のフィルタ構成例を示す図である。図８に示されるように、コピー蓄積機能は、読取フィルタ３０１、二つ文書加工フィルタ３１１（文書加工フィルタ３１１ａ、文書加工フィルタ３１１ｂ、印刷フィルタ３２１、及び保管文書登録フィルタ３２２より構成される。
【００８３】
読取フィルタ３０１は、文書加工フィルタ３１１ａ及び３１１ｂに接続される。文書加工フィルタ３１１ａは、印刷フィルタ３２１に接続される。文書加工フィルタ３１１ｂは、保管文書登録フィルタ３２２に接続される。
【００８４】
読取フィルタ３０１→文書加工フィルタ３１１ａ→印刷フィルタ３２１の接続により、スキャンされた画像データの印刷、すなわち、コピー機能が実現される。また、読取フィルタ３０１→文書加工フィルタ３１１ｂ→保管文書登録フィルタ３２２の接続により、スキャンされた画像データのＨＤＤへの保存機能が実現される。このように、コピー蓄積機能は、並列的な関係にある二つの出力フィルタを利用する多出力の機能である。
【００８５】
斯かるコピー蓄積機能の動作条件は、図６のクラス図に基づけば次のようなオブジェクト構成によって表現される。
【００８６】
図９は、コピー蓄積機能の動作条件を表現するオブジェクト図の例である。図中（Ａ）は、図６より抜粋された動作条件に関するクラス図である。（Ｂ）は、（Ａ）に示されるクラス構成に基づいてインスタンス化されるオブジェクトの構成を示すオブジェクト図である。なお、（Ｂ）における各矩形は、それぞれ一つのオブジェクトを示す。また、矩形内は、「ＸＸＸ：ＹＹＹ」の形式で文字列が表記されている。ここで、「ＸＸＸ」は、オブジェクト名を示し、「ＹＹＹ」は、クラス名を示す。以下において、そのクラスに属するオブジェクト一般を総称する場合は、＜クラス名＞オブジェクトと記載する。一方、各インスタンスを具体的に識別する場合は、＜オブジェクト名＞オブジェクトと記載する。
【００８７】
（Ｂ）に示されるように、コピーアクティビティ３１ａのコピー蓄積機能の動作条件は、コピーアクティビティ３１ａに対応する文書操作条件オブジェクトとしてコピー蓄積条件オブジェクト４２１を有する。また、読取フィルタ３０１、文書加工フィルタ３１１ａ、印刷フィルタ３２１、文書加工フィルタ３１１ｂ、保管文書登録フィルタ３２２のそれぞれに対応するフィルタ条件オブジェクトとして、読取条件オブジェクト５２１、加工Ａ条件オブジェクト５２２、印刷条件オブジェクト５２３、加工Ｂ条件オブジェクト５２４、保管条件オブジェクト５２５を有する。また、各フィルタの接続関係に対応させて各フィルタに対応するフィルタ条件オブジェクトを接続する機能コネクタオブジェクトとして、フィルタ接続オブジェクト４４１、フィルタ接続オブジェクト４４２、フィルタ接続オブジェクト４４３、及びフィルタ接続オブジェクト４４４を有する。また、印刷フィルタ３２１と保管文書登録フィルタ３２２との実行順を印刷条件オブジェクト５２３と保管条件オブジェクト５２５との関係によって管理する機能コネクタオブジェクトとして出力順オブジェクト４４５とを有する。なお、オブジェクト間を結ぶ各線分は、オブジェクト間の関連を示す。
【００８８】
（Ｂ）のオブジェクト構造は、コピー蓄積条件オブジェクト４２１をルートとして、ツリー構造を有している。したがって、以下、アクティビティ３１の動作条件を表現するオブジェクト構造を「条件ツリー」という。
【００８９】
また、図１０は、コピー蓄積機能の文書操作ジョブを表現するオブジェクト図の例である。図中（Ａ）は、図６より抜粋されたジョブに関するクラス図である。（Ｂ）は、（Ａ）に示されるクラス構成に基づいてインスタンス化されるオブジェクトの構成を示すオブジェクト図である。
【００９０】
（Ｂ）に示されるように、コピー蓄積機能の文書操作ジョブは、コピーアクティビティ３１ａに対応する文書操作ジョブオブジェクトとしてコピー蓄積ジョブオブジェクト４３１を有する。また、読取フィルタ３０１、文書加工フィルタ３１１ａ、印刷フィルタ３２１、文書加工フィルタ３１１ｂ、保管文書登録フィルタ３２２のそれぞれに対応するフィルタジョブオブジェクトとして、読取ジョブオブジェクト５３１、加工Ａジョブオブジェクト５３２、印刷ジョブオブジェクト５３３、加工Ｂジョブオブジェクト５３４、保管ジョブオブジェクト５３５を有する。また、各フィルタを接続するパイプに対応するパイプジョブオブジェクトとして、パイプジョブオブジェクト５４１、パイプジョブオブジェクト５４２、パイプジョブオブジェクト５４３、及びパイプジョブオブジェクト５４４を有する。また、印刷フィルタ３２１と保管文書登録フィルタ３２２の実行順を印刷条件オブジェクト５２３と保管条件オブジェクト５２５との関係によって管理するジョブ開始トリガオブジェクトとしてトリガＡオブジェクト４５１を有する。
【００９１】
（Ｂ）のオブジェクト構造は、コピー蓄積ジョブオブジェクト４３１をルートとして、ツリー構造を有している。したがって、以下、アクティビティ３１のジョブを表現するオブジェクト構造を「ジョブツリー」という。
【００９２】
以下、上記ソフトウェアに基づく複合機１による処理手順について説明する。図１１は、文書操作の実行処理の概要を説明するためのアクティビティ図である。なお、図１１において、アクティビティ３１とは、厳密にはアクティビティ３１のアクティビティロジックのことを指す。
【００９３】
まず、複合機１のオペレーションパネルを介してユーザによって文書操作の開始の指示が入力される（Ｓ１１）。当該指示は、例えば、実行対象とするアクティビティ３１の選択が相当する。続いて、選択されたアクティビティ３１（以下、「カレントアクティビティ」という。）は、文書操作の動作条件の雛形を生成する（Ｓ１２）。具体的には、カレントアクティビティは、図６に示したクラス構成に基づいて、当該アクティビティ３１の規定値としての動作条件を表現する条件ツリーを生成する。
【００９４】
続いて、ユーザによってオペレーションパネルを介してカレントアクティビティの動作条件が設定されると（Ｓ１３）、カレントアクティビティは、その設定内容を条件ツリーに反映する（Ｓ１４）。具体的には、条件ツリーの構造を変更したり、条件ツリーを構成する各オブジェクトの属性の値を変更したりする。
【００９５】
条件ツリーの構造の変更は、例えば、動作条件に応じて、新たに利用するフィルタが追加された場合や、不要となるフィルタが生じた場合、また、多出力の場合に出力順が設定された場合等に行われる。新たに利用するフィルタが追加された場合は、当該フィルタに対応するフィルタ条件オブジェクトがインスタンス化され、条件ツリーに追加される。不要となるフィルタが生じた場合は、当該フィルタに対応するフィルタ条件オブジェクトが条件ツリーから削除される。出力順が設定された場合は、その出力順に対応する機能コネクタオブジェクトがインスタンス化され、条件ツリーに追加される。
【００９６】
また、各オブジェクトの属性の値の変更は、例えば、或るフィルタの動作条件が変更された場合に行われる。この場合、当該フィルタに対応するフィルタ条件オブジェクトにおいて、変更されたパラメータ（例えば、読取フィルタ３０１であれば読み取り解像度等）に対応する属性の値が変更される。
【００９７】
動作条件の設定が終了し、ユーザによってスタートボタンが押下される等により、カレントアクティビティによる文書操作ジョブの実行が指示されると（Ｓ１５）、リクエスト管理部２２は、条件ツリーに基づいてジョブツリーを生成する（Ｓ１６）。
【００９８】
図１２は、は、条件ツリーに基づくジョブツリーの生成を説明するための図である。ジョブツリーの生成は、基本的に、条件ツリーを構成する各オブジェクトをジョブに関するオブジェクトに変換することによって行われる。
【００９９】
すなわち、図１２（Ａ）に示されるように、フィルタ条件オブジェクトに基づいてフィルタジョブオブジェクトを生成する。
【０１００】
また、（Ｂ）に示されるように、フィルタ接続の管理の役割を担う機能コネクタオブジェクトに基づいてパイプジョブオブジェクトを生成する。
【０１０１】
また、（Ｃ）に示されるように、機能コネクタオブジェクトが管理するフィルタの接続関係に基づいて、フィルタジョブオブジェクト間をパイプジョブオブジェクトによって接続する。
【０１０２】
また、（Ｄ）に示されるように、出力順の管理の役割を担う機能コネクタオブジェクトに基づいてジョブ開始トリガオブジェクトを生成する。そして、機能コネクタオブジェクトに対して「前段のフィルタ」として関連付けられているフィルタ条件オブジェクトに対応するフィルタジョブオブジェクトを、ジョブ開始トリガに対して「終了イベント待ち」として関連付ける。また、機能コネクタオブジェクトに対して「後段のフィルタ」として関連付けられているフィルタ条件オブジェクトに対応するフィルタジョブオブジェクトを、ジョブ開始トリガに対して「ジョブ開始指示対象」として関連付ける。
【０１０３】
斯かる処理により、条件ツリーに基づいてジョブツリーが生成される。
【０１０４】
続いて、カレントアクティビティは、当該文書操作ジョブの実行を開始し（Ｓ１７）。生成されたジョブツリーに基づいて、カレントアクティビティが利用する各フィルタにジョブの実行の開始を指示する（Ｓ１８）。ジョブの実行が終了したフィルタからは、カレントアクティビティに対してジョブの終了イベントが通知される（Ｓ１９）。全てのフィルタよりジョブの終了イベントの通知を受けると、カレントアクティビティは、当該文書操作ジョブの実行を終了する（Ｓ２０）。ユーザは、文書操作ジョブの終了に応じて、文書操作を終了する（Ｓ２１）。
【０１０５】
図１１においてアクティビティ図によって説明した処理について、主なステップごとにオブジェクト間のメッセージのやり取りを明確にしたシーケンス図を用いて以下に説明する。
【０１０６】
図１３及び図１４は、条件ツリーの生成処理を説明するためのシーケンス図である。なお、図１３及び図１４に示される処理は、図１５に示される条件ツリーを生成する処理に該当する。図１５に示される条件ツリーは、図９に示されるコピー蓄積機能の条件ツリーの一部である。
【０１０７】
オペレーションパネルを介して、ユーザによって、コピーアクティビティ３１ａのコピー蓄積機能が選択されると、ローカルＵＩ部１２は、コピー蓄積機能の設定画面のコンテンツ（以下「ＵＩコンテンツ」という。）の提供をコピーアクティビティ３１ａのアクティビティＵＩ３２ａに要求する（アクティビティＵＩについては、図５において説明した通りである）（Ｓ１０１）。続いて、アクティビティＵＩ３２ａは、コピーアクティビティ３１ａのアクティビティロジックにおけるアプリケーションロジックオブジェクト（アプリケーションロジッククラス４１０のインスタンス）のフレームワーク（Ｆ／Ｗ）部（アプリケーションロジックＦ／Ｗ４１０Ｆ）に対し、文書操作の動作条件の生成を要求する（Ｓ１０２）。続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、アプリケーションロジックオブジェクトの拡張部（アプリケーションロジック具象４１０Ｃ）に対し、コピー蓄積機能に固有の動作条件の生成処理の実行を要求する（Ｓ１０３）。なお、アクティビティロジックＦ／Ｗ４１０Ｆとアプリケーションロジック具象４１０Ｃとは、図中では、異なるオブジェクトであるかのように表現されているが、実際には一つのオブジェクト（コピーアクティビティ３１ａに独自の実装を行うために作成されたアプリケーションロジッククラス４１０のサブクラス（拡張部分）のオブジェクト）である。すなわち、アプリケーションロジックＦ／Ｗ４１０は、当該オブジェクトに関する実装のうち、フレームワーク部分であるアプリケーションロジッククラス４１０において実装されている部分を示す。また、アプリケーションロジック具象４１０Ｃは、当該オブジェクトの実装のうち、サブクラスにおいて実装されている部分を示す。
【０１０８】
続いて、アプリケーションロジック具象４１０Ｃは、文書操作条件クラス４２０のインスタンスとしてコピー蓄積条件オブジェクト４２１を生成する（Ｓ１０４）。続いて、アプリケーションロジック具象４１０Ｃは、読取フィルタ３０１のフィルタロジックにおける読取ロジックオブジェクト５１１（フィルタロジッククラス５１０のインスタンス）に読取フィルタ３０１の動作条件の生成を要求する（Ｓ１０５）。読取ロジックオブジェクト５１１は、読取条件オブジェクト５２１を生成し（Ｓ１０６）、生成された読取条件オブジェクト５２１（又はをの参照情報）をアプリケーションロジック具象４１０Ｃに返却する（S１０７）。なお、読取条件オブジェクト５２１の生成時において、例えば、当該オブジェクトのコンストラクタ内で、読取フィルタ３０１の規定値としての動作条件が読取条件オブジェクト５２１の属性値として設定される。続いて、アプリケーションロジック具象４１０Ｃは、コピー蓄積条件オブジェクト４２１に対して読取条件オブジェクト５２１を「利用するフィルタ」として追加する（Ｓ１０８）。これにより、コピー蓄積条件オブジェクト４２１と読取条件オブジェクト５２１との間に関連ｒ３（図６参照）が形成される。続いて、アプリケーションロジック具象４１０Ｃは、コピー蓄積条件オブジェクト４２１に対して読取条件オブジェクト５２１が「機能有効なフィルタ（実際に利用されるフィルタ）」で有るか否かについて登録する。読取条件オブジェクト５２１が「機能有効なフィルタ」である場合、コピー蓄積条件オブジェクト４２１と読取条件オブジェクト５２１との間に関連ｒ４（図６参照）が形成される。なお、読取条件オブジェクト５２１が「機能有効なフィルタ」であるか否かは、アプリケーションロジック具象４１０Ｃに定義されており、ここでは、「機能有効なフィルタ」として登録される。
【０１０９】
続いて、ステップＳ１１３〜Ｓ１１９においては、文書加工フィルタ３１１及び印刷フィルタ３２１のフィルタロジックに対して、ステップＳ１０５〜Ｓ１０９において説明した処理と同様の処理が実行される。これにより、加工Ａ条件オブジェクト５２２及び印刷オブジェクト条件オブジェクト５２３が生成され、これらのフィルタ条件オブジェクトとコピー蓄積条件オブジェクト４２１との間に関連が形成される。
【０１１０】
続いて、アプリケーションロジック具象４１０Ｃは、コピー蓄積条件オブジェクト４２１により、「利用するフィルタ」として関連付けられているフィルタ条件オブジェクトの一覧（以下、「フィルタ条件一覧」という。）を取得する（Ｓ１２０、Ｓ１２１）。続いて、アプリケーションロジック具象４１０Ｃは、フィルタ条件一覧に含まれている各フィルタ条件オブジェクト（読取条件オブジェクト５２１、加工Ａ条件オブジェクト５２２、及び印刷条件オブジェクト５２３）に対して、状態通知先を設定する（Ｓ１２２〜Ｓ１２４）。
【０１１１】
続いて、アプリケーションロジック具象４１０Ｃは、読取条件オブジェクト５２１を「前段のフィルタ」とし、加工Ａ条件オブジェクト５２２を「後段のフィルタ」とする機能コネクタオブジェクト（図１５におけるフィルタ接続オブジェクト４４１）をコピー蓄積条件オブジェクト４２１に追加（登録）する（Ｓ１２５）。続いて、アプリケーションロジック具象４１０Ｃは、加工Ａ条件オブジェクト５２２を「前段のフィルタ」とし、印刷条件オブジェクト５２３を「後段のフィルタ」とする機能コネクタオブジェクト（図１５におけるフィルタ接続オブジェクト４４２）をコピー蓄積条件オブジェクト４２１に追加（登録）する（Ｓ１２６）。これにより、各機能コネクタオブジェクトとコピー蓄積条件オブジェクト４２１との間の関連が形成される。なお、図中では、便宜上、機能コネクタオブジェクトのインスタンス化と、機能コネクタオブジェクトに対する「前段のフィルタ」としてのフィルタ条件オブジェクトの登録、及び「後段のフィルタ」としてのフィルタ条件オブジェクトの登録についてのステップは、省略されているが、これらの処理もアプリケーションロジック具象４１０Ｃによって実行される。
【０１１２】
以上で、図１５に示される条件ツリーの生成が完了する。条件ツリーが生成されると、アプリケーションロジック具象４１０Ｃは、コピー蓄積条件オブジェクト４２１をアプリケーションロジックＦ／Ｗ４１０Ｆに返却する（Ｓ１２７）。続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、優先度を引数として「リクエスト」の生成をリクエスト管理部２２に要求する（Ｓ１２８）。ここで、優先度とは、実行対象とされている文書操作ジョブの優先度をいい、例えば、ユーザによって設定される。また、リクエストとは、当該文書操作ジョブの実行要求を表現する情報をいう。
【０１１３】
リクエスト管理部２２は、リクエストの生成要求に応じ、当該リクエストを表現するリクエストオブジェクト２２０１を生成し（Ｓ１２９）、当該リクエストオブジェクト２２０１をアプリケーションロジックＦ／Ｗ４１０Ｆに返却する（Ｓ１３０）。続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、リクエストオブジェクト２２０１にコピー蓄積条件オブジェクト４２１を登録する（Ｓ１３１）。続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、コピー蓄積条件オブジェクト４２１（すなわち、文書操作ジョブの動作条件）をアクティビティＵＩ３２ａに返却する（Ｓ１３２）。
【０１１４】
アクティビティＵＩ３２ａは、コピー蓄積条件オブジェクト４２１に基づいて把握される条件ツリーに基づいて、初期状態として規定値の動作条件が表示されるＵＩコンテンツ作成し、当該ＵＩコンテンツをローカルＵＩ部１２に返却する（Ｓ１３４）。
【０１１５】
ローカルＵＩ部１２は、ＵＩコンテンツに基づいて、コピー蓄積機能の設定画面を複合機１のオペレーションパネルに表示させる。この時点においては、コピー蓄積機能の規定値としての動作条件（条件ツリー）が生成された状態となっている。したがって、この後、設定画面を介して動作条件の変更が行われると、それに応じて条件ツリーの変更が行われる。
【０１１６】
なお、図９の残り部分の条件についてもほぼ同様の処理手順によって生成される。
【０１１７】
また、規定値としての条件ツリーの構成は、アプリケーションロジック具象４１０Ｃに直接定義（ハードコーディング）されていてもよいし、例えば、編集可能なファイル内において、所定の形式（例えば、ＸＭＬ（eXtensible Markup Language）形式）によって定義されていてもよい。後者の場合、ファイル内の定義情報に基づいて、アプリケーションロジック具象４１０Ｃによって条件ツリーが構成されるため、ソースコードを変更せずに規定値としての条件ツリーの構成の変更が可能となる。
【０１１８】
次に、条件ツリーに基づいてジョブツリーを生成し、ジョブツリーに基づいてジョブを実行する処理について説明する。図１６及び図１７は、ジョブツリーの生成及びジョブの実行処理を説明するためのシーケンス図である。図１６及び図１７においてもコピー蓄積機能を例として説明する。図１６及び図１７において、図９、図１０、又は図１３と同一部分には同一符号を付している。なお、図１６及び図１７において、便宜上、文書加工フィルタ３１１、印刷フィルタ３２１として表現されている矩形は、それぞれのフィルタのフィルタロジックオブジェクト及びフィルタジョブオブジェクトの双方を示す。
【０１１９】
オペレーションパネルにおいてスタートボタンが押下されると、ローカルＵＩ部１２は、スタートボタンが押されたことをＵＩコンテンツ１２０１に通知する（Ｓ２０１）。ＵＩコンテンツ１２０１には、ＵＩコンテンツ１２０１に基づいて表示されるボタン等の表示部品やスタートボタンが操作された際の処理が定義されている。したがって、ＵＩコンテンツ１２０１は、当該定義に従ってコピーアクティビティ３１ａのコピー蓄積機能の文書操作ジョブの実行をリクエスト管理部２２に要求する（Ｓ２０２）。この際、状態通知先としてＵＩコンテンツ１２０１が指定される。
【０１２０】
続いて、リクエスト管理部２２は、操作者によるコピー蓄積機能の操作権限の有無を権限判断部６１に問い合わせる（Ｓ２０３）。権限判断部６１は、ポリシーデータに基づいて、操作権限の判断を行うソフトウェアである。権限判断部６１は、複合機１の内部に存在してもよいし、複合機１とネットワークを介して接続するコンピュータ（例えば、セキュリティサーバ）内に存在してもよい。権限判断部６１より返信される判断結果において（Ｓ２０４）、権限が認められている場合には、以降の処理が継続される。
【０１２１】
続いて、リクエスト管理部２２は、権限判断部６１からの判断結果において指定されている責務に関する処理を実行する（Ｓ２０５）。ここで、責務とは、権限が認められる代わりに課される条件をいう。例えば、ログの記録等が代表的な例である。続いて、リクエスト管理部２２は、ジョブツリーの生成を開始する（Ｓ２０６）。ステップＳ２０７〜Ｓ２５４までは、ジョブツリーの生成処理に関する。
【０１２２】
まず、リクエスト管理部２２は、リクエストオブジェクト２２０１に登録されているコピー蓄積条件オブジェクト４２１のフレームワーク部であるコピー蓄積条件Ｆ／Ｗ４２１Ｆより、コピー蓄積機能のアプリケーション名を取得する（Ｓ２０７、Ｓ２０８）。アプリケーション名は、各アクティビティ３１の機能を識別する名前である。続いて、アプリケーション名に基づいて、コピー蓄積機能に対応するアプリケーションロジックオブジェクトを取得する（Ｓ２０９）。なお、各アクティビティ３１に対応するアプリケーションロジックオブジェクトは、リクエスト管理部２２がアクセス可能なメモリ領域において管理されている。
【０１２３】
続いて、リクエスト管理部２２は、取得されたアプリケーションロジックオブジェクトのアプリケーションロジックＦ／Ｗ４１０Ｆに対して、ジョブ（ジョブツリー）の生成を要求する（Ｓ２１０）。アプリケーションロジックＦ／Ｗ４１０Ｆは、アプリケーションロジック具象４１０Ｃに対して設定された動作条件（条件ツリー）に応じた権限情報（利用する機能や資源に関する情報）の作成を要求する（Ｓ２１１）。アプリケーションロジック具象４１０Ｃは、権限情報を作成し、アプリケーションロジックＦ／Ｗ４１０Ｆに返却する（Ｓ２１２）。
【０１２４】
続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、権限情報に基づいて、動作条件に応じた権限の有無を権限判断部６１に問い合わせる（Ｓ２１３）。権限判断部６１より権限の判断結果が返信されると（Ｓ２１４）、アプリケーションロジックＦ／Ｗ４１０Ｆは、判断結果に指定されている責務に関する処理を実行する（Ｓ２１５）。続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、アプリケーションロジック具象４１０Ｃに対し、コピー蓄積機能に対応する文書操作ジョブオブジェクトの生成を要求する（Ｓ２１６）。アプリケーションロジック具象４１０Ｃは、コピー蓄積機能に対応する文書操作ジョブオブジェクトとして、コピー蓄積ジョブオブジェクト４３１を生成し、当該オブジェクトをアプリケーションロジックＦ／Ｗ４１０Ｆに返却する（Ｓ２１７）。なお、コピー蓄積オブジェクト４３１は、フレームワーク部である文書操作ジョブクラス４３０を継承したサブクラスのインスタンスである。図１６において、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、コピー蓄積ジョブオブジェクト４３１に関する実装のうち、フレームワーク部分である文書操作ジョブクラス４３０において実装されている部分を示す。また、コピー蓄積ジョブ具象４３１Ｃは、コピー蓄積ジョブオブジェクト４３１の実装のうち、サブクラスにおいて実装されている部分を示す。
【０１２５】
続いて、アプリケーションロジックＦ／Ｗ４１０Ｆは、生成されたコピー蓄積ジョブオブジェクト４３１をリクエスト管理部２２に返却する（Ｓ２１８）。なお、この時点では、ジョブツリーのうち、ルート部分のみが生成された状態である。
【０１２６】
続いて、リクエスト管理部２２は、コピー蓄積条件Ｆ／Ｗ４２１Ｆに対してフィルタ条件オブジェクトの一覧（フィルタ条件一覧）の取得を要求する（Ｓ２１９）。コピー蓄積条件Ｆ／Ｗ４２１Ｆは、条件ツリーにおいて、コピー蓄積条件オブジェクト４２１に関連付けられているフィルタ条件オブジェクトの一覧を返却する（Ｓ２２０）。
【０１２７】
続いて、リクエスト管理部２２は、フィルタ条件一覧に含まれる一つのフィルタ条件オブジェクトを処理対象とし（ここでは、読取条件オブジェクト５２１が処理対象にされたこととする。）、読取条件オブジェクト５２１よりフィルタ名を取得する（Ｓ２２１、Ｓ２２２）。フィルタ名は、各フィルタを識別するための名前である。続いて、リクエスト管理部２２は、取得されたフィルタ名に基づいて、フィルタ管理部３３に対してフィルタ（厳密には、フィルタロジックオブジェクト）の検索を要求する（Ｓ２２３）。フィルタ管理部３３は、管理しているフィルタの一覧の中から、検索対象のフィルタ名と一致するフィルタ名を有するフィルタを検索し、当該フィルタのフィルタロジックオブジェクト（ここでは、読取ロジックオブジェクト５１１）を返却する（Ｓ２２４）。続いて、リクエスト管理部２２は、読取ロジックオブジェクト５１１に対して、当該フィルタ（読取フィルタ３０１）のフィルタジョブオブジェクの生成を要求する（Ｓ２２５）。読取ロジックオブジェクト５１１は、読取ジョブオブジェクト５３１を生成し（Ｓ２２６）、当該読取ジョブオブジェクト５３１をリクエスト管理部２２に返却する（Ｓ２２７）。なお、ステップＳ２２１〜Ｓ２２６までの処理は、図１２（Ａ）に示される内容を実現するものである。
【０１２８】
続いて、リクエスト管理部２２は、読取ジョブオブジェクト５３１に対し、対応するフィルタ条件オブジェクト（読取条件オブジェクト５２１）を登録する（Ｓ２２８）。続いて、リクエスト管理２２は、読取条件オブジェクト５２１と、それに基づいて生成された読取ジョブオブジェクト５３１との対応関係を示す情報（対応情報）を記憶装置に記録（保存）しておく（Ｓ２２９）。
【０１２９】
なお、ステップＳ２２１〜Ｓ２３９は、ステップＳ２２０において取得されるフィルタ条件一覧に含まれる各フィルタ条件オブジェクト（すなわち、条件ツリーを構成する各フィルタ条件オブジェクト）に関して実行される（ｌｏｏｐ１）。その結果、ジョブツリーを構成する各フィルタジョブオブジェクト（例えば、図１６では省略されている加工Ａジョブオブジェクト５３２、印刷ジョブオブジェクト５３３等）が生成され、それぞれに対応するフィルタロジックオブジェクトに登録される。また、ステップＳ２２９の処理によって、図１８に示されるような情報が記憶装置に記録される。
【０１３０】
図１８は、フィルタ条件オブジェクトとフィルタジョブオブジェクトとの対応情報を示す図である。図１８に示される対応情報２２０２では、フィルタ条件オブジェクトごとに対応するフィルタ条件オブジェクトが表形式によって示されている。図１８の例では、読取条件オブジェクト５２１に読取ジョブオブジェクト５３１が対応し、加工Ａ条件オブジェクト５２２に加工Ａジョブオブジェクト５３２が対応し、印刷条件オブジェクト５２３に印刷ジョブオブジェクト５３３が対応し、加工Ｂ条件オブジェクト５２４に加工Ｂジョブオブジェクト５３４が対応し、保管条件オブジェクト５２５に保管ジョブオブジェクト５３５が対応することが示されている。
【０１３１】
対応情報２２０２は、具体的には、例えば、各オブジェクトの参照情報（ポインタ等）や識別情報（ＩＤ等）の対応関係を保持することによって構成するようにしてもよい。
【０１３２】
なお、以下において、フィルタ条件オブジェクトとフィルタジョブオブジェクトとの関係において、「対応する」という言葉を用いるとき、その対応関係は、対応情報２２０２に基づいて特定される対応関係を意味する。したがって、フィルタ条件オブジェクトに"対応する"フィルタジョブオブジェクトとは、当該フィルタ条件オブジェクトに基づいて生成されたフィルタジョブオブジェクトを意味し、ひいては、当該フィルタ条件オブジェクトと同じフィルタに係るフィルタジョブオブジェクトを意味する。
【０１３３】
続いて、リクエスト管理部２２は、コピー蓄積条件Ｆ／Ｗ４２１Ｆに対して、機能コネクタオブジェクトの一覧の取得を要求する（図１７：Ｓ２４０）。コピー蓄積条件Ｆ／Ｗ４２１Ｆは、条件ツリーにおいてコピー蓄積条件オブジェクト４２１に関連付けられている機能コネクタオブジェクトの一覧（機能コネクタ一覧）を返却する（Ｓ２４１）。
【０１３４】
続いて、リクエスト管理部２２は、機能コネクタ一覧に含まれる一つの機能コネクタオブジェクト４４０Ｆを処理対象とし（以下、処理対象とされた機能コネクタオブジェクトを「カレント機能コネクタオブジェクト」という。）、カレント機能コネクタオブジェクトに対して「前段のフィルタ」の取得を要求する（Ｓ２４２）。カレント機能コネクタオブジェクトは、「前段のフィルタ」として自らに関連付けられているフィルタ条件オブジェクトを返却する（Ｓ２４３）。続いて、リクエスト管理部２２は、カレント機能コネクタオブジェクトに対して「後段のフィルタ」の取得を要求する（Ｓ２４４）。カレント機能コネクタオブジェクトは、「後段のフィルタ」として自らに関連付けられているフィルタ条件オブジェクトを返却する（Ｓ２４５）。例えば、カレント機能コネクタオブジェクトが、フィルタ接続オブジェクト４４１である場合（図９又は図１５参照）、「前段のフィルタ」として読取条件フィルタ５２１が、「後段のフィルタ」として加工Ａ条件オブジェクト５２２が取得される。
【０１３５】
続いて、リクエスト管理部２２は、「前段のフィルタ」に係るフィルタ条件オブジェクトと、「後段のフィルタ」に係るフィルタ条件オブジェクトとを指定して、その組み合わせに対応するパイプの取得をパイプ管理部４３に要求する（Ｓ２４６）。パイプ管理部４３は、指定された「前段のフィルタ」と「後段のフィルタ」との組み合わせに基づいて対応するパイプを判定する。すなわち、パイプの実体はメモリ（ＨＤＤ（Hard Disk Drive）も含む）であるが、パイプの両端のフィルタに応じて利用するメモリの種類が異なる。その対応関係は、例えば、図１９に示されるように複合機１のＨＤＤ内に予め定義されている。
【０１３６】
図１９は、フィルタとパイプの対応テーブルの例を示す図である。図１９に示される対応テーブル６０には、「前段のフィルタ」と「後段のフィルタ」との組み合わせに応じて両者を接続するパイプが定義されている。例えば、読取フィルタ３０１と印刷フィルタ３２１や、文書変換フィルタ３１２と印刷フィルタ３２１は、ＤＭＡ（Direct Memory Access）パイプによって接続され、高速にデータが転送される。また、ＰＣ文書受信フィルタ３０５と文書変換フィルタ３１２とは、スプールパイプによって接続される。スプールパイプとは、ＨＤＤを用いるパイプであり、左側のフィルタから出力されたデータは、右側のフィルタが読み出すまでＨＤＤにスプール（保存）される。それ以外のフィルタ間は、汎用メモリパイプによって接続される。汎用メモリパイプとは、有限サイズのＲＡＭバッファによってデータ転送を行うパイプである。図１９に示される対応テーブル６０は、フィルタやパイプの拡張（追加）や削除等に応じて編集可能である。なお、図１における画像パイプ４１は、上記の各種のパイプへのインタフェースを提供するモジュールを抽象的に表現したものである。
【０１３７】
したがって、パイプ管理部４３は、対応テーブル６０に基づいて、指定された二つのフィルタを接続するパイプを判定し、当該パイプに対応する画像パイプ４１をリクエスト管理部２２に返却する（Ｓ２４７）。
【０１３８】
続いて、リクエスト管理部２２は、返却された画像パイプ４１に対し、当該画像パイプ４１のジョブの制御するためのパイプジョブオブジェクトの生成を要求すると（Ｓ２４８）、画像パイプ４１は、パイプジョブオブジェクトを生成し、返却する（Ｓ２４９）。
【０１３９】
続いて、リクエスト管理部２２は、「前段のフィルタ」のフィルタジョブオブジェクト（読取ジョブオブジェクト５３１）と当該パイプジョブオブジェクトとを指定して、当該フィルタジョブオブジェクトに対し当該パイプジョブオブジェクトを出力側のパイプとして（「データシンク」として）登録するよう「前段のフィルタ」のフィルタロジックオブジェクト（ここでは、読取ロジックオブジェクト５１１）に要求する（Ｓ２５０）。当該要求に応じ、読取ロジックオブジェクト５１１は、読取ジョブオブジェクト５３１に対し、当該パイプオブジェクトを「データシンク」として関連付ける。これにより、読取ジョブオブジェクト５３１と当該パイプオブジェクトとの間に関連ｒ１３（図６参照）が形成される。
【０１４０】
続いて、リクエスト管理部２２は、「後段のフィルタ」のフィルタジョブオブジェクト（加工Ａジョブオブジェクト５３１）と当該パイプジョブオブジェクトとを指定して、当該フィルタジョブオブジェクトに対し当該パイプジョブオブジェクトを入力側のパイプとして（「データソース」として）登録するよう「後段のフィルタ」のフィルタロジックオブジェクト（ここでは、加工Ａロジックオブジェクト５１２）に要求する（Ｓ２５１）。当該要求に応じ、加工Ａロジックオブジェクト５１２は、加工Ａジョブオブジェクト５３２に対し、当該パイプオブジェクトを「データソース」として関連付ける。これにより、加工Ａジョブオブジェクト５１３と当該パイプオブジェクトとの間に関連ｒ１３（図６参照）が形成される。
【０１４１】
なお、ステップＳ２４２〜Ｓ２５１は、ステップＳ２４１において取得される機能コネクタ一覧に含まれる各機能コネクタオブジェクト（すなわち、条件ツリーを構成する各機能コネクタオブジェクト）に関して実行される（ｌｏｏｐ２）。その結果、ジョブツリーを構成する各フィルタジョブオブジェクトとパイプジョブオブジェクトとの間に関連ｒ１２及び関連ｒ１３が形成される（すなわち、各フィルタジョブオブジェクトが適切なパイプオブジェクトによって接続される）。
【０１４２】
続いて、リクエスト管理部２２は、フィルタ条件一覧に含まれる一つのフィルタ条件オブジェクト（例えば、読取条件オブジェクト５２１）を指定して、当該フィルタ条件オブジェクトに対応するフィルタロジックオブジェクト（例えば、読取ロジックオブジェクト５１１）に対し、当該フィルタ条件オブジェクトが有効であるか否かを問い合わせる（Ｓ２５２）。フィルタロジックオブジェクトは、指定されたフィルタ条件オブジェクトが、「機能有効なフィルタ」として文書操作オブジェクトに関連付けられている場合は、当該フィルタ条件オブジェクトは有効であると判定し、関連付けられていない場合は、当該フィルタ条件オブジェクオクトは無効であると判定し、その判定結果をリクエスト管理部２２に返却する（Ｓ２５３）。
【０１４３】
リクエスト管理部２２は、当該フィルタ条件オブジェクトが有効であった場合は、当該フィルタ条件オブジェクトに対応するフィルタジョブオブジェクト（例えば、当該フィルタ条件オブジェクトが読取条件オブジェクト５２１である場合は読取ジョブオブジェクト５３１）をコピー蓄積ジョブＦ／Ｗ４３１Ｆに登録する（Ｓ２５４）。
【０１４４】
なお、ステップＳ２５２〜Ｓ２５４は、フィルタ条件一覧に含まれる各フィルタ条件オブジェクトに関して実行される（ｌｏｏｐ３）。その結果、有効なフィルタ条件オブジェクトに対応するフィルタジョブオブジェクトとコピー蓄積ジョブオブジェクト４３１との間に関連ｒ７が形成される。
【０１４５】
続いて、実行対象とされているアクティビティ３１の機能が多出力の場合、リクエスト管理部２２の制御によって出力順の設定がジョブツリーに反映される（Ｓ２５５）。続いて、リクエスト管理部２２の制御により、出力系ジョブ（出力フィルタのフィルタジョブ）のうち、最初に実行するジョブ（文書操作ジョブの実行の開始に応じて最初に実行開始の指示対象とされるフィルタジョブ）の選別が行われる（Ｓ２５６）。なお、ステップＳ２５５及びＳ２５６の詳細については後述する。
【０１４６】
この時点で、ジョブツリーの生成が完了する。
【０１４７】
続いて、リクエスト管理部２２は、リクエストオブジェクト２２０１に対して、生成されたジョブツリーのルートである文書操作ジョブオブジェクト（コピー蓄積ジョブオブジェクト４３１）を登録する（Ｓ２５７）。続いて、リクエスト管理部２２は、ジョブ状態の通知先をコピー蓄積ジョブＦ／Ｗ４３１Ｆに登録する（Ｓ２５８）。ここでは、ジョブ状態の通知先として、リクエストオブジェクト２２０１が登録される。
【０１４８】
続いて、リクエスト管理部２２は、リクエストオブジェクト２２０１に対して登録されているジョブの実行を指示する（Ｓ２５９）。リクエストオブジェクト２２０１は、登録されているコピー蓄積ジョブオブジェクト４３１のコピー蓄積ジョブＦ／Ｗ４３１Ｆに対してジョブの実行を要求する（Ｓ２６０）。コピー蓄積ジョブＦ／Ｗ４３１Ｆは、コピー蓄積ジョブ具象４３１Ｃに対してジョブの実行を要求する（Ｓ２６１）。ここで、コピー蓄積ジョブ具象４３１Ｃは、ジョブツリーを構成する各フィルタジョブオブジェクトに対してジョブの実行を要求するが、この点については後述する。
【０１４９】
その後、各フィルタにおいてジョブが完了すると、それぞれのフィルタのフィルタジョブオブジェクトよりジョブの完了がコピー蓄積ジョブＦ／Ｗ４３１Ｆに通知される（Ｓ２６２、Ｓ２６３、Ｓ２６４）。フィルタジョブの実行を要求した全てのフィルタジョブオブジェクトよりジョブの完了が通知されると、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、文書操作ジョブの完了をリクエストオブジェクト２２０１とＵＩコンテンツ１２０１のそれぞれに通知する（Ｓ２６５、Ｓ２６６）。当該通知に応じ、例えば、ＵＩコンテンツ１２０１は、文書操作ジョブが終了した旨を示す画面をオペレーションパネルに表示させる。
【０１５０】
続いて、図１７のステップＳ２５５において実行される処理の詳細について説明する。図２０は、リクエスト管理部による多出力の場合のジョブツリーに対する出力順の設定処理を説明するためのフローチャートである。
【０１５１】
ステップＳ３０１において、条件ツリーを参照し、出力順の設定の有無を判定する。条件ツリーにおいて、「出力順」を管理する機能コネクタオブジェクト（すなわち、関連ｒ２（図６参照）に係る機能コネクタオブジェクト。図９の例では出力順オブジェクト４４５が相当する。）が一つでも存在する場合は、出力順の設定は有ると判定される。当該機能コネクタオブジェクトが存在しない場合は、出力順の設定は無いと判定される。
【０１５２】
出力順の設定が有る場合（Ｓ３０１でＹＥＳ）、「出力順」を管理する機能コネクタオブジェクトの一覧（以下、「出力順設定リスト」という。）を条件ツリーより取得する（Ｓ３０２）。続いて、出力順設定リストより一つの機能コネクタオブジェクト（出力順設定）を取り出す（Ｓ３０３）。ここで、取り出された機能コネクタオブジェクトを、以下「カレント機能コネクタオブジェクト」という。続いて、カレント機能コネクタオブジェクトに対応するジョブ開始トリガオブジェクトを生成する（Ｓ３０４）。ここで生成されたジョブ開始トリガオブジェクトを、以下「カレントジョブ開始トリガオブジェクト」という。
【０１５３】
続いて、カレント機能コネクタオブジェクトに対して「前段のフィルタ」として関連付けられているフィルタ条件オブジェクト（以下、「前段フィルタ条件オブジェクト」という。）をカレント機能コネクタオブジェクトより取得する（Ｓ３０５）。続いて、前段フィルタ条件オブジェクトに対応するフィルタジョブオブジェクトをカレントジョブ開始トリガにイベント待ち対象として関連付け（Ｓ３０６）、待ちイベントは終了イベントであることをカレントジョブ開始トリガオブジェクトにセットする（Ｓ３０７）。これにより、これにより、カレントジョブ開始トリガと当該フィルタジョブオブジェクトとの間に関連ｒ９（図６参照）が形成される。
【０１５４】
続いて、カレント機能コネクタオブジェクトに対して「後段のフィルタ」として関連付けられているフィルタ条件オブジェクト（以下、「後段フィルタ条件オブジェクト」という。）をカレント機能コネクタオブジェクトより取得する（Ｓ３０８）。続いて、後段フィルタ条件オブジェクトに対応するフィルタジョブオブジェクトを「ジョブ開始指示対象」として関連付ける（Ｓ３０９）。これにより、これにより、カレントジョブ開始トリガと当該フィルタジョブオブジェクトとの間に関連ｒ１０（図６参照）が形成される。
【０１５５】
なお、ステップＳ３０４〜Ｓ３０９の処理は、図１２（Ｄ）に示される内容を実現するものである。また、ジョブ開始トリガオブジェクトには、「終了イベント待ち」としてのフィルタジョブオブジェクトと、「ジョブ開始指示対象」としてのフィルタジョブオブジェクトとを複数関連付けることが可能である。
【０１５６】
ステップＳ３０３〜Ｓ３０９の処理が出力順設定リストに含まれる全ての機能コネクタオブジェクトに対して実行されると（Ｓ３１０でＹＥＳ）、図２０の処理は終了する。なお、ステップＳ３０１において、出力順の設定は無いと判定された場合（Ｓ３０１でＮＯ）、ステップＳ３０２以降の処理は実行されない。
【０１５７】
続いて、図１７のステップＳ２５６において実行される処理の詳細について説明する。図２１は、リクエスト管理部による最初に実行される出力系のフィルタジョブの選別処理を説明するためのフローチャートである。
【０１５８】
ステップＳ３５１において、条件ツリーを参照し、出力順の設定の有無を判定する。この処理は、図２０のステップＳ３０１と同様である。出力順の設定が有る場合（Ｓ３５１でＹＥＳ）、「出力順」を管理する機能コネクタオブジェクトの一覧（出力順設定リスト）を条件ツリーより取得する（Ｓ３５２）。続いて、出力順設定リストより一つの機能コネクタオブジェクト（出力順設定）を取り出す（Ｓ３５３）。ここで、取り出された機能コネクタオブジェクトを、以下「カレント機能コネクタオブジェクト」という。続いて、カレント機能コネクタオブジェクトに対して「後段のフィルタ」として関連付けられているフィルタ条件オブジェクト（以下、「後段フィルタ条件オブジェクト」という。）をカレント機能コネクタオブジェクトより取得する（Ｓ３５４）。続いて、後段フィルタ条件オブジェクトを除外リストに追加する（Ｓ３５５）。
【０１５９】
ここで、除外リストとは、最初の実行対象から除外される出力フィルタに関するフィルタ条件オブジェクトを後述の処理のために保持しておくためのリストである。本実施の形態の複合機１では、出力順において後に実行される出力フィルタは、最初の実行対象とはされない。したがって、後段フィルタ条件オブジェクトは除外リストに登録される。
【０１６０】
ステップＳ３０３〜Ｓ３０９の処理が出力順設定リストに含まれる全ての機能コネクタオブジェクトに対して実行されると（Ｓ３５６でＹＥＳ）、ステップＳ３５７に進む。
【０１６１】
また、ステップＳ３５１において、出力順の設定は無いと判定された場合は（Ｓ３５１でＮＯ）、ステップＳ３５２〜Ｓ３５６の処理は実行されずにステップＳ３５７に進む。
【０１６２】
ステップＳ３５７以降では、条件ツリーの構成するフィルタ条件オブジェクトの中で、出力フィルタのフィルタ条件オブジェクトを全て探索し、探索されたフィルタ条件オブジェクトから除外リストに含まれているフィルタ条件オブジェクトを除外することで、最初に実行される出力フィルタジョブを特定している。
【０１６３】
ステップＳ３５７において、「フィルタ接続」を管理する機能コネクタオブジェクト（すなわち、関連ｒ１（図６参照）に係る機能コネクタオブジェクト。図９の例ではフィルタ接続オブジェクト４４１〜４４４が相当する。）の一覧（以下「フィルタ接続情報リスト」という。）を条件ツリーより取得する。続いて、フィルタ接続情報リストより一つの機能コネクタオブジェクト（フィルタ接続情報）を取り出す（Ｓ３５８）。ここで、取り出された機能コネクタオブジェクトを、以下「機能コネクタオブジェクトＡ」という。続いて、機能コネクタオブジェクトＡに対して「後段のフィルタ」として関連付けられているフィルタ条件オブジェクト（以下、「Ａ後段フィルタ条件オブジェクト」という。）を機能コネクタオブジェクトＡより取得する（Ｓ３５９）。
【０１６４】
続いて、出力フィルタのフィルタ条件オブジェクトの探索に用いるフラグ変数（ＦＯＵＮＤ変数）にＦＡＬＳＥを代入することにより初期化する（Ｓ３６０）。続いて、フィルタ接続情報リストより、機能コネクタオブジェクトＡの次の機能コネクタオブジェクトを取り出す。ここで取り出された機能コネクタオブジェクトを、以下「機能コネクタオブジェクトＢ」という。続いて、機能コネクタオブジェクトＢに対して「前段のフィルタ」として関連付けられているフィルタ条件オブジェクト（以下、「Ｂ前段フィルタ条件オブジェクト」という。）を機能コネクタオブジェクトＢより取得する（Ｓ３６２）。
【０１６５】
続いて、Ａ後段オブジェクトとＢ前段オブジェクトとが同一か否かを判定する（Ｓ３６３）。同一である場合、Ａ後段オブジェクトは、出力フィルタのフィルタ条件オブジェクトではないため、ＦＯＵＮＤ変数にＴＲＵＥを代入し（Ｓ３６４）、ステップＳ３６７に進む。一方、Ａ後段オブジェクトとＢ前段オブジェクトとが同一では無い場合、フィルタ接続情報リストにおいて、機能コネクタオブジェクトＡ以外で機能コネクタオブジェクトＢとして処理対象とされていない機能コネクタオブジェクト（未処理の機能コネクタオブジェクト）が存在するか否かを判定する（Ｓ３６５）。未処理の機能コネクタオブジェクトが存在する場合（Ｓ３６５でＮＯ）、ステップＳ３６０に戻る。未処理の機能コネクタオブジェクトが存在しない場合（Ｓ３６５でＹＥＳ）、ステップＳ３６７に進む。
【０１６６】
ステップＳ３６７に進む段階で、Ａ後段オブジェクトと同一のＢ前段オブジェクトが存在した場合は、ＦＯＵＮＤ変数の値はＴＲＵＥであり、Ａ後段オブジェクトと同一のＢ前段オブジェクトが存在しなかった場合は、ＦＯＵＮＤ変数の値はＦＡＬＳＥである。ＦＯＵＮＤの値がＴＲＵＥであるということは、Ａ後段オブジェクトは出力フィルタのフィルタ条件オブジェクトではないということになる。一方、ＦＯＵＮＤ変数の値がＦＡＬＳＥであるということは、Ａ後段オブジェクトは出力フィルタのフィルタ条件オブジェクトであるということになる。
【０１６７】
この点について、図９（Ｂ）の条件ツリーを用いて具体的に説明する。当該条件ツリーでは、印刷条件オブジェクト５２３及び保管条件オブジェクト５２５が出力フィルタのフィルタ条件オブジェクトである。この二つのフィルタ条件オブジェクトには、当該オブジェクトを「後段のフィルタ」とする機能コネクタオブジェクトは存在するが、当該オブジェクトを「前段のフィルタ」とする機能コネクタオブジェクトは存在しない。一方、出力フィルタ以外のフィルタのフィルタ条件オブジェクトには、当該オブジェクトを「前段のフィルタ」とする機能コネクタオブジェクトと、当該オブジェクトを「後段のフィルタ」とする機能コネクタオブジェクトとが存在する。ステップＳ３６０〜Ｓ３６５では、条件ツリーの斯かる特性に基づいて、Ａ後段オブジェクトが出力フィルタの機能コネクタオブジェクトであるか否かを特定しているのである。したがって、ＦＯＵＮＤの値がＦＡＬＳＥの場合、Ａ後段オブジェクトは出力フィルタのフィルタ条件オブジェクトであると判定できる。
【０１６８】
続いて、ステップＳ３６７においてＦＯＵＮＤ変数の値がＴＲＵＥであるか否か（すなわち、Ａ後段オブジェクトが出力フィルタのフィルタ条件オブジェクトであるか否か）を判定する。ＦＯＵＮＤ変数の値がＴＲＵＥでない場合（Ａ後段オブジェクトが出力フィルタのフィルタ条件オブジェクトである場合）（Ｓ３６７でＹＥＳ）、Ａ後段オブジェクトが除外リストに含まれているか否かを判定する（Ｓ３６８）。除外リストに含まれていない場合（Ｓ３６８でＹｅｓ）、Ａ後段オブジェクトに対応するフィルタジョブオブジェクトをジョブツリーの文書操作ジョブオブジェクト（例えば、図１０におけるコピー蓄積ジョブオブジェクト４３１）に「最初に実行する出力系ジョブ」として関連付ける（Ｓ３６９）。これにより、文書操作オブジェクトと出力フィルタのフィルタジョブオブジェクトとの間に関連ｒ８（図６参照）が形成される。
【０１６９】
フィルタ接続情報リストに含まれている全ての機能コネクタオブジェクトが機能コネクタオブジェクトＡとして処理されると（Ｓ３７０でＹＥＳ）、図２１の処理は終了する。なお、一つの文書操作ジョブオブジェクトには、「最初に実行する出力計ジョブ」として複数のフィルタジョブオブジェクトが関連付けられ得る。
【０１７０】
次に、図１７におけるステップＳ２６１のジョブの実行要求に応じて実行される処理について説明する。図２２及び図２３は、フィルタジョブの実行処理を説明するためのシーケンス図である。図２２及び図２３中、図１６、図１７、図９、又は図１０と同一部分には同一符号を付している。
【０１７１】
コピー蓄積ジョブＦ／Ｗ４３１Ｆよりジョブの実行要求を受け付けると（Ｓ２６１）、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、ジョブツリーを構成する各フィルタジョブオブジェクト（すなわち、コピー蓄積オブジェクト４３１との間に関連ｒ７（図６参照）を有するフィルタジョブオブジェクト）に対して、ジョブの優先度の設定（Ｓ４０１）、ジョブグループの設定（Ｓ４０２）、制御モードの取得（Ｓ４０３、Ｓ４０４）、ジョブエントリの設定（Ｓ４０５）を行う。制御モードとは、他のフィルタジョブと同期をとる必要があるか並列的に実行可能かを示す情報をいう。ジョブエントリの設定は、当該ジョブをスケジュール管理下に置くことをいう。
【０１７２】
各フィルタジョブオブジェクトは、当該フィルタのフィルタジョブの実行の可否を示す通知（実行可否通知）をコピー蓄積ジョブＦ／Ｗ４３１Ｆに対して行う（Ｓ４０６）。コピー蓄積ジョブＦ／Ｗ４３１Ｆは、各フィルタジョブオブジェクトより受けた実行可否通知の全てが実行可能であることを示していると、各フィルタオブジェクトに対してジョブの実行準備を要求する（Ｓ４０７）。各フィルタオブジェクトは、リソースの確保等の実行準備を行い、ジョブの実行準備の成否をコピー蓄積ジョブＦ／Ｗ４３１Ｆに通知する（Ｓ４０８）。全てのフィルタジョブオブジェクトが実行準備に成功すると、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、各フィルタジョブオブジェクトに制御モードを設定する（Ｓ４０９）。ここで設定される制御モードは、ステップＳ４０４において各フィルタジョブオブジェクトより取得された制御モードに基づいて、コピー蓄積ジョブＦ／Ｗ４３１Ｆが、各フィルタジョブの整合性が図れるように調整した結果としての制御モードである。
【０１７３】
なお、図中では、Ｓ４０１〜Ｓ４０９は、読取ジョブオブジェクト５３１に対してのみ実行されるように示されているが、上記の説明の通り、ジョブツリーを構成する各フィルタジョブに対して行われる。
【０１７４】
続いて、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、コピー蓄積機能の文書操作ジョブの実行を開始する（Ｓ４１０）。すなわち、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、各フィルタジョブオブジェクトに対し、それぞれのフィルタジョブの実行開始を指示する（Ｓ４１１、Ｓ４１２、Ｓ４１３）。ここで、入力フィルタ、変換フィルタ、出力フィルタを問わず、フィルタ間の接続関係における前のフィルタの実行の完了を待たずに各フィルタジョブオブジェクトに対して並列的に実行開始が指示される。但し、出力フィルタのフィルタジョブオブジェクトに関しては、コピー蓄積ジョブオブジェクト４３１に対して「最初に実行する出力系ジョブ」として登録されているもの（関連ｒ８（図６参照）を有するもの）のみが実行開始の指示対象とされる。したがって、例えば、図９の例では、保管ジョブオブジェクト５３５には、この時点ではジョブの実行開始は指示されない。なお、「最初に実行する出力系ジョブ」として登録されているフィルタジョブオブジェクトが複数有る場合、複数のフィルタジョブオブジェクトが、この時点で実行開始指示の対象とされる。
【０１７５】
実行開始を指示されたフィルタジョブオブジェクトは、当該フィルタジョブの実行を制御する。制御モードとして、同期モード（前のフィルタの実行の完了後に自らのジョブの実行を開始するモード）が設定されている場合、フィルタは自分の入力側のパイプにデータが入力されるまで待機する。この場合、前のフィルタがジョブの実行結果としての画像データをパイプに出力すると、当該フィルタは自らのジョブの実行を開始する。すなわち、フィルタ間の同期はパイプによってとられる。但し、入力フィルタには、入力側にパイプは存在しない。したがって、入力フィルタは実行開始指示に応じて処理を開始する。
【０１７６】
その後、各フィルタジョブオブジェクトは、ジョブの状態が変化すると、変化後のジョブの状態（ジョブの終了や中断等）を示すイベントを「状態通知先」として関連付けられているコピー蓄積ジョブＦ／Ｗ４３１Ｆとジョブ開始トリガオブジェクト４５１とに通知する（図２３：Ｓ４２１、Ｓ４２２、Ｓ４２５、Ｓ４２６、Ｓ４２９、Ｓ４３０）。
【０１７７】
コピー蓄積ジョブＦ／Ｗ４３１Ｆは、各フィルタジョブオブジェクトより通知されるイベントの内容に応じた処理を実行する（Ｓ４２３、Ｓ４２７、Ｓ４３１）。また、ジョブ開始トリガオブジェクト４５１も、通知されたイベントの内容に応じた処理を実行する（Ｓ４２４、Ｓ４２８、Ｓ４３２）。特に、実行対象とされているアクティビティ３１（機能）が多出力の場合、ジョブ開始トリガオブジェクト４５１は、「終了イベント待ち」として関連ｒ９（図６参照）によって関連付けられているフィルタジョブオブジェクト（すなわち、先に実行される出力フィルタのフィルタジョブオブジェクト。コピー蓄積機能では印刷ジョブオブジェクト５３３が相当する。）から終了イベントが通知されると、「ジョブ開始指示対象」として関連ｒ１０（図６参照）によって付けられているフィルタジョブオブジェクト（すなわち、後に実行される出力フィルタのフィルタオブジェクト。コピー蓄積機能では保管ジョブオブジェクト５３５が相当する。）に対して、ジョブの実行開始を指示する（Ｓ４３３）。
【０１７８】
このように、「最初に実行する出力系ジョブ」の対象から除外された出力フィルタに対しては、先に実行されるべき出力フィルタのフィルタジョブの実行の完了に応じ、ジョブ開始トリガオブジェクト４５０よりジョブの実行開始が指示される。これによって、多出力の場合であっても、適切に出力順が制御される。本実施の形態におけるコピー蓄積機能であれば、印刷フィルタ３２１による印刷の完了後に、保管文書登録フィルタ３２２によるデータ保存が行われる。
【０１７９】
「最初に実行する出力系ジョブ」でないフィルタジョブオブジェクトも、ジョブの実行開始の指示元が異なるだけであり、ジョブの実行の開始後の振る舞いは他のフィルタジョブオブジェクトと同様である。したがって、ジョブの状態が変化すると、変化後のジョブの状態を示すイベントを「状態通知先」として関連付けられているコピー蓄積ジョブＦ／Ｗ４３１Ｆに通知する（Ｓ４３４）。コピー蓄積ジョブＦ／Ｗ４３１Ｆは、当該フィルタジョブオブジェクトより通知されるイベントの内容に応じた処理を実行する（Ｓ４３５）。
【０１８０】
全てのフィルタジョブオブジェクトよりジョブの終了イベントが通知されると、コピー蓄積ジョブＦ／Ｗ４３１Ｆは、コピー蓄積機能の文書操作ジョブの終了をリクエストオブジェクト２２０１及びＵＩコンテンツ１２０１に通知する（Ｓ４３６、Ｓ４３７）。
【０１８１】
続いて、図２３のステップＳ４２３、Ｓ４２７、Ｓ４３１、及びＳ４３５等において、コピー蓄積ジョブＦ／Ｗ４３１Ｆ（文書操作ジョブオブジェクト）によって実行される処理について説明する。図２４は、文書操作ジョブオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【０１８２】
ステップＳ５０１において、フィルタジョブオブジェクトよりイベントを受信する。続いて、イベントがフィルタジョブの終了イベントであるか否かを判定する（Ｓ５０２）。終了イベントである場合（Ｓ５０２でＹＥＳ）、イベントの送信元のフィルタジョブオブジェクトのフィルタジョブが終了したこと（ジョブの終了記録）を記憶装置上のジョブ終了チェックリストに追加記録しておく（Ｓ５０３）。続いて、ジョブ終了チェックリストに記録されている全てのフィルタジョブの終了記録を読み出し（Ｓ５０４）、ジョブツリーを構成する全てのフィルタジョブオブジェクトのジョブ（フィルタジョブ）が終了したか否かを判定する（Ｓ５０５）。全てのフィルタジョブが終了した場合（Ｓ５０５でＹＥＳ）、文書操作ジョブが終了したこと状態通知先（図２３の例では、リクエストオブジェクト２２０１及びＵＩコンテンツ１２０１）に通知する（Ｓ５０６）。全てのフィルタジョブが終了していない場合（Ｓ５０５でＮＯ）、文書操作ジョブの終了通知は実行しないで図２４の処理を終了する。なお、受信したイベントが終了イベントではない場合（Ｓ５０２でＮＯ）、当該イベントに応じた処理を実行する（Ｓ５０７）。
【０１８３】
続いて、図２７のステップＳ５０７における他のイベント処理の一例として、フィルタジョブの中断イベントを受信した際の文書操作ジョブオブジェクトによる処理について説明する。図２５は、中断イベントを受信した際の文書操作ジョブオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【０１８４】
ステップＳ５２１において、フィルタジョブオブジェクトよりイベントを受信する。続いて、イベントがジョブの中断イベントであるか否かを判定する（Ｓ５２２）。中断イベントである場合（Ｓ５２２でＹＥＳ）、中断の原因は入力側のパイプへのデータの入力待ちであるか否かを、中断イベントに含まれている中断の原因を示す情報に基づいて判定する（Ｓ５２３）。中断の原因が入力側のパイプへのデータの入力待ちである場合（Ｓ５２３でＹＥＳ）、リソースの開放可否判断及び文書操作ジョブの中断状態への移行処理を実行し（Ｓ５２４）、図２５の処理を終了する。なお、ステップＳ５２４の詳細については後述する。
【０１８５】
中断の原因が入力側のパイプへのデータの入力待ちでない場合（Ｓ５２３でＮＯ）、再開可能な中断であるか否かを、中断イベントに含まれている再開の可否を示す情報に基づいて判定する（Ｓ５２５）。再開が可能である場合（Ｓ５２５でＹＥＳ）、中断イベントに含まれている情報に基づいて、再開の指示（フィルタジョブオブジェクトに対するフィルタジョブの再開指示）が必要な中断であるか否かを判定する（Ｓ５２６）。再開の指示が必要である場合（Ｓ５２６でＹＥＳ）、中断イベントの送信元のフィルタジョブオブジェクトに対しては、再開指示が必要であることを中断の原因と共に記憶装置に記録しておく（Ｓ５２７）。再開の指示が必要でない場合は（Ｓ５２６でＮＯ）、ステップＳ５２７は実行されない。続いて、文書操作ジョブオブジェクトは、中断状態に移行し（Ｓ５２８）、図２５の処理を終了する。
【０１８６】
一方、再開可能な中断ではないと判定した場合（Ｓ５２５でＮＯ）、全てのフィルタジョブオブジェクトに対してジョブのキャンセルを指示し（Ｓ５２９）、図２５の処理を終了する。
【０１８７】
また、受信したイベントが中断イベントでない場合（Ｓ５２２でＮＯ）、当該イベントに応じた処理を実行する（Ｓ５３０）。
【０１８８】
続いて、図２５のステップＳ５２４における処理の詳細について説明する。図２６は、文書操作ジョブオブジェクトによるリソースの開放可否判断及び文書操作ジョブの中断状態への移行処理を説明するためのフローチャートである。
【０１８９】
ステップＳ５４１において、変換フィルタ及び出力フィルタのフィルタジョブオブジェクトに対し、各フィルタジョブにおいて利用されているリソースの開放の可否を問い合わせる。ここで、リソースとは、例えば、メモリや、当該フィルタに特有の処理に関するハードウェア（例えば、プロッタ等）等が相当する。続いて、問い合わせの結果、全てのフィルタジョブのリソースが開放可能であるか否かを判定する（Ｓ５４２）。全てのフィルタジョブのリソースが開放可能である場合（Ｓ５４２でＹＥＳ）、全てのフィルタジョブオブジェクトに対してフィルタジョブの中断を指示する（Ｓ５４３）。少なくとも一つのフィルタジョブのリソースが開放不可能である場合は（Ｓ５４２でＮＯ）、ステップＳ５４３は実行されない。続いて、文書操作ジョブオブジェクトは、中断状態に移行し（Ｓ５４４）、図２５の処理を終了する。
【０１９０】
次に、図２３のステップＳ４２４、Ｓ４２８、及びＳ４３２等において、ジョブ開始トリガオブジェクト４５１によって実行される処理について説明する。図２７は、ジョブ開始トリガオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【０１９１】
ステップＳ５５１において、フィルタジョブオブジェクトよりイベントを受信する。続いて、イベントがジョブの終了イベントであるか否かを判定する（Ｓ５５２）。終了イベントである場合（Ｓ５５２でＹＥＳ）、終了イベントの送信元のフィルタジョブオブジェクトは、「終了イベント待ち」として関連ｒ９（図６参照）によって関連付けられているフィルタジョブオブジェクトであるか否かを判定する（Ｓ５５３）。当該判定は、関連ｒ９に基づいて行えばよい。イベントの送信元が、「終了イベント待ち」のフィルタジョブオブジェクトである場合（Ｓ５５３でＹＥＳ）、「ジョブ開始指示対象」として関連ｒ１０（図６参照）によって付けられているフィルタジョブオブジェクト（すなわち、後に実行される出力フィルタのフィルタオブジェクトに対してフィルタジョブの実行開始を指示する（Ｓ５５４）。ここで、ジョブ開始トリガオブジェクトに「終了イベント待ち」として複数のフィルタジョブオブジェクトが関連付けられている場合、ジョブ開始トリガオブジェクトは、当該複数のフィルタジョブオブジェクトの全てから終了イベントが受信されてから、「ジョブ開始指示対象」として関連付けられているフィルタジョブオブジェクトに対して実行開始を指示する。また、「ジョブ開始指示対象」として複数のフィルタジョブオブジェクトが関連付けられている場合、当該複数のフィルタジョブオブジェクトに対して実行開始を指示する。なお、イベントが終了イベントでない場合は、ステップＳ５５３及びＳ５５４は実行されない。
【０１９２】
上述したように本実施の形態における複合機１によれば、各フィルタを部品として各機能を構築するため、機能のカスタマイズ又は拡張を簡便に行うことができる。すなわち、各フィルタ間には、機能的な依存関係はなく独立性が保たれているため、フィルタの新たな追加やフィルタの組み合わせの変更によって、新たな機能（アプリケーション）を容易に開発することができる。したがって、新たなアプリケーションの実装が要求された場合、当該アプリケーションの一部の処理について実装されていない場合は、当該一部の処理を実現するフィルタのみを開発し、インストールすればよい。よって、コントロール層２０及びアプリケーションロジック層３０より下位の層について、新たなアプリケーションの実装に応じて発生する修正の頻度を低下させることができ、安定したプラットフォームを提供することができる。
【０１９３】
また、フィルタの組み合わせによって構成される機能をアクティビティとして予め定義しておくことにより、より簡便な操作で、フィルタの組み合わせ（接続）による機能を利用することができる。
【０１９４】
また、アクティビティが多出力の場合に、フィルタの接続関係において並列的な関係にある複数の出力フィルタ間の実行順を制御することが可能である。したがって、フィルタの実行順に関して、柔軟な制御が可能である。
【０１９５】
なお、本実施の形態において、ジョブ開始トリガクラス４５０（ジョブ開始トリガオブジェクト４５１）は、出力順制御手段の一例に相当する。したがって、ジョブ開始トリガオブジェクト４５１とフィルタジョブオブジェクトとの間に形成される関連ｒ１０及び関連ｒ１１は、出力順情報に相当する。
【０１９６】
ところで、以下に複合機１のハードウェア構成の一例を示す。図２８は、本発明の実施の形態における複合機のハードウェア構成の一例を示す図である。
【０１９７】
複合機１のハードウェアとしては、コントローラ２０１と、オペレーションパネル２０２と、ファクシミリコントロールユニット（ＦＣＵ）２０３と、撮像部１２１と、印刷部１２２が存在する。
【０１９８】
コントローラ２０１は、ＣＰＵ２１１、ＡＳＩＣ２１２、ＮＢ２２１、ＳＢ２２２、ＭＥＭ−Ｐ２３１、ＭＥＭ−Ｃ２３２、ＨＤＤ（ハードディスクドライブ）２３３、メモリカードスロット２３４、ＮＩＣ（ネットワークインタフェースコントローラ）２４１、ＵＳＢデバイス２４２、ＩＥＥＥ１３９４デバイス２４３、セントロニクスデバイス２４４により構成される。
【０１９９】
ＣＰＵ２１１は、種々の情報処理用のＩＣである。ＡＳＩＣ２１２は、種々の画像処理用のＩＣである。ＮＢ２２１は、コントローラ２０１のノースブリッジである。ＳＢ２２２は、コントローラ２０１のサウスブリッジである。ＭＥＭ−Ｐ２３１は、複合機１のシステムメモリである。ＭＥＭ−Ｃ２３２は、複合機１のローカルメモリである。ＨＤＤ２３３は、複合機１のストレージである。メモリカードスロット２３４は、メモリカード２３５をセットするためのスロットである。ＮＩＣ２４１は、ＭＡＣアドレスによるネットワーク通信用のコントローラである。ＵＳＢデバイス２４２は、ＵＳＢ規格の接続端子を提供するためのデバイスである。ＩＥＥＥ１３９４デバイス２４３は、ＩＥＥＥ１３９４規格の接続端子を提供するためのデバイスである。セントロニクスデバイス２４４は、セントロニクス仕様の接続端子を提供するためのデバイスである。オペレーションパネル２０２は、オペレータが複合機１に入力を行うためのハードウェア（操作部）であると共に、オペレータが複合機１から出力を得るためのハードウェア（表示部）である。
【０２００】
なお、図１等に示されるソフトウェアは、例えば、ＭＥＭ−Ｃ２３２に格納され、ＣＰＵ２１１によって処理されることによりその機能を複合機に実行させる。
【０２０１】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【図面の簡単な説明】
【０２０２】
【図１】本発明の実施の形態における複合機のソフトウェア構成例を示す図である。
【図２】パイプ＆フィルタの概念を説明するための図である。
【図３】本実施の形態の複合機における各機能を実現するためのフィルタの組み合わせの例を示す図である。
【図４】フィルタの構成要素を説明するための図である。
【図５】アクティビティの構成要素を説明するための図である。
【図６】アクティビティロジックとフィルタロジックとの文書操作に関するクラス構成例を示す図である。
【図７】多出力のアクティビティにおけるフィルタの接続関係の一例を示す図である。
【図８】コピー蓄積機能のフィルタ構成例を示す図である。
【図９】コピー蓄積機能の動作条件を表現するオブジェクト図の例である。
【図１０】コピー蓄積機能の文書操作ジョブを表現するオブジェクト図の例である。
【図１１】文書操作の実行処理の概要を説明するためのアクティビティ図である。
【図１２】条件ツリーに基づくジョブツリーの生成を説明するための図である。
【図１３】条件ツリーの生成処理を説明するためのシーケンス図である。
【図１４】条件ツリーの生成処理を説明するためのシーケンス図である。
【図１５】条件ツリーの生成処理の説明において生成される条件ツリーを示す図である。
【図１６】ジョブツリーの生成及びジョブの実行処理を説明するためのシーケンス図である。
【図１７】ジョブツリーの生成及びジョブの実行処理を説明するためのシーケンス図である。
【図１８】フィルタ条件オブジェクトとフィルタジョブオブジェクトとの対応情報を示す図である。
【図１９】フィルタとパイプの対応テーブルの例を示す図である。
【図２０】リクエスト管理部による多出力の場合のジョブツリーに対する出力順の設定処理を説明するためのフローチャートである。
【図２１】リクエスト管理部による最初に実行される出力系のフィルタジョブの選別処理を説明するためのフローチャートである。
【図２２】フィルタジョブの実行処理を説明するためのシーケンス図である。
【図２３】フィルタジョブの実行処理を説明するためのシーケンス図である。
【図２４】文書操作ジョブオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【図２５】中断イベントを受信した際の文書操作ジョブオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【図２６】文書操作ジョブオブジェクトによるリソースの開放可否判断及び文書操作ジョブの中断状態への移行処理を説明するためのフローチャートである。
【図２７】ジョブ開始トリガオブジェクトによるイベント処理の処理手順を説明するためのフローチャートである。
【図２８】本発明の実施の形態における複合機のハードウェア構成の一例を示す図である。
【符号の説明】
【０２０３】
１          複合機
１０        ユーザインタフェース層
１１        通信サーバ部
１２        ローカルＵＩ部
２０        コントロール層
２１        プラグイン管理部
２２        リクエスト管理部
３０        アプリケーションロジック層
３１        アクティビティ
３１ａ      コピーアクティビティ
３１ｂ      プリンタアクティビティ
３１ｃ      マルチ文書アクティビティ
３３        フィルタ管理部
４０        デバイスサービス層
４１        画像パイプ
４２        データ管理部
４３        パイプ管理部
５０        デバイス制御層
５１        スキャナ制御部
５２        プロッタ制御部
５３        メモリ制御部
５４        Ｔｅｌ回線制御部
５５        ネットワーク制御部
６０        対応テーブル（対応関係管理手段の一例）
２０１      コントローラ
２０２      オペレーションパネル
２０３      ファクシミリコントロールユニット
２１１      ＣＰＵ
２１２      ＡＳＩＣ
２２１      ＮＢ
２２２      ＳＢ
２３１      ＭＥＭ−Ｐ
２３２      ＭＥＭ−Ｃ
２３３      ＨＤＤ
２３４      メモリカードスロット
２３５      メモリカード
２４１      ＮＩＣ
２４２      ＵＳＢデバイス
２４３      ＩＥＥＥ１３９４デバイス
２４４      セントロニクスデバイス
３０１      読取フィルタ
３０２      保管文書読出フィルタ
３０３      メール受信フィルタ
３０４      ＦＡＸ受信フィルタ
３０５      ＰＣ文書受信フィルタ
３０６      レポートフィルタ
３１１      文書変換フィルタ
３１２      文書変換フィルタ
３２１      印刷フィルタ
３２２      保管文書登録フィルタ
３２３      メール送信フィルタ
３２４      ＦＡＸ送信フィルタ
３２５      ＰＣ文書送信フィルタ
３２６      プレビューフィルタ
４１０      アプリケーションロジッククラス
４１０Ｃ    アプリケーションロジック具象
４１０Ｆ    アプリケーションロジックＦ／Ｗ
４２０      文書操作条件クラス
４２１      コピー蓄積条件オブジェクト
４２１Ｆ    コピー蓄積条件Ｆ／Ｗ
４３０      文書操作ジョブクラス
４３１      コピー蓄積ジョブオブジェクト
４３１Ｃ    コピー蓄積ジョブ具象
４３１Ｆ    コピー蓄積ジョブＦ／Ｗ
４４０      機能コネクタクラス
４４１、４４２、４４３、４４４、    フィルタ接続オブジェク
４４５      出力順オブジェクト
４５０      ジョブ開始トリガクラス
４５１      トリガＡオブジェクト
４６０      ジョブ状態通知先
５１０      フィルタロジッククラス
５２０      フィルタ条件クラス
５２１      読取条件オブジェクト
５２２      加工Ａ条件オブジェクト
５２３      印刷条件オブジェクト
５２４      加工Ｂ条件オブジェクト
５２５      保管条件オブジェクト
５３０      フィルタジョブクラス
５３１      読取ジョブオブジェクト
５３２      加工Ａジョブオブジェクト
５３３      印刷ジョブオブジェクト
５３４      加工Ｂジョブオブジェクト
５３５      保管ジョブオブジェクト
５４０      パイプジョブクラス
５４１、５４２、５４３、５４４    パイプジョブオブジェクト
【図１】
0005057899.tif 000002
【図２】
0005057899.tif 000003
【図３】
0005057899.tif 000004
【図４】
0005057899.tif 000005
【図５】
0005057899.tif 000006
【図６】
0005057899.tif 000007
【図７】
0005057899.tif 000008
【図８】
0005057899.tif 000009
【図９】
0005057899.tif 000010
【図１０】
0005057899.tif 000011
【図１１】
0005057899.tif 000012
【図１２】
0005057899.tif 000013
【図１３】
0005057899.tif 000014
【図１４】
0005057899.tif 000015
【図１５】
0005057899.tif 000016
【図１６】
0005057899.tif 000017
【図１７】
0005057899.tif 000018
【図１８】
0005057899.tif 000019
【図１９】
0005057899.tif 000020
【図２０】
0005057899.tif 000021
【図２１】
0005057899.tif 000022
【図２２】
0005057899.tif 000023
【図２３】
0005057899.tif 000024
【図２４】
0005057899.tif 000025
【図２５】
0005057899.tif 000026
【図２６】
0005057899.tif 000027
【図２７】
0005057899.tif 000028
【図２８】
0005057899.tif 000029