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