1

谁能提供一个示例,说明如何使用 Eclipse MDT/OCL 实现以编程方式在 UML 模型上执行 OCL 查询。我阅读了 Eclipse 文档,但仍然找不到工作示例,并且不断收到不同的异常和错误。

谢谢你的帮助。

4

1 回答 1

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有几个用于 , 和其他 UML 类的 getter Class_PropertyEcoreOperation有一个类似的对象: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 方法的对象必须与您在帮助程序中设置的上下文类型相匹配。

于 2014-06-25T11:23:17.140 回答