eclipse-emf - 可以在 Ecore 和 OCL 中保留派生属性并禁用派生吗?

标签 eclipse-emf emf eclipse-emf-ecore ocl ecore

我想移植一种遗留数据格式,它由类似于 Eclipse 建模框架 (EMF) Ecore 的概念组成:具有不同数据类型和默认值的参数的元素。

定制工具让您可以通过精美的基于表格的 GUI 编辑此类模型实例。

此外,参数的一个共同特征是可以添加一个推导规则,该规则指定参数值是从其他参数自动计算的。这似乎也类似于可以由 Java 代码或 OCLinEcore 实现的 Ecore 派生属性。

但是,传统格式的参数的自动派生是可选的。 IE。用户总是可以选择这样的派生参数并选择他或她想要手动输入值。因此,即使派生的 Parameter 值也不是 transient 的,而是始终存在的,包括参数是处于“自动”还是“手动”模式的状态。

Ecore(包括 OCLinEcore 之类的扩展)中是否有任何方法可以保留派生属性并在运行时选择性/临时启用/禁用派生?

解决方法可能是不使用 Ecore 的派生属性功能,而是在客户端代码中手动实现可选派生。但是,可选派生规则的声明将不是标准方式。有什么方法可以重用 OCLinEcore 或类似的东西?

最佳答案

以下是我在 Xcore 中的操作方法| :

interface Identifier {
    id String uid
    boolean derive_enabled = "true"
    unsettable String uid_derived

    readonly String uid_generated get {  // this is the 'derived' parameter
        if (uid_derived == null || uid_derived.isEmpty) {
            uid_derived  = EcoreUtil.generateUUID().toString
        }
        if (derive_enabled) {
            uid = uid_derived
        }
        return uid
    }
}

您也可以在 Ecore/OCL-in-Ecore 中轻松实现它。

我保留了参数的派生值,但我总是可以通过更改 bool 参数的值来手动更改它(如果我喜欢的话)。然后,我为我需要的任何类实现此接口(interface),因此我在全局范围内拥有此功能。

关于eclipse-emf - 可以在 Ecore 和 OCL 中保留派生属性并禁用派生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903043/

相关文章:

java - eclipse EMF : Customize XML deserialization so old project can be loaded into modified model

eclipse - 不同 Ecore 模型的引用 Ecore 模型路径

eclipse - 如何解决错误 Mwe2Launcher : Couldn't find EClass for name

java - 根据 EObject 的内容将其保存在不同的资源中

java - 我可以将 EMF/ECore 用于基于 XML 的模型吗?

java - 动态加载 EMF 模型时出错

java - 设置知道 EObject 及其 EAttribute 的值

eclipse-emf-ecore - 自定义 genmodel 不创建 plugin.xml、plugin.propeties 和 build.properties

eclipse-emf - 以编程方式指定派生属性的实现