以编程方式在UML模型上执行OCL查询

时间:2013-12-25 16:06:37

标签: ocl eclipse-mdt

任何人都可以提供一个示例,说明如何使用Eclipse MDT / OCL实现以编程方式在UML模型上执行OCL查询。我阅读了Eclipse文档,但仍然找不到一个有效的例子,我不断得到不同的异常和错误。

感谢您的帮助。

1 个答案:

答案 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();

在实例化OCLOCLHelper对象之后,重要的是为OCL查询设置上下文对象:

helper.setContext(UMLPackage.eINSTANCE.getClass_());

UMLPackage.eInstance有两个针对Class_PropertyOperation和其他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方法的对象必须与您在帮助程序中设置的上下文类型匹配。