我可以从 Sirius 调用 Ecore 操作吗

Can I invoke an Ecore Operation from Sirius

在 Sirius 中是否有任何方法可以通过用户交互(比如双击)来调用 Ecore 定义的语义元素操作?详情如下。

我正在使用 Xcore 来定义我的元模型。我有这样的情况:

enum Status
{
    Default
    Foo
    Bar
}

class ThingWithStatus
{
    Status status
}

class ContainerForThings
{
    contains ThingWithStatus[] thingList
    op void resetAllThingsStatus()
    {
        for (ThingWithStatus thing : thingList)
        {
            thing.status = Status::DEFAULT
        }
    }
}

目前我在 Sirius 中有一个图表,其中包含 ContainerForThings 的容器节点,以及 ThingWithStatus 的子节点。我希望能够做的是双击图中的容器节点,并对语义元素进行 resetAllThingsStatus() 操作 运行。

如果没有办法直接执行此操作,我最好的选择是将 EMF 生成的 Java resetAllThingsStatus() 代码转换为 Sirius 随后调用的外部 Java 操作吗?

在此先感谢您的帮助。 - SJ

If there is no way to do this directly, is my best option to turn the EMF-generated Java code for resetAllThingsStatus() into an External Java Action that Sirius then calls?

是的。如果您有很多 EOperations,您可能想要做一个通用服务,例如callEOperation(EObject onElement, String operationName),否则你将拥有与 EOperations 一样多的方法。