gpt4 book ai didi

java - EMF/GMF/Papyrus - 设置显式和 ElementImpl - 代码外的属性

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:16 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com