Eclipse MDT/OCL実装を使用して、UMLモデルでOCLクエリをプログラムで実行する方法の例を誰でも提供できますか? Eclipse のドキュメントを読みましたが、動作する例が見つからず、さまざまな例外やエラーが発生し続けています。
ご協力いただきありがとうございます。
Eclipse MDT/OCL実装を使用して、UMLモデルでOCLクエリをプログラムで実行する方法の例を誰でも提供できますか? Eclipse のドキュメントを読みましたが、動作する例が見つからず、さまざまな例外やエラーが発生し続けています。
ご協力いただきありがとうございます。
以下は、ocl クエリをインスタンス化する方法の例です。OCL には 2 つの環境ファクトリが存在します。1 つはこの例で使用される Ecore 用で、もう 1 つは UML 用です。UML は Ecore で実装されているため、UML モデルを評価する場合は Ecore ファクトリを使用することもできます。
private final OCL<?, EClassifier, ?, ?, ?, EParameter, ?, ?, ?, Constraint, EClass, EObject> ocl;
private final OCLHelper<EClassifier, ?, ?, Constraint> helper;
this.ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
this.helper = ocl.createOCLHelper();
OCL
およびオブジェクトをインスタンス化したらOCLHelper
、OCL クエリのコンテキスト オブジェクトを設定することが重要です。
helper.setContext(UMLPackage.eINSTANCE.getClass_());
UMLPackage.eInstance
Class_
、Property
、Operation
およびその他の UML クラス用の getter がいくつかあります。Ecore 用の同様のオブジェクトがありますEcorePackage.eINSTANCE
。次に、OCLExpression を作成し、それからクエリを作成する必要があります。
OCLExpression<EClassifier> expression = helper.createQuery("self.attribute->size() > 0");
Query<EClassifier, EClass, EObject> query = ocl.createQuery(expression);
これで、いくつかの要素でクエリを確認できます。
boolean success = query.check(myElement);
check メソッドが true を返す場合、クエリは指定されたモデルに対して有効です。そのコードでは、 myElement はタイプ を持つ ECore モデルのオブジェクトになりますClass
。check メソッドに渡すオブジェクトは、ヘルパーで設定したコンテキスト タイプと一致する必要があります。