任何人都可以提供一个示例,说明如何使用Eclipse MDT / OCL实现以编程方式在UML模型上执行OCL查询。我阅读了Eclipse文档,但仍然找不到一个有效的例子,我不断得到不同的异常和错误。
感谢您的帮助。
答案 0 :(得分:1)
以下是如何实例化ocl查询的示例。 OCL有两个环境工厂,一个用于Ecore,在本例中使用,另一个用于UML。由于UML是使用Ecore实现的,因此如果要评估UML模型,也可以使用Ecore工厂。
private final OCL<?, EClassifier, ?, ?, ?, EParameter, ?, ?, ?, Constraint, EClass, EObject> ocl;
private final OCLHelper<EClassifier, ?, ?, Constraint> helper;
this.ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
this.helper = ocl.createOCLHelper();
在实例化OCL
和OCLHelper
对象之后,重要的是为OCL查询设置上下文对象:
helper.setContext(UMLPackage.eINSTANCE.getClass_());
UMLPackage.eInstance
有两个针对Class_
,Property
,Operation
和其他UML类的getter,Ecore有一个类似的对象:EcorePackage.eINSTANCE
。接下来,您需要创建一个OCLExpression,然后从中创建查询。
OCLExpression<EClassifier> expression = helper.createQuery("self.attribute->size() > 0");
Query<EClassifier, EClass, EObject> query = ocl.createQuery(expression);
现在您可以检查某个元素的查询:
boolean success = query.check(myElement);
如果check方法返回true,则查询对给定模型有效。在该代码中,myElement将是您的ECore模型的对象,其类型为Class
。传递给check方法的对象必须与您在帮助程序中设置的上下文类型匹配。