From bb75095dc27632e04242a36404dfb709eaf2d013 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Thu, 28 Aug 2014 15:50:19 +0000 Subject: [PATCH] Ensure update of annotation view in case of external - renamings of model elements (e.g., in the properties view) - addition of new instances of multi-instance annotations -> Use originator of the notification, and not the new value to trigger the update refs 1841 --- .../ui/annotation/view/AnnotationViewPartBase.java | 12 ++++++++---- .../view/CreateAnnotationInstanceColumn.java | 12 ++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java index 1f1338063..4e42219f5 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java @@ -51,7 +51,8 @@ import org.fortiss.tooling.kernel.utils.EcoreUtils; * @version $Rev$ * @ConQAT.Rating YELLOW Hash: 40FF672DC52B17062D1716341177D76A */ -public abstract class AnnotationViewPartBase extends ViewPart implements ISelectionListener, IAnnotationViewPart { +public abstract class AnnotationViewPartBase extends ViewPart implements ISelectionListener, + IAnnotationViewPart { /** the currently selected object */ private IModelElement currentlySelectedObject; @@ -70,9 +71,12 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect @Override public void notifyChanged(Notification notification) { if((notification.getEventType() == Notification.ADD) || - (notification.getEventType() == Notification.REMOVE)) { - if(notification.getNewValue() instanceof IModelElement) { - update((IModelElement)notification.getNewValue()); + (notification.getEventType() == Notification.REMOVE || (notification + .getEventType() == Notification.SET))) { + + Object notifier = notification.getNotifier(); + if(notifier instanceof IModelElement) { + update((IModelElement)notifier); } } } diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java index 24678fe1f..c5a40ed01 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java @@ -17,6 +17,8 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.base.ui.annotation.view; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.impl.NotificationImpl; import org.eclipse.emf.common.util.EMap; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; @@ -225,6 +227,16 @@ public class CreateAnnotationInstanceColumn extends ViewerColumn { ((EMap<String, ?>)columnSpecAnnEntry .getSpecificationValue(columnSpec.getClass())).put( instanceKey, null); + + // Inform others, e.g. the respective annotation view that a new + // instance of this annotation has been created. + columnSpecAnnEntry.getModelElement().eNotify( + new NotificationImpl(Notification.SET, null, null) { + @Override + public Object getNotifier() { + return columnSpecAnnEntry.getModelElement(); + } + }); } catch(IllegalArgumentException e) { // e.printStackTrace(); MessageDialog -- GitLab