From e634562c1f5cfeaf1c535408edf6deb0c01bfa10 Mon Sep 17 00:00:00 2001
From: Tiziano Munaro <munaro@fortiss.org>
Date: Mon, 9 Dec 2019 10:38:29 +0100
Subject: [PATCH] [LWFXEF] Change EObjectBasedDiagramControllerBase to work on
 EObjects

The type checks and model change providers have been edited in order for
the class to actually work with `EObjects`:
* The `EObjectBasedDiagramControllerBase` has been changed to require
`EObject`s only (not `IHierarchicElement`s).
* The `HierarchicModelElementModelChangeProvider`has been changed to
require `EObject`s only and has thus been renamed to
`EObjectModelChangeProvider`.

Issue-Ref: 3890
Issue-Url: https://af3-developer.fortiss.org/issues/3890

Signed-off-by: Tiziano Munaro <munaro@fortiss.org>
---
 .../tooling/base/ui/editor/fx/.ratings        |  4 ++--
 .../fx/EObjectBasedDiagramControllerBase.java | 20 ++++++++----------
 ...r.java => EObjectModelChangeProvider.java} | 21 +++++++++----------
 3 files changed, 21 insertions(+), 24 deletions(-)
 rename org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/{HierarchicModelElementModelChangeProvider.java => EObjectModelChangeProvider.java} (73%)

diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/.ratings
index e65316624..8393231ba 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/.ratings
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/.ratings
@@ -1,7 +1,7 @@
 ContextMenuUtil.java 3e04dbd52ee99a59735d39b4087c55b07fb91076 GREEN
-EObjectBasedDiagramControllerBase.java b25bbbaa6eef3878b9aea73ca67d66de9beebb18 GREEN
+EObjectBasedDiagramControllerBase.java 3564ece9b3cac29caaf9201e0be3451a6a3c2b21 YELLOW
 EObjectBasedRectangularResizableContentControllerBase.java a263a6c123ee96015e0a5c37b6e3c13ebd0e8a75 GREEN
-HierarchicModelElementModelChangeProvider.java 05217577a99d78038763bbcd841a032bb84f0553 GREEN
+EObjectModelChangeProvider.java 664e4db2e32124832682aff8235ac380ed4db1c0 YELLOW
 KernelServiceBasedModelChangeProviderBase.java 7c30347fb0c7cc4aacc79aeaf85167872afc1958 GREEN
 LayoutModelElementModelChangeProvider.java 70c50b789c0088a7e5363bf662bc707a5b5ddf10 GREEN
 LayoutedModelElementBasedContentAnchorageController.java c4dfb9dbcd16078c63321d5dec13a902e4088949 GREEN
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectBasedDiagramControllerBase.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectBasedDiagramControllerBase.java
index b25bbbaa6..3564ece9b 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectBasedDiagramControllerBase.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectBasedDiagramControllerBase.java
@@ -26,7 +26,6 @@ import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.DiagramViewerFeatu
 import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.controller.base.ControllerBase;
 import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.model.IModelChangeProvider;
 import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.mvc.IMVCBundle;
-import org.fortiss.tooling.base.model.element.IHierarchicElement;
 import org.fortiss.tooling.kernel.extension.data.IElementCompositionContext;
 import org.fortiss.tooling.kernel.service.IElementCompositorService;
 import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
@@ -41,18 +40,17 @@ import javafx.scene.control.MenuItem;
  * @author hoelzl
  */
 public abstract class EObjectBasedDiagramControllerBase extends ControllerBase {
+
 	/** The model change provider. */
-	private final HierarchicModelElementModelChangeProvider modelChangeProvider;
+	private final EObjectModelChangeProvider modelChangeProvider;
 
 	/** Constructor. */
 	public EObjectBasedDiagramControllerBase(IMVCBundle mvcb) {
 		super(mvcb);
-		if(!(getModel() instanceof IHierarchicElement)) {
-			throw new IllegalArgumentException(
-					"Model element must be an instance of an IHierarchicElement.");
+		if(!(getModel() instanceof EObject)) {
+			throw new IllegalArgumentException("Model element must be an instance of an EObject.");
 		}
-		this.modelChangeProvider =
-				new HierarchicModelElementModelChangeProvider(getHierarchicElement());
+		this.modelChangeProvider = new EObjectModelChangeProvider(getEObject());
 	}
 
 	/** {@inheritDoc} */
@@ -61,10 +59,10 @@ public abstract class EObjectBasedDiagramControllerBase extends ControllerBase {
 		return modelChangeProvider;
 	}
 
-	/** Returns the {@link IHierarchicElement} model element. */
-	protected IHierarchicElement getHierarchicElement() {
+	/** Returns the {@link EObject} model element. */
+	protected EObject getEObject() {
 		// wild cast works: see constructor check with exception
-		return (IHierarchicElement)getModel();
+		return (EObject)getModel();
 	}
 
 	/** {@inheritDoc} */
@@ -76,7 +74,7 @@ public abstract class EObjectBasedDiagramControllerBase extends ControllerBase {
 		double y = max(features.getVerticalSpacing(), diagramLocation.getY());
 
 		// wild cast works: see constructor exception
-		EObject modelParent = getHierarchicElement();
+		EObject modelParent = getEObject();
 		IElementCompositionContext edc = createElementCompositionContext(modelParent, x, y, true,
 				getViewer().getFeatures().getCurrentZoomFactor());
 		List<MenuItem> result = createPrototypeMenu(modelParent, edc);
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/HierarchicModelElementModelChangeProvider.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectModelChangeProvider.java
similarity index 73%
rename from org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/HierarchicModelElementModelChangeProvider.java
rename to org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectModelChangeProvider.java
index 05217577a..664e4db2e 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/HierarchicModelElementModelChangeProvider.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/EObjectModelChangeProvider.java
@@ -18,29 +18,28 @@ package org.fortiss.tooling.base.ui.editor.fx;
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.fortiss.tooling.base.model.element.IHierarchicElement;
+import org.eclipse.emf.ecore.EObject;
 
 /**
- * An {@link KernelServiceBasedModelChangeProviderBase} for {@link IHierarchicElement}s.
+ * An {@link KernelServiceBasedModelChangeProviderBase} for {@link EObject}s.
  * 
  * @author hoelzl
  */
-final class HierarchicModelElementModelChangeProvider
-		extends KernelServiceBasedModelChangeProviderBase<IHierarchicElement> {
+final class EObjectModelChangeProvider extends KernelServiceBasedModelChangeProviderBase<EObject> {
 	/** The model element. */
-	private final IHierarchicElement modelElement;
+	private final EObject modelElement;
 	/** The EMF notification listener. */
-	private final HierarchicElementAdapter notificationListener;
+	private final EObjectElementAdapter notificationListener;
 
 	/** Constructor. */
-	public HierarchicModelElementModelChangeProvider(IHierarchicElement modelElement) {
+	public EObjectModelChangeProvider(EObject modelElement) {
 		this.modelElement = modelElement;
-		this.notificationListener = new HierarchicElementAdapter();
+		this.notificationListener = new EObjectElementAdapter();
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	protected IHierarchicElement getModelElement() {
+	protected EObject getModelElement() {
 		return modelElement;
 	}
 
@@ -50,8 +49,8 @@ final class HierarchicModelElementModelChangeProvider
 		return notificationListener;
 	}
 
-	/** Specialized adapter listening to model changes of {@link IHierarchicElement}. */
-	private class HierarchicElementAdapter extends AdapterImpl {
+	/** Specialized adapter listening to model changes of {@link EObject}. */
+	private class EObjectElementAdapter extends AdapterImpl {
 		/** {@inheritDoc} */
 		@Override
 		public void notifyChanged(Notification event) {
-- 
GitLab