以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態における画像形成装置のハードウェア構成の一例を示す図である。図1では、画像形成装置の具体例として、プリンタ、コピー、スキャナ、又は、ファクス等の複数の機能を一台の筐体において実現する複合機1のハードウェア構成が示されている。
複合機1のハードウェアとしては、コントローラ101と、オペレーションパネル102と、ファクシミリコントロールユニット(FCU)103と、撮像部104と、印刷部105が存在する。
コントローラ101は、CPU111、ASIC112、NB121、SB122、MEM−P131、MEM−C132、HDD(ハードディスクドライブ)133、メモリカードスロット134、NIC(ネットワークインタフェースコントローラ)141、USBデバイス142、IEEE1394デバイス143、セントロニクスデバイス144により構成される。
CPU111は、種々の情報処理用のICである。ASIC112は、種々の画像処理用のICである。NB121は、コントローラ101のノースブリッジである。SB122は、コントローラ101のサウスブリッジである。MEM−P131は、複合機1のシステムメモリである。MEM−C132は、複合機1のローカルメモリである。HDD133は、複合機1のストレージである。メモリカードスロット134は、メモリカード135をセットするためのスロットである。NIC141は、MACアドレスによるネットワーク通信用のコントローラである。USBデバイス142は、USB規格の接続端子を提供するためのデバイスである。IEEE1394デバイス143は、IEEE1394規格の接続端子を提供するためのデバイスである。セントロニクスデバイス144は、セントロニクス仕様の接続端子を提供するためのデバイスである。オペレーションパネル102は、オペレータが複合機1に入力を行うためのハードウェア(操作部)であると共に、オペレータが複合機1から出力を得るためのハードウェア(表示部)である。
図2は、本発明の実施の形態における複合機のソフトウェア構成例を示す図である。同図において、複合機1は、OS20、ドライバプログラム21、JVM30、CDC31、Foundation Profile32、MFPプロファイル40、ネイティブモジュール50、及びアプリケーション60等を有する。
OS20は、いわゆるOS(Operating System)である。ドライバプログラム21は、ハードウェアを制御する各種のプロラムモジュールである。JVM30は、Java(登録商標) Virtual Machine(仮想マシン)であり、Java(登録商標)の実行環境を実現する。CDC(Connected Device Configuration)31及びFoundation Profile32は、Java(登録商標) Micro Editionの基本構成である。
MFPプロファイル40は、複合機1用のアプリケーション60の開発環境及び実行環境を提供するプラットフォーム(プログラムモジュール群)である。より詳しくは、MFPプロファイル40は、複合機1にジョブを実行させるためのJava(登録商標)インタフェース(API(Application Program Interface))をアプリケーション60に提供し、当該インタフェースの呼び出しに応じて複合機1を制御する。なお、MFP(Multifunction Peripheral)とは、複合機の略称である。
ネイティブモジュール50は、ネイティブコードによって記述されたプログラムモジュール群である。ネイティブモジュール50は、例えば、C言語やC++言語によるインタフェース(API)をアプリケーション60に提供し、当該インタフェースの呼び出しに応じて複合機1を制御する。
アプリケーション60は、複合機1にジョブを実行させるプログラムであり、プリントアプリ61、コピーアプリ62、スキャンアプリ63、FAXアプリ64等、ジョブ種別(印刷、コピー、スキャン、FAX送信等)に応じて複数のアプリケーション60が存在する。各アプリケーション60は、MFPプロファイル40又はネイティブモジュール50によって提供されるインタフェースに基づいて開発される。厳密には、Java(登録商標)コードによるアプリケーション60からはMFPプロファイル40が利用され、ネイティブコードによるアプリケーション60からはネイティブモジュール50が利用される。
本実施の形態において、MFPプロファイル40及びネイティブモジュール50のインタフェースは複合機1のメーカー外にも公開されている。したがって、アプリケーション60は、複合機1のメーカーだけでなく、サードベンダー等によっても開発可能である。ユーザから見た場合、複合機1を導入(設置)した後に、市場で販売されている新たなアプリケーション60を複合機1にインストールし、複合機1の機能強化を図ることができる。
本実施の形態では、特に、MFPプロファイル40について説明する。図3は、MFPプロファイルの構成例を示す図である。
同図において、MFPプロファイル40は、プレゼンテーション層41、ドメインロジック層42、及びサービス層43等より構成される。なお、図中における各層の上下関係は、層間の呼び出し関係(利用関係)に基づいている。基本的に上の層が下の層を呼び出す(利用する)。
プレゼンテーション層41は、アプリケーション60に公開されるインタフェース部分である。すなわち、プレゼンテーション層41は、アプリケーション60からの要求を受け付け、当該要求に対する応答をアプリケーション60に返却する。なお、アプリケーション60の開発者からはプレゼンテーション層41のみが興味の対象となる。
ドメインロジック層42は、プレゼンテーション層41によって受け付けられたアプリケーション60からの要求に応じ、複合機1にジョブを実行させるためのロジックが実装されている部分である。ドメインロジック層42は、その役割(責務)に応じて要求管理部421、I/Oファンクション部422、I/Oリソース管理部423、及びシステム管理部424等に細部化される。
要求管理部421は、プレゼンテーション層41によって受け付けられるアプリケーション60からの要求を管理する。I/Oファンクション部422は、ジョブ対するデータの入力やジョブの実行によるデータの出力等の機能を実現する。I/Oリソース管理部423は、撮像部104や印刷部105等のデータの入出力に関するハードウェアリソースを管理する。システム管理部424は、要求管理部421、I/Oファンクション部422、及びI/Oリソース管理部423等の横断的関心事(例えば、各部より共通に利用される情報)を管理する。
サービス層43は、デバイス、ミドルウェア、又はOS等へのアクセスを隠蔽する部分である。すなわち、サービス層43によって、複合機1の機種の違い、又は複合機1において利用されるミドルウェア又はOS等の違いが吸収される。
MFPプロファイル40の各層について更に詳しく説明する。図4は、第一の実施の形態におけるMFPプロファイルの各層のクラス構成例を示す図である。なお、同図のクラス群は、インタフェースを示す。したがって、実装は当該インタフェースに対する実装クラスにおいて行われる。以下において、「XXXクラスのインスタンス」というとき、XXXクラスの実装クラスのインスタンスを意味する。
同図において、プレゼンテーション層41は、サービス検索クラス411、入出力形式クラス412、要求属性値群クラス413、サービスクラス414、サービス属性値群クラス4141、ドキュメントクラス415、ドキュメント属性値群クラス4151、ジョブクラス416、及びジョブ属性値群クラス4161等を含む。
サービス検索クラス411のインスタンス(サービス検索オブジェクト)は、アプリケーション60からの要求に応じサービスを検索する。サービスとは、ジョブを実行に関係するソフトウェア及びハードウェアの集合(すなわち、ジョブの実行主体)をいう。サービスの検索条件は、入出力形式クラス412のインスタンスと要求属性値群クラス413のインスタンスとによって指定される。
入出力形式クラス412のインスタンス(入出力形式オブジェクト)は、ジョブの入力データ又は出力データのデータ形式を保持する。要求属性値群クラス413のインスタンス(要求属性値群オブジェクト)は、アプリケーション60から要求において指定されるジョブに対する設定値の集合を保持する。
サービスクラス414のインスタンス(サービスオブジェクト)は、サービスの代表を表現する。サービスクラス414の実装クラスはサービスごとに定義される。サービス属性値群クラス4141のインスタンス(サービス属性値群オブジェクト)は、サービスの状態を保持する。
ドキュメントクラス415のインスタンス(ドキュメントオブジェクト)は、ジョブに対して入力されるドキュメント(データ)を表現する。例えば、印刷ジョブであれば印刷データが相当する。ドキュメント属性値群クラス4151のインスタンス(ドキュメント属性値群オブジェクト)は、ドキュメントの属性を保持する。
ジョブクラス416のインスタンス(ジョブオブジェクト)は、ジョブを表現する。ジョブクラス416の実装クラスはジョブの種別ごとに定義される。ジョブ属性値群クラス4161のインスタンス(ジョブ属性値群オブジェクト)は、ジョブの状態を保持する。
また、ドメインロジック層42の要求管理部421は、成果物クラス4211を含む。成果物クラス4211のインスタンス(成果物オブジェクト)は、ジョブによる成果物を実現するための処理(すなわち、ジョブの実行制御)を行う。成果物オブジェクトは、成果物の構成要素や、成果物の進捗状況等を知っている。なお、成果物とは、例えば、1枚の原稿を3部コピーするというコピージョブであれば、3枚のコピー結果そのものをいう。
ドメインロジック層42のI/Oファンクション部422は、入力物クラス4221、原画像クラス4222、出力物クラス4223、出力要素クラス4224、及び出力束クラス4225等を含む。入力物クラス4221のインスタンス(入力物オブジェクト)は、ジョブに入力データに係る原稿の1枚又は1ページ(入力物)を表現する。したがって、入力物オブジェクトは、コピージョブやスキャンジョブ等、原稿から入力データが得られるジョブに利用される。入力物クラス4221は自らに対する再帰的な関連を有している。したがって、入力物オブジェクトは、チェーン構造で関連付けられることにより、複数枚の原稿を表現する。なお、本実施の形態において、便宜上、原稿の1枚と1ページとは等価であるとする。
原画像クラス4222のインスタンス(原画像オブジェクト)は、ジョブに対する入力画像を表現する。例えば、コピージョブであれば、スキャンされたスキャン画像を表現する。原画像オブジェクトは、画像の入力方法を知っており、また、入力処理の進捗状況(撮像部104による読み取りの進捗状況)を知っている。
出力物クラス4223のインスタンス(出力物オブジェクト)は、ジョブによる成果物の一部(出力物)を表現する。出力物オブジェクトは、成果物がどのような材料(入力物)で構成されているのかや、出力物の出力の実行可能条件等を知っている。出力物オブジェクトはまた、出力物の出力に必要な入力物を知っており、当該入力物に係る入力物オブジェクトに紐づいている。
出力束クラス4225のインスタンス(出力束オブジェクト)は、成果物がどのような順番(ソート順又はスタック順等)で構成されているかを知っている。出力要素クラス4224のインスタンス(出力要素オブジェクト)は、出力要素(出力面)の出力の方法を知っている。出力要素は、例えばコピージョブのときには印刷面を示す。
ドメインロジック層42のI/Oリソース管理部423は、入力リソースクラス4231及び出力リソースクラス4232等を含む。入力リソースクラス4231のインスタンス(入力リソースオブジェクト)は、データを入力するためのハードウェア資源(撮像部104等)を管理する。出力リソースクラス4232のインスタンス(出力リソースオブジェクト)は、データを出力するためのハードウェア資源(印刷部105等)を管理する。
ドメインロジック層42のシステム管理部424は、機内監視クラス4241を含む。機内監視クラス4241のインスタンス(機内監視オブジェクト)は、複合機1の状態を監視する。
以上の各層のクラス群の中で、プレゼンテーション層41に属するクラス群が、アプリケーション60に利用可能なインタフェースを提供する。斯かるプレゼンテーション層41のクラス群(インタフェース)は、JPS(Java(登録商標) Print Service)に準拠した構成を有している。換言すれば、プレゼンテーション層41において、JPSを提供することができる。ここで、JPSとは、Java(登録商標)プラットフォームにおいて印刷に関する制御を実行するための標準のAPI(Application Program Interface)である。このことは、印刷ジョブを実行するアプリケーション60の開発者は、JPSに関する知識を有していれば、MFPプロファイル40上に簡便に当該アプリケーション60を実装することができることを意味する。
図5は、JPSの概念モデルを示す図である。同図に示されるように、JPSは、ドキュメントインタフェース群、印刷ジョブインタフェース群、プリンタサービスインタフェース群より構成される。
ドキュメントインタフェース群におけるSimpleDocクラス及びDocインタフェース実装クラスは、印刷データを表現するクラスであり、本実施の形態のドキュメントクラス415に対応する。DocFlavorクラスは、印刷データのデータ形式を表現するクラスであり、本実施の形態の入出力形式クラス412に対応する。
印刷ジョブインタフェース群におけるDocPrintJobクラスは、印刷ジョブを表現するクラスであり、本実施の形態のジョブクラス416に対応する。PrintAttributeSet実装クラスは、印刷要求の属性値群を表現し、本実施の形態の要求属性値群クラス413に対応する。
プリントサービスインタフェース群におけるPrintService実装クラス及びDefaultPrintService実装クラス等は、印刷サービス(プリンタ)を表現するクラスであり、本実施の形態のサービスクラス414に対応する。PrintServiceLookUp実装クラスは、印刷サービス(プリンタ)を検索するクラスであり、本実施の形態のサービス検索クラス411に対応する。
なお、図4に示されるプレゼンテーション層41のクラス群(インタフェース)は、印刷ジョブだけでなく、複数種類のジョブ(例えば、コピージョブ、スキャンジョブ、FAX送信ジョブ等)に対して共通に定義されている。すなわち、プレゼンテーション層41は、JPSをより抽象化(一般化)したものになっている。したがって、プレゼンテーション層41に基づいてJPSを実現する場合、プレゼンテーション層41にJPSを包含させるか、又はJPSがプレゼンテーション層41のクラス群(以下「MFPサービス抽象モデル」という。)を継承するようにすればよい。
図6は、プレゼンテーション層がJPSを包含する例を示す図である。この場合、プレゼンテーション層41は一つのソフトウェアコンポーネントとして構成され、当該ソフトウェアコンポーネント内にJPSの実装が含まれる。また、他のサービス(例えば、コピージョブを実現するコピーサービス)に関するクラス群についても、MFPサービス抽象モデルに基づいて(MFPサービス抽象モデルと同様の構成によって)実装され、それぞれサービスの実装が当該ソフトウェアコンポーネント内に含まれる。したがって、この場合、アプリケーション60とJSPとの関係は、図7に示されるようになる。
図7において、プレゼンテーション層41は一つのソフトウェアコンポーネントとして、JPSや各サービス(同図ではコピーサービス)のインタフェースを公開すると共にその実装を包含する。したがって、アプリケーション60は、公開されたJPSや他のサービスのインタフェースを呼び出すことにより、それぞれの実装を利用することができる。このような構成では、各サービス(JPSも含む)のインタフェースは論理的には関係しているが、実質的には関係を有さない。したがって、仮に、JPSのバージョンアップ等で変更があったとしても、基本的には他のサービスはその影響を受けないという利点がある。
また、図8は、JPSがMFPサービス抽象モデルを継承する例を示す図である。この場合、JPSの各クラスは、MFPサービス抽象モデルにおいて対応するクラスを継承する。他のサービス(例えば、コピーサービス)に関する実装クラス群もMFPサービス抽象モデルのクラスを継承する。この場合、アプリケーション60は、各サービス(JPSも含む)のクラス群をMFPサービス抽象モデルのサブクラスとして利用することができる。
このような構成では、MFPサービス抽象モデルにおいて各サービスの共通部分を実装することにより、各サービスはその差分のみを実装すればよいという利点がある。また、継承により各サービスの構造がシンプルとなり、保守性を向上させることができる。
以下、複合機1の処理手順について説明する。図9は、アプリケーションが複合機にジョブを実行させるための処理手順を説明するためのシーケンス図である。同図における各オブジェクトの参照番号は、各オブジェクトのクラスの参照番号(図4参照)の末尾に「A」を付加したものである。
ジョブの開始指示の入力に応じ、当該ジョブに対応するアプリケーション60(プリントアプリ61、コピーアプリ62、スキャンアプリ63、又はFAXアプリ64等)は、入出力形式オブジェクト412Aをメモリ(MEM−P131)内に生成する(S101)。ここで、アプリケーション60は、ジョブ(印刷ジョブ、コピージョブ、スキャンジョブ、又はFAX送信ジョブ等)に応じた入力データ及び出力データの少なくともいずれか一方のデータ形式を入出力形式オブジェクト412Aに設定する。例えば、印刷ジョブであれば、印刷データのデータ形式が設定される。なお、ジョブの開始指示の入力とは、印刷ジョブであれば印刷データの受信が相当する。また、コピージョブ、スキャンジョブ、FAX送信ジョブ等であれば、ユーザによるスタートボタンの押下等が相当する。
続いて、アプリケーション60は、要求属性値群オブジェクト413Aをメモリ内に生成する(S103)。ここで、アプリケーション60は、ジョブに対して要求された設定値(要求属性値群)を要求属性値群オブジェクト413Aに設定する。当該設定値は、印刷ジョブであれば印刷データ内に含まれている。また、コピージョブ、スキャンジョブ、及びFAXジョブ等であれば、オペレーションパネル102を介して設定され、メモリ内に記録されている。
続いて、アプリケーション60は、入出力形式オブジェクト412A及び要求属性値群オブジェクト413Aを検索条件として指定して、サービスの検索をサービス検索オブジェクト411Aに要求する(S105)。当該要求に応じ、サービス検索オブジェクト411Aは、指定された検索条件に合致するサービスを検索し、当該サービスに対応するサービスオブジェクト414Aをメモリ内に生成する(S107)。続いて、サービス検索オブジェクト411Aは、生成されたサービスオブジェクト414Aをアプリケーション60に返却する(S109)。
なお、サービス検索オブジェクト411Aによるサービスの検索は、例えば、HDD133に記録されているサービス管理情報に基づいて行われる。サービス管理情報には、入力データの形式及び出力データの形式の少なくともいずれか一方と、要求属性値群との組み合わせに応じて、サービスクラス414の実装クラスのクラス名(例えば、「プリントサービス」、「コピーサービス」、「スキャンサービス」、「FAXサービス」等)が登録されている。したがって、サービス検索オブジェクト411Aは、アプリケーション60より指定された入出力形式オブジェクト412A及び要求属性値群オブジェクト413Aに対応するクラス名をサービス管理情報より検索し、検索されたクラス名に対応するサービスオブジェクト414Aを生成する。
続いて、アプリケーション60は、返却されたサービスオブジェクト414Aに対してジョブの生成を要求する(S111)。サービスオブジェクト414Aは、対応するジョブ(印刷ジョブ、コピージョブ、スキャンジョブ、又はFAX送信ジョブ等)の実装クラスのジョブオブジェクト416Aを生成し(S113)、当該ジョブオブジェクト416Aをアプリケーション60に返却する(S115)。
続いて、アプリケーション60は、ジョブにおいて処理対象とするドキュメントをカプセル化したドキュメントオブジェクト415Aをメモリ内に生成する(S117)。印刷ジョブであれば、印刷データがカプセル化される。当該ドキュメントのデータ形式は、ジョブの種別に応じ、PostScriptファイル、JPEGイメージ、URL、又はプレーンテキスト等、様々な形式をとり得る。なお、コピージョブ及びスキャンジョブ等については、アプリケーション60は処理対象とするデータを有していない。したがって、このようなジョブについては、アプリケーション60はドキュメントオブジェクト415Aを生成する必要はない。一方、印刷ジョブの場合、印刷データの受信はアプリケーション60(プリントアプリ61)によって行われる。したがって、この場合は、ドキュメントオブジェクト415Aが生成される。
続いて、アプリケーション60は、ステップS115において返却されたジョブオブジェクト415Aに対して、ドキュメントオブジェクト415A及び要求属性値群オブジェクト413Aを指定して、ジョブの実行を要求する(S119)。なお、ドキュメントオブジェクト415Aが生成されていない場合は、ドキュメントオブジェクト415Aは指定されない。
図9において、アプリケーション60の軸から出ている矢印がアプリケーション60において実装が必要とされる手順である。当該手順のフローチャートを図10に示す。図10において、各ステップには図9において対応するステップ番号が付されている。各ステップの内容は図9で説明した通りである。但し、図10では、サービスが検索された場合に(すなわち、図9のステップS115においてサービスオブジェクト414Aが返却された場合に)、ステップS111以降が実行されることが明示されている(S110)。
このように、アプリケーション60の開発は、基本的に図10に示される処理手順に対応したインタフェース(プレゼンテーション層41のインタフェース)を呼び出すことにより行われる。また、当該インタフェースは、Java(登録商標)の標準インタフェースであるJPSに準拠するものである。したがって、本実施の形態の複合機1によれば、アプリケーション60の開発作業の負担を軽減することができる。
また、特許文献1のフィルタ等によってアプリケーションを構築する場合に比べて、ソフトウェア構成全体の規模を小さくできる可能性が高い。したがって、アプリケーションの実行に必要なメモリ容量等を低減することができ、ハードウェアのコストの削減も期待できる。
ところで、ジョブオブジェクト416Aに対するジョブの実行要求後は、ドメインロジック層42においてジョブの実行が行われる。ドメインロジック層42における処理手順についてはアプリケーション60の関与しないところであるが、以下にその一例を説明する。
図11、図12、及び図13は、第一の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。同図における各オブジェクトの参照番号は、各オブジェクトのクラスの参照番号(図4参照)の末尾に「A」を付加したものである。
図11等では、1枚の原稿について、出力部数は3、ソートはONとして設定されコピージョブの実行が要求された場合の処理手順を説明する。
図9のステップS119におけるジョブの実行に応じ、ジョブオブジェクト416Aは、成果物オブジェクト4211Aをメモリ内に生成する(S301)。ここで、ジョブオブジェクト416Aは、出力部数が3及びソートがONであることを示す要求属性値群オブジェクト413Aの内容(以下、「ジョブ設定値」という。)を成果物オブジェクト4211Aに設定する。従って、ここでの成果物オブジェクト4211Aは、ソートされた3部のコピー結果としての成果物を表現する。
続いて、ジョブオブジェクト416Aは、成果物オブジェクト4211Aに対してジョブの実行(すなわち、成果物の実現)を要求する(S303)。当該要求に応じ、成果物オブジェクト4211Aは、1枚目の原稿に対応する入力物オブジェクト4221Aをメモリ内に生成する(S305)。続いて、成果物オブジェクト4211Aは、1枚目の入力物オブジェクト4221Aに対応する出力物(1枚目の3部のコピー結果)に係るオブジェクト4223Aをメモリ内に生成し、出力物オブジェクト4223Aと入力物オブジェクト4221Aとの関連を生成する(S307)。続いて、成果物オブジェクト4211Aは、出力部数分の出力束オブジェクトをメモリ内に生成する。ここでは、1部目、2部目、及び3部目のそれぞれのソート単位に対応する出力束オブジェクト4225A−1、4223A−2、及び4223A−3が生成される(S309〜S313)。なお、生成された出力束オブジェクトは、1部目、2部目、3部目という順番で(すなわち、出力束オブジェクト4225A−1、4223A−2、4223A−3という順番で)チェーン構造で関連付けられる。
続いて、成果物オブジェクト4211Aは、出力物オブジェクト4223Aをソート1部目の出力束オブジェクト4225A−1に通知し、出力要素(コピー面)の追加(束ねること)を要求する(S315)。続いて、出力束オブジェクト4225A−1は、通知された出力物オブジェクト4223Aに対し、1部目の出力要素(コピー面)に対応する出力要素オブジェクト4224Aの取得を要求する(S317)。出力物オブジェクト4223Aは、出力要素オブジェクト4224A−1をメモリ内に生成し(S319)、出力束オブジェクト4225A−1に返却する(S321)。
続いて、成果物オブジェクト4211Aは、出力物オブジェクト4223Aをソート2部目の出力束オブジェクト4225A−2に通知する(S323)。続いて、出力束オブジェクト4225A−2は、通知された出力物オブジェクト4223Aに対し、2部目の出力要素(コピー面)に対応する出力要素オブジェクト4224Aの取得を要求する(S325)。出力物オブジェクト4223Aは、出力要素オブジェクト4224A−2をメモリ内に生成し(S327)、出力束オブジェクト4225A−2に返却する(S329)。
続いて、成果物オブジェクト4211Aは、出力物オブジェクト4223Aをソート3部目の出力束オブジェクト4225A−3に通知する(S331)。続いて、出力束オブジェクト4225A−3は、通知された出力物オブジェクト4223Aに対し、3部目の出力要素(コピー面)に対応する出力要素オブジェクト4224Aの取得を要求する(S333)。出力物オブジェクト4223Aは、出力要素オブジェクト4224A−3をメモリ内に生成し(S335)、出力束オブジェクト4225A−3に返却する(S337)。
なお、各出力要素オブジェクト4224Aは、出力物オブジェクト4223A−1の生成時に予め生成されていてもよい。
出力部数分の出力束オブジェクト4225Aの生成及び各出力束オブジェクト4225Aへの出力物オブジェクト4223Aの通知が完了すると、成果物オブジェクト4211Aは、1枚目の原稿に対応する入力物オブジェクト4221Aに対してデータ入力の実行(すなわち、1枚目の原稿の読み取り)を要求する(図12:S351)。続いて、入力物オブジェクト4221Aは、1枚目の原稿に対応する読み取り画像(スキャン画像)に対応する原画像オブジェクト4222Aをメモリ内に生成する(S353)。続いて、入力物オブジェクト4221Aは、原画像オブジェクト4222Aに対して読み取りの実行を要求する(S355)。当該要求に応じ、原画像オブジェクト4222Aは、入力リソースオブジェクト4231A及びサービス層43等を介して撮像部104に原稿の読み取りを実行させる(S357)。なお、読み取られた画像データ(スキャン画像)は、メモリ内に記録され、そのアドレス情報がサービス層43及び入力リソースオブジェクト4231を経て原画像オブジェクト4222Aに対して通知される。したがって、原画像オブジェクト4222Aは、当該アドレス情報を保持することにより、スキャン画像に関連付けられる。また、次原稿の有無(2枚目以降の原稿の有無)もこのタイミングでサービス層43及び入力リソースオブジェクト4231を経て原画像オブジェクト4222Aに通知される。なお、印刷ジョブの場合、ステップS303においてジョブオブジェクト416Aより成果物オブジェクト4211Aに印刷データをカプセル化したドキュメントオブジェクトが引き渡される。当該ドキュメントオブジェクトは、ステップS351において成果物オブジェクト4211Aから入力物オブジェクト4221Aに引き渡される。したがって、原画像オブジェクト4222Aによる画像データの読み取りは行われない。
1枚目の原稿の読み取りが終了すると、原画像オブジェクト4222Aは、入力物オブジェクト4221Aに1枚目の読み取りの終了及び次原稿の有無を通知する(S359)。当該通知に応じ、入力物オブジェクト4221Aは、成果物に1枚目の入力物の入力(ここでは画像の読み取り)の終了を通知する(S361)。続いて、成果物オブジェクト4211Aは、1枚目の原稿に対応する出力物オブジェクト4223Aに入力物の入力の終了を通知する(S363)。当該通知に応じ、出力物オブジェクト4223Aは、出力が可能となったことを判断する。
続いて、入力物オブジェクト4221Aは、成果物オブジェクト4211Aに次原稿の有無を通知する(S356)。ここでは、原稿は1枚であるという前提なので次原稿はないことが通知される。なお、次原稿が有ることが通知された場合、成果物オブジェクト4211Aは、ステップS305、S307、S315、S323、S331、及びS351を再度実行する。その結果、2枚目に対応する入力物オブジェクト4221A及び出力物オブジェクト4222Aが生成され、2枚目の3部分のそれぞれのコピー面に対応する出力要素オブジェクト4225Aが生成される。各出力要素オブジェクト4225Aは、出力束オブジェクト4225A−1〜3のそれぞれに登録される。
次原稿はないことが通知された場合、成果物オブジェクト4211Aは、ソート単位分の入力物の入力は終了したと判断し、チェーン構造で関連付けられている最初の(1部目の)出力束オブジェクト4225A−1に実行(コピー面の印刷)を要求する(S367)。続いて、出力束オブジェクト4225A−1は、自らに登録されている(自らが束ねている)1部目のソート1枚目の出力要素オブジェクト4224A−1に実行を要求する(S369)。出力要素オブジェクト4224A−1は、出力リソースオブジェクト4232Aにリソース(印刷部105等)の使用の予約を要求する(S371)。
自らに登録されている全ての出力要素オブジェクト4224A−1に対する実行要求が終了すると、出力束オブジェクト4225A−1は、自らにチェーン構造で接続されている次の(2部目の)出力束オブジェクト4225A−2に実行を要求する(S373)。出力束オブジェクト4225A−2は、自らに登録されている2部目のソート1枚目の出力要素オブジェクト4224A−2に実行を要求する(S375)。出力要素オブジェクト4224A−2は、出力リソースオブジェクト4232Aにリソースの使用の予約を要求する(S377)。
自らに登録されている全ての出力要素オブジェクト4224A−2に対する実行要求が終了すると、出力束オブジェクト4225A−2は、自らにチェーン構造で接続されている次の(3部目の)出力束オブジェクト4225A−3に実行を要求する(S379)。出力束オブジェクト4225A−3は、自らに登録されている2部目のソート1枚目の出力要素オブジェクト4224A−3に実行を要求する(S381)。出力要素オブジェクト4224A−3は、出力リソースオブジェクト4232Aにリソースの使用の予約を要求する(S383)。
なお、ソート2枚目が有る場合(原稿が2枚以上である場合)、各出力束オブジェクト422Aは、ソート2枚目の出力要素オブジェクト4224Aに対しても実行を要求する。実行要求を行う順番は、出力要素オブジェクト4224A間のチェーン構造の接続関係に基づいて判定される。
続いて、リソースの使用予約を受けた出力リソースオブジェクト4232Aは、印刷部105等が出力可能な状態になると、予約を受け付けた順番に使用許可を通知する。ここでは、まず、1部目のソート1枚目を示す出力要素オブジェクト4224A−1にリソースの使用許可が通知される(S391)。続いて、出力要素オブジェクト4224A−1は、出力物オブジェクト4223Aに出力の実行可否判断を要求する(S393)。出力物オブジェクト4223Aは、ステップS363において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト4224A−1に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト4224A−1は、使用許可された出力リソース(印刷部105)を使用して印刷を実行する(S395)。ここで、印刷対象とされる画像データは、出力要素オブジェクト4224A−1が属する出力物オブジェクト4223Aに関連付けられている入力物オブジェクト4221Aに基づいて特定可能である。印刷が終了すると、出力要素オブジェクト4224A−1は、出力物オブジェクト4223Aに印刷の終了を通知する(S397)。続いて出力要素オブジェクト4224A−1は、出力束オブジェクト4225A−1に当該出力要素(当該コピー面)の出力の終了を通知する(S399)。当該通知に応じ、出力束オブジェクト4225A−1は、成果物オブジェクト4211Aに当該出力束(当該ソート単位分のコピー面)の出力の終了を通知する(S401)。
続いて、出力リソースオブジェクト4232Aは、2部目のソート1枚目を示す出力要素オブジェクト4224A−2にリソースの使用許可を通知する(S403)。続いて、出力要素オブジェクト4224A−2は、出力物オブジェクト4223Aに出力の実行可否判断を要求する(S405)。出力物オブジェクト4223Aは、ステップS363において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト4224A−2に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト4224A−2は、使用許可された出力リソース(印刷部105)を使用して印刷を実行する(S407)。印刷が終了すると、出力要素オブジェクト4224A−2は、出力物オブジェクト4223Aに印刷の終了を通知する(S409)。続いて出力要素オブジェクト4224A−2は、出力束オブジェクト4225A−2に当該出力要素(当該コピー面)の出力の終了を通知する(S411)。当該通知に応じ、出力束オブジェクト4225A−2は、成果物オブジェクト4211Aに当該出力束(当該ソート単位分のコピー面)の出力の終了を通知する(S413)。
続いて、出力リソースオブジェクト4232Aは、3部目のソート1枚目を示す出力要素オブジェクト4224A−3にリソースの使用許可を通知する(S415)。続いて、出力要素オブジェクト4224A−3は、出力物オブジェクト4223Aに出力の実行可否判断を要求する(S417)。出力物オブジェクト4223Aは、ステップS363において入力物の入力の終了を通知されているので実行可能と判断し、その判断結果を出力要素オブジェクト4224A−3に返却する。実行可能であることを示す判断結果が返却された場合、出力要素オブジェクト4224A−3は、使用許可された出力リソース(印刷部105)を使用して印刷を実行する(S419)。印刷が終了すると、出力要素オブジェクト4224A−3は、出力物オブジェクト4223Aに印刷の終了を通知する(S421)。続いて出力要素オブジェクト4224A−3は、出力束オブジェクト4225A−3に当該出力要素(当該コピー面)の出力の終了を通知する(S423)。当該通知に応じ、出力束オブジェクト4225A−3は、成果物オブジェクト4211Aに当該出力束(当該ソート単位分のコピー面)の出力の終了を通知する(S425)。
以上によって、1枚の原稿の3部分のソートコピーが完了する。続いて、ドメインロジック層42による処理手順を更に一般化して説明する。図14は、第一の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。すなわち、同図のフローチャートでは、原稿枚数、出力部数、印刷順(ソート又はスタック)等は特定されていない。同図のフローチャートの手順の特定の形態が図11、図12、及び図13となる。図14の括弧内のステップ番号は、図11、図12、又は図13において対応するステップ番号を示す。
ジョブオブジェクト416Aによって成果物オブジェクト4211Aが生成され、ジョブの実行が要求されると(S501)、成果物オブジェクト4211Aは、入力原稿の枚数のカウンタNに1をセットし(S502)、N枚目(1枚目)の原稿に対する入力物オブジェクト4221Aをメモリ内に生成する(S503)。ここで、成果物オブジェクト4211Aには、ジョブ設定値がジョブオブジェクト416Aによって設定される。ジョブ設定値には、例えば、出力部数や出力モード(ソート又はスタック等)が含まれている。
続いて、成果物オブジェクト4211Aは、1枚目の入力物オブジェクト4221Aに対応する出力物オブジェクト4223Aをメモリ内に生成し、出力物オブジェクト4223Aと入力物オブジェクト4221Aとの関連を生成する(S504)。なお、成果物オブジェクト4211Aは、自らに設定されているジョブ設定値のうち少なくとも出力に関係する設定値群(例えば、出力部数及び出力モード等)を生成された出力物オブジェクト4223Aに設定する。以降において生成される出力物オブジェクト4223Aについても同様である。
続いて、成果物オブジェクト4211Aは、ジョブオブジェクト416Aより設定されているジョブ設定値においてソートは指定されているか否かを判定する(S505)。ソートが指定されている場合(S505でYes)、成果物オブジェクト4211Aは、ジョブ設定値に指定されている出力部数分の出力束オブジェクト4225Aを生成し、各出力束オブジェクト4225Aをチェーン構造で出力順に従って関連付ける(S506)。なお、成果物オブジェクト4211Aは、自らに設定されているジョブ設定値のうち少なくとも出力に関係する設定値群(例えば、出力部数及び出力モード等)を生成された出力束オブジェクト4225Aに設定する。以降において生成される出力束オブジェクト4225Aについても同様である。
続いて、成果物オブジェクト4211Aは、生成された各出力束オブジェクト4225Aに、N枚目に対応する出力物オブジェクト4223Aを通知する(S507)。続いて、各出力束オブジェクト4225Aは、自らに設定されている出力モードの値に基づいてソートが指定されていることを判定し、通知された出力物オブジェクト4223Aよりソート単位内でN枚目に対応する出力要素オブジェクト4224Aを一つ取得する(S508)。各出力束オブジェクト4225Aは取得された順に出力要素オブジェクト4224Aをチェーン構造で関連付ける。
続いて、成果物オブジェクト4211Aは、N枚目に対応する入力物オブジェクト4221AにN枚目の原稿の入力を要求する(S509)。当該要求に応じ、入力物オブジェクト4221Aは、N枚目の原稿に対応する読み取り画像(スキャン画像)に対応する原画像オブジェクト4222Aをメモリ内に生成する(S510)。続いて、入力物オブジェクト4221Aは、原画像オブジェクト4222AにN枚目の原稿の読み取りを実行させる(S510)。次の原稿が有る場合(S511でYes)、成果物オブジェクト4211Aは、カウンタNをインクリメントし(S512)、N枚目の原稿に対する入力物オブジェクト4221Aをメモリ内に生成する(S513)。続いて、成果物オブジェクト4211Aは、N枚目の入力物オブジェクト4221Aに対応する出力物オブジェクト4223Aをメモリ内に生成し、出力物オブジェクト4223Aと入力物オブジェクト4221Aとの関連を生成する(S514)。続いて、ステップS507〜S510を繰り返す。
したがって、例えば、原稿が2枚で出力部数が3のコピーにおいてソートが指定されている場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
図15は、ソート指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
同図において、入力物オブジェクト4221A−1及び出力物オブジェクト4223A−1は1枚目の原稿に対応する。また、入力物オブジェクト4221A−2及び出力物オブジェクト4223A−2は2枚目の原稿に対応する。出力部数が3においてソートが指定されているため、三つの出力束オブジェクト4225A−1、4225A−2、及び4225A−3がインスタンス化される。各出力束オブジェクト4225Aは、ソート単位で出力要素オブジェクト4224Aを束ねる。具体的には、各出力束オブジェクト4225Aには、出力物オブジェクト4223A−1及び4223A−2のそれぞれより取得された二つの出力要素4224Aが関連付けられる。なお、各出力束オブジェクト4225Aは、ソート単位の順番に応じてチェーン構造で関連付けられる(図中の矢印が当該関連を示す。)。また、同一の出力束オブジェクト4225Aに関連付けられている出力要素オブジェクト4224A同士は、出力順(原稿の順番)に応じてチェーン構造で関連付けられる。なお、出力要素オブジェクト4224Aの参照番号の枝番は、10の桁はソート単位の順番を、1の桁が原稿の順番(1枚目、2枚目、・・・)を示す。
一方、ソートが指定されていない場合(S505でNo)、成果物オブジェクト4211Aは、スタックが指定されているか否かを判定する(S515)。スタックが指定されている場合(S515でYes)、スタック用の読み取り処理が実行される(S516)。また、スタックが指定されていない場合(S515でNo)、その他の(ソート及びスタックが指定されていない場合の)読み取り処理が実行される(S517)。
図16は、スタック用の読み取り処理を説明するためのフローチャートである。ここで、スタックとは、例えば、2枚の原稿を3部コピーする場合、1、1、1、2、2、2という順番で出力が行われ(数字は、原稿のページ番号を示す。)、ページ別で束ねられるモードをいう。具体的には、「1、1、1」という束と「2、2、2」という束とが異なる排紙トレイに出力されたり、同一の出力トレイにずれて出力されたりする。
したがって、スタックが指定されている場合、成果物オブジェクト4211Aは、N枚目の原稿に対応する出力束オブジェクト4225Aをメモリ内に生成する(S521)。すなわち、スタックの場合は、原稿のページ数分(枚数分)の束が作成されるため、ページごとに出力束オブジェクト4225Aが生成される。なお、成果物オブジェクト4211Aは、各出力束オブジェクト4225Aをその生成順にチェーン構造で関連付ける。
続いて、成果物オブジェクト4211Aは、N枚目に対応する出力束オブジェクト4225Aに、N枚目に対応する出力物オブジェクト4223Aを通知する(S522)。続いて、当該出力束オブジェクト4225Aは、自らに設定されている出力モードの値に基づいてスタックが指定されていることを判定し、通知された出力物オブジェクト4223Aより出力部数分の出力要素オブジェクト4224Aを取得する(S523)。したがって、3部であれば3つの出力要素オブジェクト4224Aが取得される。出力束オブジェクト4225Aは、取得された順に各出力要素オブジェクト4224Aをチェーン構造で関連付ける。
続いて、成果物オブジェクト4211Aは、N枚目に対応する入力物オブジェクト4221Aに1枚目の原稿の入力を要求する(S524)。当該要求に応じ、入力物オブジェクト4221Aは、N枚目の原稿に対応する読み取り画像(スキャン画像)に対応する原画像オブジェクト4222Aをメモリ内に生成する(S525)。続いて、入力物オブジェクト4221Aは、原画像オブジェクト4222AにN枚目の原稿の読み取りを実行させる(S526)。次の原稿が有る場合(S527でYes)、成果物オブジェクト4211Aは、カウンタNをインクリメントし(S528)、N枚目の原稿に対する入力物オブジェクト4221Aをメモリ内に生成する(S529)。続いて、成果物オブジェクト4211Aは、N枚目の入力物オブジェクト4221Aに対応する出力物オブジェクト4223Aをメモリ内に生成し、出力物オブジェクト4223Aと入力物オブジェクト4221Aとの関連を生成する(S530)。続いて、ステップS521〜S530を繰り返す。
したがって、例えば、原稿が2枚で出力部数が3のコピーにおいてスタックが指定されている場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
図17は、スタック指定の場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
同図に示されるように、スタックが指定されている場合は、原稿の枚数分の出力束オブジェクト4225Aが生成される。各出力束オブジェクト4225Aは、スタック単位で出力要素オブジェクト4224Aを束ねる。具体的には、一つ目の出力束オブジェクト4225A−1には、1枚目の原稿に対応する出力要素オブジェクト4224Aが三つ(3出力部数分)関連付けられる。二つ目の出力束オブジェクト4225A−2には、2枚目の原稿に対応する出力要素オブジェクト4224Aが三つ(3出力部数分)関連付けられる。なお、出力要素オブジェクト4224Aの参照番号の枝番は、10の桁がスタック単位の順番を、1の桁が原稿のページ(何枚目か)を示す。
また、図18は、その他の読み取り処理を説明するためのフローチャートである。ソート及びスタックのいずれもが指定されていない場合は、出力順はスタックの場合と同じであるが、ページ別の束は作成されない。例えば、2枚の原稿を3部コピーする場合、1、1、1、2、2、2という一つの束がコピー結果として出力される。
したがって、ソート及びスタックが指定されていない場合、成果物オブジェク4211Aは、一つの出力束オブジェクト4225Aを生成する(S531)。続いて、成果物オブジェクト4211Aは、当該出力束オブジェクト4225Aに、N枚目に対応する出力物オブジェクト4223Aを通知する(S532)。続いて、当該出力束オブジェクト4225Aは、自らに設定されている出力モードの値に基づいてソート及びスタックのいずれもが指定されていないことを判定し、通知された出力物オブジェクト4223Aより出力部数分の出力要素オブジェクト4224Aを取得する(S533)。したがって、3部であれば3つの出力要素オブジェクト4224Aが取得される。出力束オブジェクト4225Aは、取得された順に各出力要素オブジェクト4224Aをチェーン構造で関連付ける。
続いて、成果物オブジェクト4211Aは、N枚目に対応する入力物オブジェクト4221Aに1枚目の原稿の入力を要求する(S534)。当該要求に応じ、入力物オブジェクト4221Aは、N枚目の原稿に対応する読み取り画像(スキャン画像)に対応する原画像オブジェクト4222Aをメモリ内に生成する(S535)。続いて、入力物オブジェクト4221Aは、原画像オブジェクト4222AにN枚目の原稿の読み取りを実行させる(S536)。次の原稿が有る場合(S537でYes)、成果物オブジェクト4211Aは、カウンタNをインクリメントし(S538)、N枚目の原稿に対する入力物オブジェクト4221Aをメモリ内に生成する(S539)。続いて、成果物オブジェクト4211Aは、N枚目の入力物オブジェクト4221Aに対応する出力物オブジェクト4223Aをメモリ内に生成し、出力物オブジェクト4223Aと入力物オブジェクト4221Aとの関連を生成する(S540)。続いて、ステップS531〜S540を繰り返す。
したがって、例えば、原稿が2枚で出力部数が3部のコピーにおいてソート及びスタックが指定されていない場合、全ての原稿の読み取りを完了した時点での各オブジェクト間の関係は次のようになる。
図19は、ソート及びスタックが指定されていない場合にインスタンス化されるドメインロジック層のオブジェクトの構成例を示す図である。
同図に示されるように、ソート及びスタックが指定されていない場合は、一つの出力束オブジェクト4225Aに全ての出力要素オブジェクト4224Aが関連付けられている。なお、出力要素オブジェクト4224Aの参照番号の枝番は、原稿のページ(何枚目か)を示す。
図14に戻る。全ての原稿の読み取りが完了すると、ステップS541に進み、成果物オブジェクト4211Aは、インスタンス化されている各出力束オブジェクト4225Aに対してチェーン構造の順番で出力の実行を要求する(S541)。当該要求に応じ、各出力束オブジェクト4225Aは、自らに関連付けられている各出力要素オブジェクト4224Aにチェーン構造の順番で出力の実行を要求する(S542)。その結果、各出力要素オブジェクト4224Aに対応する分のコピー面が印刷される(S543)。
ソートが指定されている場合、図15のオブジェクト構成に基づいてステップS541以降が実行される。したがって、例えば、2枚の原稿を3部コピーする場合、「1、2」といった束(ソート単位)が三つ出力される。
また、スタックが指定されている場合、図17のオブジェクト構成に基づいてステップS541以降が実行される。したがって、例えば、2枚の原稿を3部コピーする場合、「1、1、1」、「2、2、2」といった二つの束(スタック単位)が出力される。
また、ソート及びスタックのいずれもが指定されていない場合、図19のオブジェクト構成に基づいてステップS541以降が実行される。したがって、例えば、2枚の原稿を3部コピーする場合、「1、1、1、2、2、2」といった一つの束が出力される。
上述したように、第一の実施の形態において、ドメインロジック層42による処理内容は、アプリケーション60からは隠蔽される。すなわち、ドメインロジック層42の各クラスは、アプリケーション60から直接呼び出されることはない。したがって、複合機1の内部的なソフトウェア構成をサードベンダー等に公開する必要はない。よって、複合機1の開発ベンダーの技術流出を適切に防止することができる。
また、ドメインロジック層42は、出力束オブジェクト4225Aによる出力要素オブジェクト4224Aの束ね方を変化させることによって、ソート指定、スタック指定に応じた出力順の制御を行っている。したがって、柔軟性が高くシンプルな構成が実現されている。斯かる構成によれば、保守性や機能拡張性を向上させることができる。
ところで、第一の実施の形態では、出力物(印刷物)の出力後において実行される後処理機能に関して言及されていない。後処理機能とは、複合機1によって印刷される出力物に対して、ステープル、パンチ、又はZ折り等の処理を施す機能であり、ユーザの利便性向上の観点から非常に重要な機能である。一般的に、後処理機能は、複合機1の本体機能又は複合機1に付属するオプション機能として実現される。各機能はユーザの使用目的に応じてジョブの設定情報として設定される。
以下、ドメインロジック層42を後処理機能に対応させた例として、第二の実施の形態を説明する。
図20は、第二の実施の形態におけるドメインロジック層のクラス構成例を示す図である。図20中、図4と同一クラスには同一符号を付している。なお、同図では、便宜上、要求管理部421、I/Oファンクション部422、及びI/Oリソース管理部423のみが示されている。ここでは、図4との差分についてのみ説明する。
同図において、I/Oファンクション部422は、後処理クラス4226を含む。後処理クラス4226は、後処理機能を実現するための責務を担う。後処理クラス4226は、出力束クラス4225と関連を有する。後処理クラス4226のインスタンス(後処理オブジェクト4226A)は、当該関連によって関連付けられた出力束オブジェクト4225によって束ねられた出力要素に対して後処理を施す。
また、I/Oリソース管理部423は、後処理リソースクラス4233を含む。後処理リソースクラス4233のインスタンス(後処理リソースオブジェクト4233A)は、後処理を実行するためのハードウェア資源(例えば、ステープラ等)を管理及び制御する。
以下、第二の実施の形態の複合機1の処理手順について説明する。図21及び図22は、第二の実施の形態のドメインロジック層における処理手順を説明するためのシーケンス図である。図21中、図11と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。また、図22中、図13と同一ステップには同一ステップ番号を付し、その説明は適宜省略する。
ステップS309、S311、又はS313において生成された各出力束オブジェクト4225Aは、ジョブ設定値に後処理機能に関する設定情報が含まれている場合、自らが対応する出力束に対して後処理を実行する後処理オブジェクト4226A−1、4226A−2、又は4226A−3をメモリ内に生成する(S310、S312、S314)。
ここでは、図23に示されるように、ジョブ設定値に応じて、スタープルを実行するための後処理オブジェクト4226A、パンチを実行する後処理オブジェクト4226A、又はZ折りを実行する後処理オブジェクト4226A等が生成される。
図21では、出力束ごとにステープルの実施が設定されている例が示されている。したがって、各後処理オブジェクト4226Aの種類属性には、「ステープル」を示す値が設定される。ジョブ設定値における後処理機能に関する設定情報は、ジョブの開始時にオペレーションパネル102を介してユーザによって設定される。
なお、後処理オブジェクト4226Aは、出力束オブジェクト4225Aと共に成果物オブジェクト4211Aによって生成されてもよい。後処理オブジェクト4226Aが成果物オブジェクト4211Aによって生成されるような構成を採用する場合、図20のクラス図において、成果物クラス4211と後処理クラス4226との間に新たな関連が定義される。
その後、ステップS399までは、第一の実施の形態(図11、図12、及び図13)と同様の処理が実行される。
続いて、各出力束オブジェクト4225Aは、出力要素オブジェクト4224Aより出力要素(コピー面)の出力を通知されると(S399、S411、S423)、自らに後処理オブジェクト4226Aが関連付けられている場合(自らが後処理オブジェクト4226Aを生成した場合)は、当該後処理オブジェクト4226Aに対して後処理の実行を要求する(S400−1、S412−1、S424−1)。各後処理オブジェクト4226Aは、当該要求に応じ、後処理機能の使用予約を後処理リソースオブジェクト4233Aに要求する(S400−2、S412−2、S424−2)。
その後、後処理機能に利用されるハードウェア資源が使用可能な状態となると、後処理リソースオブジェクト4223Aは、使用予約を受け付けた順番に後処理オブジェクト4226Aに対し後処理機能の使用許可を通知する(S431、S441、S451)。
使用許可の通知を受けた後処理オブジェクト4226Aは、自らの種類属性に設定された後処理の実行を制御する(S432、S442、S452)。後処理が終了すると、後処理オブジェクト4226Aは、出力束の出力の終了を成果物オブジェクト4211Aに通知する(S433、S443、S453)。
続いて、図24は、第二の実施の形態においてコピージョブを実行する際のドメインロジック層における処理手順を説明するための汎用的なフローチャートである。また、図25は、第二の実施の形態におけるスタック用の読み取り処理を説明するためのフローチャートである。更に、図26は、第二の実施の形態におけるその他の読み取り処理を説明するためのフローチャートである。図24、図25、又は図26中、図14、図16、又は図18と同一ステップには同一ステップ番号を付し、その説明は省略する。
第三の実施の形態において、生成された出力束オブジェクト4225Aは、ジョブ設定値に基づいて後処理機能の設定の有無を判定する(図24:S506−1、図25:S521−1、図26:S531−1)。後処理機能が設定されている場合、出力束オブジェクト4225Aは、設定されている後処理機能に対応する後処理オブジェクト4226Aを生成する(図24:S506−2、図25:S521−2、図26:S531−2)。なお、複数種類の後処理機能が設定されている場合、種類ごとに後処理オブジェクト4226Aが生成される。
一方、後処理機能が設定されていない場合、後処理オブジェクト4226Aは生成されない。
また、ステップS543において印刷実行後、後処理オブジェクト4226Aが生成されている場合は(S544)、当該後処理オブジェクト4226Aによって後処理が実行される(S545)。
続いて後処理の詳細について説明する。図27は、後処理の処理手順を説明するためのフローチャートである。
後処理の実行開始時において、後処理リソースオブジェクト4233Aは、後処理に使用するハードウェア資源が後処理を実行可能か否かを判定する(S601)。後処理の実行が可能であれば、その旨が後処理リソースオブジェクト4233Aから後処理オブジェクト4226Aに通知される。後処理オブジェクト4226Aは、当該通知に応じ、自らが関連付いている(自らを生成した)出力束オブジェクト4225Aに関する後処理を後処理リソースオブジェクト4233A等を介してハードウェア資源(ステーブラ等)に実行させる(S602)。その結果、例えば、ステープル、パンチ、又はZ折り等の後処理が出力束に対して施される。
後処理の実行中、後処理オブジェクト4226Aは、後処理の進捗を監視する(S603)。後処理オブジェクト4226Aは、後処理の正常終了を検知すると(S603でYes)、後処理の正常終了を成果物オブジェクト4211Aに通知する(S604)。
一方、後処理の実行中に何らかの異常で後処理を中断しなければならない状況が発生した場合(S603でNo)、後処理オブジェクト4226Aは、後処理リソースオブジェクト4223A等を介して、後処理は停止可能な状態か否かを判断する(S605)。停止可能な状態である場合(S605でYes)、後処理オブジェクト4226Aは、後処理の実行を中止し(S606)、後処理の異常終了を成果物オブジェクト4211Aに通知する(S607)。停止可能な状態でない場合(S605でNo)、後処理オブジェクト4226Aは、後処理が停止可能な状態になるまで待機した後、後処理を中止させる。
なお、ハードウェア資源が、後処理を実行可能でない場合(S601でNo)、後処理オブジェクト4226Aは、後処理の実行を中止し(S606)、後処理の異常終了を成果物オブジェクト4211Aに通知する(S607)。
上述したように、第二の実施の形態によれば、後処理機能を実現することができる。したがって、ユーザの設定に応じた態様によって出力物を出力させることができる。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。