1

メインの UML モデルをナビゲートする ACCELEO スクリプトから、UML エッジに含まれる条件の OCL モデルを取得する必要があります。この目的のために、次の Java クラスを定義しました。

public class GetOCLModel {
public Constraint getOCLModel(Classifier context, String expression){

    OCL<Package, Classifier, Operation, Property, EnumerationLiteral, Parameter, 
    State, CallOperationAction, SendSignalAction, Constraint, Class, EObject> ocl;
    //CL.newInstance(EcoreEnvironmentFactory.INSTANCE);
    UMLEnvironmentFactory uef = new UMLEnvironmentFactory();
    ocl = OCL.newInstance(uef.createEnvironment());
    OCLHelper<Classifier, Operation, Property, Constraint> helper = ocl.createOCLHelper();
    helper.setContext(context);
    Constraint expr= null;
    try {
        expr= (Constraint) helper.createInvariant(expression);
        System.out.println("Hunky Dory!");

    } catch (ParserException e) {
        e.printStackTrace();
    }
    return expr;
}

}

これは、それをラップする ACCELEO モジュールです。

[module     generateOclModel('http://www.eclipse.org/ocl/1.1.0/UML','http://www.eclipse.org/uml2/2.1.0/UML')/]

[query public getOclModel(cl:Classifier, str:String): Constraint = invoke('sfg.baleno.src.services.GetOCLModel',
                      'getOCLModel(org.eclipse.uml2.uml.Classifier, java.lang.String)',Sequence{cl,str}) /]

そして、メインのACCELEOモジュールからそれを呼び出そうとする方法は次のとおりです。

[c.getOclModel('self.name=\'Testclass\'')._context.name/]

うまくいかず、理由がわかりません。何か考えはありますか?

アップデート

ヘルパーが実際にこの例外を出力していることに気付きました

     org.eclipse.ocl.SemanticException: Unrecognized variable: (name)

私は何を間違っていますか?

4

0 に答える 0