0

ここで提供されているソリューションを試しました: データモデルが変更された場合のグラファイト図の自動更新

AbstractUpdateFeature を実装するクラスの UpdateNeeded 関数で Upadate 機能を呼び出そうとしています。

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

Update 関数で、ピクトグラム要素のテキスト フィールドの値を変更しようとしています。

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

しかし、私は例外を取得しています:

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)
4

1 に答える 1

0

DiagramBehavior を使用して機能を実行してみてください

getDiagramBehavior().executeFeature(feature, context);
于 2015-08-24T09:44:39.690 に答える