2017-05-01 10 views
2

私はecoreユーザーモデルに基づいてOCL条件を使用しようとしています。 私の最初の質問は、この文脈でOCL条件を使うことさえ可能かどうかです。だから私の特別なケースでは、ユーザーは独自のタスク、シーケンスフロー、変数などを使って独自のモデルを作成することができます。ユーザーは、実行時に自身のOCL条件を定義することもできます。ここまでは順調ですね。usermodelsのOCL条件

単純な例:ユーザーモデルxyの変数の値が5より大きいかどうかを検証する条件を作成したいと考えています。 私の問題は、ユーザーモデル自体の条件を評価することです。それのメタモデル。私が見たすべてのコードスニペット(以下のように)では、OCLHelperのコンテキストはメタモデル(Literals.LIBRARAY)に設定されていました。

OCL条件を自分の目的に使用するにはどうすればよいですか?

OCL ocl = OCL.newInstance(new PivotEnvironmentFactory()); 
OCLHelper helper = ocl.createOCLHelper(EXTLibraryPackage.Literals.LIBRARY); 
ExpressionInOCL invariant = helper.createInvariant(
    "books->forAll(b1, b2 | b1 <> b2 implies b1.title <> b2.title)"); 
ExpressionInOCL query = helper.createQuery(
    "books->collect(b : Book | b.category)->asSet()"); 

// create a Query to evaluate our query expression 
Query queryEval = ocl.createQuery(query); 
// create another to check our constraint 
Query constraintEval = ocl.createQuery(invariant); 

答えて

0

OCLをEcoreで使用する場合は、OCLinEcoreエディタを使用するほうがはるかに簡単になります。

createOCLHelperの引数は、タイプシステム、つまりメタモデルを識別します。制約は、これらの型のインスタンスでチェックされます。あなたのモデルです

よろしく

エドWillink