使用命令设置EObject的资源

时间:2011-09-20 09:39:31

标签: eclipse eclipse-plugin eclipse-emf

我正在使用TransactionalEditingDomain来管理模型的更改。但是,我在创建空模型时遇到了一些问题。我认为问题是当我将模型添加到模型资源(modelResource.getContents().add(model);)时,因为它应该放在事务中。因此,我尝试使用AddCommand执行此类操作,但我无法为资源EStructuralFeature找到contents

换句话说,我想写一些类似的东西:

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

问题是我找不到FEAT_CONTENTS ...有没有人有建议?

2 个答案:

答案 0 :(得分:2)

我在Eclipse Forum of EMF上使用AddCommand找到了“官方”解决方案:

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

由于删除根对象也非常重要,因此可以使用与RemoveCommand相同的方法:

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

最后,为了完整起见,您还应该知道DeleteCommand(也删除对已删除对象的所有引用)根本不适用于根对象。

答案 1 :(得分:0)

我找到了解决方案,但我真的不喜欢它:

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