マッパークラス
Windchill ESI のマッピング機能は、「Windchill ESI マッパークラス」の図に示されているクラスによって提供されます。いずれのクラスもシリアル化できません。したがって、Windchill GUI クライアントでこれらを使用することはできません。
Windchill ESI のマッパークラス
3.1.1.1 ESIMapManager
ESIMapManagerESIMap オブジェクトのコレクションを管理します。マップマネージャによってキャッシュ内の ESIMap オブジェクトが管理されているので、外部ストレージから読み込むのは 1 回だけで済みます。読み込まれたマップ情報は、Java 仮想マシンが再起動されるまでディスクから再度読み取られることはありません。
* 
上記の例外として、配布ターゲットの responseMetaInfoPath 属性の値が修正された場合、配布ターゲットが修正されて保存されるとただちに、新しく指定した ESI 応答メタ情報ファイルのコンテンツが読み込まれます。マップマネージャにも、修正バージョンの応答メタ情報ファイルの新しいエントリが作成されます。ファイルからの情報の読み込みは、配布ターゲットが非アクティブになり、保存され、再びアクティブになった場合にも発生します。
このクラスは、Java 仮想マシンにインスタンスが 1 つしか存在しないことを保証するシングルトン設計パターンに従います。ESIMap オブジェクトのすべてのユーザーは、マップマネージャからそれらのオブジェクトを取得する必要があります。
<<Static>> instance() : ESIMapManager
_instance 属性の値を取得します。Null の場合、結果を返す前にインスタンスを作成してこの属性に保存します。
<<final>> getMap(id : String) : ESIMap
引数 id によって指定された ESIMap を返します。入力 ID がキーとしてマップに存在する場合、このメソッドは対応する値を返します。それ以外の場合、エラーメッセージをログに記録した後で Null が返されます。
* 
このメソッドは ESI 応答メタ情報ファイルに存在する ESIMap オブジェクトに対してのみ機能します。マップファイル (ESITarget.map など) によって表されるオブジェクトには、ファイルインスタンスを取得するオーバーロードバージョンを代わりに使用します。
<<final>> getMap(file : File) : ESIMap
入力引数によって指定された ESIMap オブジェクトを返します。入力ファイルの名前がキーとしてマップに存在する場合、このメソッドは対応する値を返します。それ以外の場合、新しい ESIMap インスタンスを作成し、入力マップファイルのコンテンツによって初期化し、結果オブジェクトを返し、さらに、新規作成されたオブジェクトのエントリをマップ内に作成します。
ESIMap
Windchill ESI マップは、ESI 応答メタ情報ファイル内の Map エレメントのコンテンツを表すオブジェクトです。Map エレメントには attributeMapping という名前の子エレメントが 1 つ以上存在することがあり、各子エレメントはソース属性名とターゲット属性名のペアと、オプションで属性のデフォルト値を表します。ファイル内の各 attributeMapping エントリは次の形式をとります。
<esi:attributeMapping sourceAttribute="Source_Name" defaultValue="Default">Target_Name</esi:attributeMapping>
Source_Name は、抽出するデータを検索する場所を表す指示です。このエントリのこのセクションは必須です。
マッピングされるオブジェクトが Info*Engine エレメントオブジェクトである場合、Source_Name はそのエレメントオブジェクトの Info*Engine Att オブジェクトの名前になります。
マッピングされるオブジェクトが Info*Engine エレメントでない場合、Source_Name はそのオブジェクトに対して呼び出す "getter メソッド" の名前になります。Source_Name に指定した値の先頭に "get" という文字が追加され、結果の文字列がメソッド名として使用されます。マッパーは、引数を取らない、"get" で始まる名前が付いたメソッドのみを呼び出します。
マッパーはオブジェクト構造をナビゲートできます。Source_Name にピリオドが含まれている場合、ピリオドはメソッド区切り記号として解釈されます。マッパーは、Source_Name の 1 つ目のセグメントによって指定される "getter メソッド" を、マッピングされるオブジェクトに対して呼び出します。そのメソッドが結果を返した場合、マッパーはその結果に対して Source_Name の 2 つ目のセグメントを呼び出します。マッパーは Source_Name の各セクションの結果を続けて取得します。
例: これは、Windchill ESI BOM コンポーネントレンダラー Quantity.Amount によって使用される attributeMapping エントリのいずれかの Source_Name の値です。マッパーは、マッピングされるオブジェクトに対して getQuantity() メソッドを実行します。結果が Null でない場合、マッパーは getQuantity() メソッドによって取得されたオブジェクトに対して getAmount() メソッドを実行します。getAmount() が値を返した場合、マッパーはその値を出力に割り当てます。
Target_Name は、マッパーによって作成される出力 Att オブジェクトに割り当てられる名前です。このエントリのこのセクションは必須です。
Default は、ソースから値を取得できない場合に出力に割り当てる値です。このエントリのこのセクションはオプションです。
このクラスで使用可能なメソッドを以下に示します。
ESIMap(fileName : 文字列)
引数 fileName によって指定されたマップファイルを読み込みます。このコンストラクタは、ESI マップがマップファイルから作成される場合にのみ使用されます。マップファイルの詳細については、このセクションの末尾にある注記を参照してください。
ESIMap(mapID : 文字列, attributes : リスト<エントリ>)
新しい ESIMap インスタンスを作成し、その属性 id entries を入力値に設定します。このコンストラクタは、ESI 応答メタ情報ファイルを解析する API によって呼び出されます。
getID() : 文字列
属性 id の値を返します。
3.1.1.2.4 getSourceAttributes() : コレクション
ソース属性の名前を表す文字列のコレクションを返します。
3.1.1.2.5 getTargetAttributes() : コレクション
ターゲット属性の名前を表す文字列のコレクションを返します。
3.1.1.2.6 iterator() : java.util.Iterator
エントリ属性内のコレクションのイテレータを返します。
* 
ESIMap インスタンスにはエントリインスタンスのリストが格納され、各インスタンスは ESI 応答メタ情報ファイル内の特定の Map エレメントの特定の attributeMapping エントリを表します。上記の "エントリ" は、先ほどのエントリインスタンスのリストを参照します。
* 
ほとんどの ESI マップオブジェクトは ESI 応答メタ情報ファイルのコンテンツを使用して設定されますが、ESITarget.mapESIReleaseActivities.map などのマップファイルから取得されるものもあります。マップファイルは ASCII テキストファイルです。マップファイル内の各エントリのフォーマットは次のとおりです。
Source_Name = Target_Name|Default
ここで、Source_Name、Target_Name、Default は、このセクションで先に説明したものと同じ意味を持ちます。
3.1.1.3 ESIMapper
ESIMapper オブジェクトには、ESIMap オブジェクトのコンテンツを解釈するためのロジックが格納されています。これらは出力も作成します。ESIMapper オブジェクトは 3 つのパブリックメソッドを提供します。メソッドは次のとおりです。
3.1.1.3.1 map(object : オブジェクト, map : ESIMap) : エレメント
このメソッドは、Object 引数からマッピングされた Info*Engine エレメントオブジェクトを作成します。
3.1.1.3.2 map(inputElement : エレメント, map : ESIMap) : エレメント
このメソッドは、別の Info*Engine エレメントオブジェクトからマッピングされた Info*Engine エレメントオブジェクトを作成します。
3.1.1.3.3 map(inputElement : エレメント, map : ESIMap, includeEmptyAttributes : ブール) : エレメント
このメソッドは、別の Info*Engine エレメントオブジェクトからマッピングされた Info*Engine エレメントオブジェクトを作成します。includeEmptyAttributes に false が渡された場合、値を持つ Att のみが出力エレメントとともに返されます。includeEmptyAttributes に true が渡された場合、このメソッドの動作は map(inputElement : エレメント, map : ESIMap) と同じになります。
3.1.1.3.4 map(inputElement : エレメント, persistedObject : 永続可能オブジェクト, map : ESIMap) : エレメント
このメソッドは、別の Info*Engine エレメントオブジェクトからマッピングされた Info*Engine エレメントオブジェクトを作成します。ソースエレメントオブジェクトの attributeMapping (またはマップファイル) エントリで Source_Name に値が指定されていない場合、マッパーは 2 つ目のメソッド引数の永続可能オブジェクトから値を取得しようとします。
3.1.1.3.5 map(object : オブジェクト, map : ESIMap, softTypes : マップ) : エレメント
このメソッドは、Object 引数からマッピングされた Info*Engine エレメントオブジェクトを作成します。このメソッドは、渡された ESIMap インスタンス内の指定されたソース属性の値をフェッチできない場合、関連するソース属性名とターゲット属性名をキーおよび値として使用して、出力マップ (softTypes) にエントリを作成します。したがって、出力マップには、指定したオブジェクトに追加されたすべてのソフト属性のエントリが含まれます。呼び出し元はこのマップを処理し、必要に応じてこれらのソフト属性を続けてマッピングします。
3.1.1.4 マッパークラスのコラボレーション
以下のシーケンス図は、オブジェクトが Windchill ESI マッパーをどのように使用するかを示しています。
Windchill ESI マッパーの使用
1. リクエスト元オブジェクトは、Windchill ESI マップマネージャから ESIMap オブジェクトを取得します。(ESIMap オブジェクトを取得する際に指定する) id 属性の値は、現在処理されている配布ターゲットのマッピングプロセスと、リクエスト元オブジェクトのタイプに関連するグループ名からフェッチされます。
2. マップマネージャはキャッシュを調べ、適切な ESIMap オブジェクトを返します。ESIMap オブジェクトがキャッシュに存在しない場合、マップマネージャによって作成され、キャッシュに追加されます。
3. リクエスト元オブジェクトは ESIMapper オブジェクトを作成し、適切なマップメソッドを呼び出します。
4. ESIMapper オブジェクトは Windchill ESI マップからイテレータを取得します。イテレータによって指定されたエントリごとに、次の処理が行われます。
a. ESIMapper は Source_Name を取得します。
b. ESIMapper はその属性の値をソースから取得し、出力に追加します。
これは役に立ちましたか?