在数据模型发生变化时自动更新涂鸦图

时间:2013-07-11 11:59:23

标签: eclipse-rcp graphiti

我有一个EMF Datamodel并用框架“Graphiti”表示它。 如果数据模型发生变化,我的UpdateFeature中的方法“updateNeeded()”是随机调用的。因此我有一个倾听者。如果发生更改,此侦听器将调用方法“update()”。 在方法更新中,我可以定义数据模型和图表之间的差异。但是如果我想在图表中添加或更改任何内容,则会抛出异常。

有谁知道如何自动更新图表?

这是我在侦听器中的示例代码:

UpdateContext updateContext = new UpdateContext(getDiagram().getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
IUpdateFeature updateFeature = getFeatureProvider().getUpdateFeature(updateContext);
updateFeature.update(updateContext);

和例外:

  

!ENTRY org.eclipse.ui 4 0 2013-07-11 13:36:43.886   !MESSAGE未处理的事件循环异常   !STACK 0

     

org.eclipse.swt.SWTException:无法执行runnable(java.lang.IllegalStateException:无法在没有写入事务的情况下修改资源集)

     

引起:java.lang.IllegalStateException:无法在没有写入事务的情况下修改资源集       在org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting

问候,Juliane

1 个答案:

答案 0 :(得分:2)

在Graphiti中,您需要在EMF事务中对图表执行更改。 您可以通过执行以下代码来执行此操作:

TransactionalEditingDomain domain = TransactionUtils.getEditingDomain(diagram);
domain.getCommandStack().execute(new RecordingCommand(domain) {
   public void doExecute() {
      UpdateContext updateContext = new UpdateContext(getDiagram().getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
      IUpdateFeature updateFeature = getFeatureProvider().getUpdateFeature(updateContext);
      updateFeature.update(updateContext);
   }
});

希望这有帮助