0

I tried the solution provided here: automatic update of graphiti diagrams in case of changes in the datamodel

I am trying to call the Upadate feature in the UpdateNeeded function of my class which implements AbstractUpdateFeature:

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

In the Update function I am trying to change the value of the text field of a Pictogram element:

    // Set name in pictogram model
    if (pictogramElement instanceof ContainerShape) {
        ContainerShape cs = (ContainerShape) pictogramElement;
        for (Shape shape : cs.getChildren()) {
            if (shape.getGraphicsAlgorithm() instanceof Text) {
                Text text = (Text) shape.getGraphicsAlgorithm(); 
                text.setValue("aaa");
                return true;
            }
        }
    }

But I am getting the Exception:

java.lang.IllegalStateException: Cannot modify resource set without a write transaction
at org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting(TransactionChangeRecorder.java:348)
at org.eclipse.emf.transaction.impl.TransactionChangeRecorder.appendNotification(TransactionChangeRecorder.java:302)
at org.eclipse.emf.transaction.impl.TransactionChangeRecorder.processObjectNotification(TransactionChangeRecorder.java:284)
at org.eclipse.emf.transaction.impl.TransactionChangeRecorder.notifyChanged(TransactionChangeRecorder.java:240)
Community
  • 1
  • 1
Jay Nair
  • 1
  • 1

1 Answers1

0

Try executing the feature using DiagramBehavior

getDiagramBehavior().executeFeature(feature, context);