Автоматическое обновление графитограмм в случае изменений в модели данных

У меня есть EMF Datamodel и я представляю его в рамках "Graphiti". В случае изменений в модели данных метод "updateNeeded()" в моей UpdateFeature вызывается случайным образом или нет. Для этого у меня есть слушатель. Этот слушатель вызывает метод "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

С уважением, Джулиана

1 ответ

В 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);
   }
});

Надеюсь это поможет

Другие вопросы по тегам