作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 EMF 模型和生成的编辑器。在模型/编辑器中,可以将元素“单位”(U) 与“规范”(S) 连接起来。现在,如果至少有一个 U 满足 S,我想为 S 提供一种专门的 CSS 样式。但是(据我所知)没有办法在 CSS 样式表中实现这一点(例如使用选择器)纸莎草纸。
为此,我为S添加了一个额外的Property,称为“Mapped”(应该为true,当至少有一个U满足S时,否则为false)。然后,当添加一个/多个连接时(在 handleNotification - 方法中),我尝试在代码之外设置“映射”属性:
notifier.setMapped(true);
有异常(exception):
IllegalstateException: Cannot modify resource set without a write transaction
第二种解决方案导致另一个异常,但具有相同的语义结果:
ed.getCommandStack().execute(SetCommand.create(ed, notifier,
xyzPackage.Literals.SPECIFICATION__MAPPED, true));
有异常(exception):
java.lang.IllegalStateException: Cannot activate read/write
transaction in read-only transaction context
有谁知道如何处理这些异常或有好的解决方法吗?主要目的是 CSS 文件识别“映射”属性的变化。
非常感谢:)
最佳答案
找到了我的问题的解决方案:
bassword好像是异步的...
要成功更改 EObjects
的属性,我必须执行以下操作:
public void SpecificationEditPart.handleNotification(Notification event)
{
EObject eObject = (EObject)event.getNotifier();
SpecificationImpl notifier = (SpecificationImpl)eObject;
EList<Satisfy> satisfyRelationList = notifier.getIncoming();
int satisfyRelationListSize = satisfyRelationList.size();
TransactionalEditingDomain ted = (TransactionalEditingDomain)AdapterFactoryEditingDomain.getEditingDomainFor(eObject);
try
{
ted.runExclusive(new Runnable()
{
public void run ()
{
Display display = PlatformUI.getWorkbench().getDisplay();
display.asyncExec(new Runnable()
{
public void run ()
{
ted.getCommandStack().execute(new SetCommand(this.ted, notifier, xxxPackage.Literals.SPECIFICATION__MAPPED, true));
}
});
}
});
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
关于java - EMF/GMF/Papyrus - 设置显式和 ElementImpl - 代码外的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19244684/
我是一名优秀的程序员,十分优秀!