摘要
我正在开发一个基于 emf 的编辑器。到目前为止,我还没有使用 EMF 命令,但现在我想重构我的代码以使用它们。
当前状态
我使用树查看器作为编辑器的主要部分。我通过 org.eclipse.ui.popupMenus 扩展点添加了各种操作。这些操作直接干扰模型,添加和删除对象。
问题
使用这种方法,我必须在删除模型中的对象时手动删除每个引用,这很容易引入错误。此外,编辑器中的撤消/重做操作不起作用。
目标
重构操作,以便它们正确使用 EMF 命令来修改模型。
在 EMF 文档中,我找到了以下代码片段:
Department d = ...
EditingDomain ed = ...
Command cmd = RemoveCommand.create(ed, d);
ed.getCommandStack().execute(cmd);
...看起来像是我必须使用的代码。但我不知道从哪里可以获得 EditingDomain
。
所以这些是我的问题:
- 这是我想在
Action
中使用的方法吗? - 我可以从哪里获取
EditingDomain
?
最佳答案
有一种简单的方法可以访问当前编辑域。只需将此代码添加到 Action
类即可。
private EditingDomain domain;
public void setActivePart(IAction action, IWorkbenchPart workbenchPart) {
if (workbenchPart instanceof IEditingDomainProvider) {
domain = ((IEditingDomainProvider) workbenchPart).getEditingDomain();
}
}
方法setActivePart
将自动从Eclipse框架中调用。通过这种技术,您应该始终可以访问编辑域。
请注意,只有当您的编辑器基于大部分未修改的生成代码时,这才是正确的。如果您自己管理EditingDomains
,您应该使用自己的方法。
关于java - 如何在编辑器操作中使用 EMF 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9601819/