2011年9月22日木曜日

EMFのOCLの実装

今時OCL?ということもあるんですが、OCLを使うケースがあるので、調査した結果を
まとめます。
EMFのモデルに対してOCLをかける仕組みです。
org.eclipse.ocl.ecoreプラグインを依存関係につけます。

  1. OCLのインスタンス生成
  2. OCLHelperを作成
  3. contextの設定
  4. 評価するオブジェクトとOCLでevaluateを実行
  5. 戻り値はObject型だが、Booleanが戻ってくるので、OCLの評価がtrue,falseかの判定する。



以下ソースコード
import org.eclipse.ocl.ecore.OCL;
import org.eclipse.ocl.ecore.OCL.Helper;
import org.eclipse.ocl.ecore.EcoreEnvironmentFactory

        OCL ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
        OCLHelper helper = ocl.createOCLHelper();
        EClass context = targetObject.eClass();
        helper.setContext(context);
        EObject object = targetObject;
        String query;
        query = "self.parameter > 100";//

        try {
            Object result = ocl.evaluate(object, helper.createQuery(query));
            logger.error("", result.getClass(), result.toString());
        } catch (ParserException e) {
            logger.error("", e);
        }


eclipseのOCL説明

今回はOCLのinvariantの判定をするケースでもう一つの方法としては、
evaluateではなくcheckメソッドを使う方法もあるらしいです。

あとは、defを使ってquery operationを定義することもできる。OCLの記述と同じように記述し、evaludateを実行すれば、同じように取得ができる。


  • OCL資料

0 件のコメント:

コメントを投稿