谁能提供一个示例,说明如何使用 Eclipse MDT/OCL 实现以编程方式在 UML 模型上执行 OCL 查询。我阅读了 Eclipse 文档,但仍然找不到工作示例,并且不断收到不同的异常和错误。
谢谢你的帮助。
谁能提供一个示例,说明如何使用 Eclipse MDT/OCL 实现以编程方式在 UML 模型上执行 OCL 查询。我阅读了 Eclipse 文档,但仍然找不到工作示例,并且不断收到不同的异常和错误。
谢谢你的帮助。
这是一个如何实例化 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
有几个用于 , 和其他 UML 类的 getter Class_
,Property
EcoreOperation
有一个类似的对象: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 方法的对象必须与您在帮助程序中设置的上下文类型相匹配。