【问题标题】:Programmatically execute an OCL query on a UML model以编程方式对 UML 模型执行 OCL 查询
【发布时间】:2014-06-25 19:29:04
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

    标签: ocl eclipse-mdt


    【解决方案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 方法的对象必须与您在帮助程序中设置的上下文类型匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2021-06-04
      • 2011-08-07
      • 2017-10-03
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多