Установка ресурса EObject с помощью команды - PullRequest
0 голосов
/ 20 сентября 2011

Я использую TransactionalEditingDomain для управления изменениями в моей модели.Однако у меня есть некоторые проблемы при создании пустой модели.Я думаю, что проблема в том, когда я добавляю модель в модель Resource (modelResource.getContents().add(model);), потому что она должна быть помещена в транзакцию.Соответственно, я пытался использовать AddCommand для выполнения такой операции, но я не смог найти EStructuralFeature для ресурса contents.

Другими словами, я хотел бы написать что-токак:

Command cmd = AddCommand.create(editingDomain, modelResource, FEAT_CONTENTS, model);
commandStack.execute(cmd);

Проблема в том, что я не могу найти FEAT_CONTENTS ... У кого-нибудь есть предложения?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2016

Я нашел «официальное» решение с использованием AddCommand на Eclipse Forum of EMF :

Command cmd = new AddCommand(editingDomain, modelResource.getContents(), model);
commandStack.execute(cmd);

Поскольку удаление корневого объекта также нетривиально, такой же подходможет использоваться с RemoveCommand:

Command cmd = new RemoveCommand(editingDomain, modelResource.getContents(), model);

Наконец, для полноты вы также должны знать, что DeleteCommand (который также удаляет все ссылки на удаленный объект) вообще не работает с корневыми объектами.

0 голосов
/ 20 сентября 2011

Я нашел решение, но искренне он мне не нравится:

commandStack.execute(new RecordingCommand(editingDomain) {
    protected void doExecute() {
        modelResource.getContents().add(model);
    }
});
...