2013-07-11 3 views
1

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년 7월 11일 13 : 36 : 43.886

여기에 내 수신기에서 examplecode있다! MESSAGE 처리되지 않은 이벤트 루프 예외 ! STACK 0

org.eclipse.swt.SWTException : runnable을 실행하지 못했습니다 (java.lang.IllegalStateException : 쓰기 트랜잭션없이 리소스 세트를 수정할 수 없음) java.lang.IllegalStateException :

에 의한)에 org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting에서 쓰기 트랜잭션 없이 자원 세트를 수정할 수 없습니다

감사합니다, 줄리안

답변

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

희망이

을하는 데 도움이 다음과 같이 당신은 당신의 코드를 실행하여 해당 작업을 수행 할 수 있습니다