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

#ecore #eclipse-sirius #sirius

#ecore #затмение-Сириус #сириус #eclipse-sirius #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() во внешнее Java-действие, которое затем вызывает Sirius?

Заранее благодарю за вашу помощь. — SJ

Ответ №1:

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

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