From b1f7620d39a83e4fd456ca6efbe1765ea5be7d5c Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Thu, 10 Nov 2011 10:54:45 +0000
Subject: [PATCH] some cleanup and implementation refs 265

---
 .../dnd/CompositionServiceLocalTransfer.java  |  2 +-
 ...onnectionCompositionDragSourceAdapter.java |  2 +-
 ...onnectionCompositionDropTargetAdapter.java | 43 ++++++++++++++++++-
 .../ui/dnd/ConnectionCompositionSource.java   |  7 ++-
 .../ElementCompositionDragSourceAdapter.java  |  2 +-
 .../ui/dnd/ElementCompositionSource.java      |  7 ++-
 6 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/CompositionServiceLocalTransfer.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/CompositionServiceLocalTransfer.java
index 139728b19..8d2e0edc6 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/CompositionServiceLocalTransfer.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/CompositionServiceLocalTransfer.java
@@ -28,7 +28,7 @@ import org.fortiss.tooling.kernel.service.IElementCompositorService;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating RED Hash:
+ * @ConQAT.Rating YELLOW Hash: 736E49D75B233CB065D623C1236DEE52
  */
 public class CompositionServiceLocalTransfer extends SimpleObjectTransfer {
 	/** Singleton instance. */
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDragSourceAdapter.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDragSourceAdapter.java
index ec9877612..2bd7cd271 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDragSourceAdapter.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDragSourceAdapter.java
@@ -32,7 +32,7 @@ import org.eclipse.swt.dnd.DragSourceAdapter;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: F6A441B08B971BCE814614E2C95BF3AF
+ * @ConQAT.Rating YELLOW Hash: 95C337E875F3C6A557C6067C7B4D4C42
  */
 public abstract class ConnectionCompositionDragSourceAdapter extends
 		ElementCompositionDragSourceAdapter {
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDropTargetAdapter.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDropTargetAdapter.java
index 7af87d886..83379ff4f 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDropTargetAdapter.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionDropTargetAdapter.java
@@ -17,7 +17,12 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.ui.dnd;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.widgets.Widget;
+import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
 
 /**
  * {@link DropTargetAdapter} for completing an EObject connection via a drop
@@ -30,5 +35,41 @@ import org.eclipse.swt.dnd.DropTargetAdapter;
  */
 public abstract class ConnectionCompositionDropTargetAdapter extends
 		DropTargetAdapter {
-	// TODO: implement
+
+	/** {@inheritDoc} */
+	@Override
+	public void drop(DropTargetEvent event) {
+		ConnectionCompositionSource dragSource = getDragSourceFromTransfer();
+		EObject target = getTargetModel(event.item);
+		IConnectionCompositorService.INSTANCE.connect(
+				dragSource.getDesignatedElement(), target,
+				dragSource.getDesignatedParentElement(), null);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void dragOver(DropTargetEvent event) {
+		ConnectionCompositionSource dragSource = getDragSourceFromTransfer();
+		EObject target = getTargetModel(event.item);
+		if (target == null || dragSource.getDesignatedElement() == null) {
+			event.detail = DND.DROP_NONE;
+			return;
+		}
+		if (IConnectionCompositorService.INSTANCE.canConnect(
+				dragSource.getDesignatedElement(), target,
+				dragSource.getDesignatedParentElement(), null)) {
+			event.detail = DND.DROP_NONE;
+			return;
+		}
+		event.detail = DND.DROP_LINK;
+	}
+
+	/** Returns the current target element. */
+	protected abstract EObject getTargetModel(Widget dropTarget);
+
+	/** Returns the transfered object. */
+	private ConnectionCompositionSource getDragSourceFromTransfer() {
+		return (ConnectionCompositionSource) CompositionServiceLocalTransfer
+				.getInstance().getObject();
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionSource.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionSource.java
index b9f3fa1e0..fda6aced4 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionSource.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ConnectionCompositionSource.java
@@ -18,14 +18,17 @@ $Id$
 package org.fortiss.tooling.kernel.ui.dnd;
 
 import org.eclipse.emf.ecore.EObject;
+import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
 
 /**
- * DND transfer object for EObject linking.
+ * DND transfer object for EObject connection composition. If an object of this
+ * class is transfered via DND, the drop target usually uses the information
+ * contained herein to call the {@link IConnectionCompositorService}.
  * 
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: 8DA926A0F40041760D2A719D7D70F954
+ * @ConQAT.Rating YELLOW Hash: 7A9A3F2F21B95A7ABBC4CD6743224DD6
  */
 public class ConnectionCompositionSource extends ElementCompositionSource {
 	/** Stores the designated parent element. */
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDragSourceAdapter.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDragSourceAdapter.java
index f9b494024..a273d5296 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDragSourceAdapter.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDragSourceAdapter.java
@@ -32,7 +32,7 @@ import org.eclipse.swt.dnd.Transfer;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: 26A507800DA077F9F9F4593751639A74
+ * @ConQAT.Rating YELLOW Hash: 70273F4B405C5A2C55ACC3BFFC57D5C1
  */
 public abstract class ElementCompositionDragSourceAdapter extends
 		DragSourceAdapter {
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionSource.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionSource.java
index 32dfae1b3..67b66d908 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionSource.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionSource.java
@@ -18,14 +18,17 @@ $Id$
 package org.fortiss.tooling.kernel.ui.dnd;
 
 import org.eclipse.emf.ecore.EObject;
+import org.fortiss.tooling.kernel.service.IElementCompositorService;
 
 /**
- * DND transfer object for EObject element composition.
+ * DND transfer object for EObject element composition. If an object of this
+ * class is transfered via DND, the drop target usually uses the information
+ * contained herein to call the {@link IElementCompositorService}.
  * 
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: A077E28503FF32EFBB402C70FC7A61C2
+ * @ConQAT.Rating YELLOW Hash: EAB27D084A09CC5D79CABEBF38DCD7F9
  */
 public class ElementCompositionSource {
 
-- 
GitLab