他のオブジェクトのコレクションを、入出力オブジェクトの属性にすることができます。
マッピング宣言にサブマップ・マッピング規則を指定する際に、属性コレクションの要素に適用する入出力フィルターを作成できます。
変換を実行すると、コレクション内の各要素にフィルターが適用されます。
フィルターが
true を戻す要素は、変換されます。
始める前に
マッピング・モデルを開いておく必要があります。
マッピング・モデルのファイル名拡張子は .mapping です。マッピング・モデルには、少なくとも 1 つのマッピング宣言が含まれていなければなりません。
また、マッピング宣言にサブマップ・マッピング規則が定義されていなければなりません。
このタスクについて
サブマップ・マッピング規則に入出力オブジェクト・フィルターを作成する手順は、以下のとおりです。
- エディター領域にあるサブマップ・マッピング規則を右クリックし、「プロパティーで表示」をクリックします。
- 「プロパティー」ビューの「入力フィルター」または「出力フィルター」タブをクリックします。
- 「入力要素のフィルター」または「出力要素のフィルター」チェック・ボックスを選択します。
注: 入力オブジェクト・フィルターを作成している場合にこのチェック・ボックスが選択されていないと、
サブマップ・マッピング規則は、変換実行時にリスト内のすべての要素に適用されます。
出力オブジェクト・フィルターを作成している場合にこのチェック・ボックスが選択されていないと、
出力オブジェクト候補コレクションの中の最初のオブジェクトが出力属性で参照されます。
- フィルターのコードを指定するには、以下のいずれかのステップを実行します。
- 「インライン」をクリックして、「コード」オプションの下にあるテキスト・エリアに Java™ コードを入力し、
「適用」をクリックします。
指定したコードは、論理型値を戻さなければなりません。
指定できるのは、メソッド本文のみです。変換オーサリング・フレームワークがメソッド・シグニチャーを定義します。
ヒント: 有効な変数名のリストを表示するには、
「インライン」ボタンの下にあるテキスト・エリアで、Ctrl + スペースを押します。
注: 入力フィルターの場合、
属性のコレクションの現行値を表す <name>_src という名前の変数を指定できます。
出力フィルターの場合、<name>_tgt が属性のコレクションの現行値を表します。
- 「外部」をクリックして、サブマップ・マッピング規則のフィルターとして適用するコードを含む Java クラスを指定します。
指定する Java クラスは、org.eclipse.emf.query.conditions.Condition クラスを拡張するものでなければなりません。
isSatisfied(Object object) メソッドも実装する必要があります。
ここで、object にはコレクション内の現行の要素を設定します。このメソッドは論理型値を戻します。
「参照」をクリックすると、有効なクラスの選択を求めるダイアログ・ボックスが表示されます。
ヒント: フィルターを実装するクラスを作成するには、
「新規」をクリックしてから、「新規
Java クラス」ウィンドウに必要な情報を入力します。
- をクリックします。
例
例えば、サブマップ・マッピング規則の入力属性が EClassifier のリストである場合、
各要素の isAbstract 関数を評価する入力オブジェクト・フィルターを作成できます。
isAbstract 関数のパラメーターは、リスト内の要素のインスタンスです。
各抽象 EClassifier が結果セットに追加されます。
変換を実行すると、結果セット内の各 EClassifier にサブマップ・マッピング規則が適用されます。