Автоматическое обновление графитограмм в случае изменений в модели данных
У меня есть 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);
}
});
Надеюсь это поможет