Могу ли я вызвать операцию Ecore с Сириуса?

Есть ли в 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() во внешнее действие Java, которое затем вызывает Сириус?

Заранее спасибо за помощь. - СЖ


person Stealth Jamaican    schedule 24.08.2020    source источник


Ответы (1)


Если нет возможности сделать это напрямую, лучше всего превратить сгенерированный EMF код Java для resetAllThingsStatus() во внешнее действие Java, которое затем вызывает Сириус?

Да. Если у вас много EOperations, вы можете захотеть сделать общий сервис, например. callEOperation(EObject onElement, String operationName), иначе у вас будет столько методов, сколько у вас есть EOperations.

person user1292456    schedule 27.08.2020