我需要从导航主 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)
我究竟做错了什么?