私は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);