【发布时间】:2014-06-25 19:29:04
【问题描述】:
谁能提供一个示例,说明如何使用 Eclipse MDT/OCL 实现以编程方式在 UML 模型上执行 OCL 查询。我阅读了 Eclipse 文档,但仍然找不到工作示例,并且不断收到不同的异常和错误。
感谢您的帮助。
【问题讨论】:
标签: ocl eclipse-mdt
谁能提供一个示例,说明如何使用 Eclipse MDT/OCL 实现以编程方式在 UML 模型上执行 OCL 查询。我阅读了 Eclipse 文档,但仍然找不到工作示例,并且不断收到不同的异常和错误。
感谢您的帮助。
【问题讨论】:
标签: ocl eclipse-mdt
这是一个如何实例化 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 方法的对象必须与您在帮助程序中设置的上下文类型匹配。
【讨论】: