Transfers for SelectionView can now be defined with extension point
diff --git a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
index 812f648..bb027ef 100644
--- a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
+++ b/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Testsuite
-Bundle-SymbolicName: org.eclipse.capra.testsuite
+Bundle-SymbolicName: org.eclipse.capra.testsuite;singleton:=true
 Bundle-Version: 0.7.0.qualifier
 Export-Package: org.eclipse.capra.testsuite
 Require-Bundle: org.junit;bundle-version="4.12.0",
@@ -23,3 +23,4 @@
  org.eclipse.capra.handler.emf,
  org.eclipse.capra.generic.persistence
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.swt.dnd
diff --git a/org.eclipse.capra.testsuite/plugin.xml b/org.eclipse.capra.testsuite/plugin.xml
new file mode 100644
index 0000000..1589acc
--- /dev/null
+++ b/org.eclipse.capra.testsuite/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.capra.ui.transfers">
+      <transfer
+            class="org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy">
+      </transfer>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
new file mode 100644
index 0000000..31839ad
--- /dev/null
+++ b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.capra.testsuite;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy;
+import org.eclipse.swt.dnd.Transfer;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Contains an integration test to check if contributions to extension points
+ * are set correctly.
+ * 
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class TestUiExtensionPoint {
+
+	private static final String TRANSFER_EXTENSION_POINT_ID = "org.eclipse.capra.ui.transfers";
+
+	@Test
+	public void testExtensionPoint() {
+
+		List<Transfer> transfers = new ArrayList<Transfer>();
+
+		// Get all additionally configured transfers from the extension point.
+		transfers.addAll(ExtensionPointHelper.getExtensions(TRANSFER_EXTENSION_POINT_ID, "class").stream()
+				.map(Transfer.class::cast).collect(Collectors.toList()));
+
+		Assert.assertTrue(transfers.size() > 0);
+		Assert.assertTrue(transfers.get(0) instanceof UiTransferExtensionDummy);
+	}
+
+}
diff --git a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
new file mode 100644
index 0000000..ddba796
--- /dev/null
+++ b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
@@ -0,0 +1,44 @@
+package org.eclipse.capra.testsuite.extension;
+
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+
+public class UiTransferExtensionDummy extends Transfer {
+
+	@Override
+	public TransferData[] getSupportedTypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public boolean isSupportedType(TransferData transferData) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	protected int[] getTypeIds() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
diff --git a/org.eclipse.capra.ui/plugin.xml b/org.eclipse.capra.ui/plugin.xml
index 874525a..b7e46a1 100644
--- a/org.eclipse.capra.ui/plugin.xml
+++ b/org.eclipse.capra.ui/plugin.xml
@@ -12,6 +12,7 @@
  -->
 
 <plugin>
+   <extension-point id="org.eclipse.capra.ui.transfers" name="Transfers" schema="schema/org.eclipse.capra.ui.transfers.exsd"/>
    <extension
          point="org.eclipse.ui.commands">
       <command
diff --git a/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd b/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd
new file mode 100644
index 0000000..546d8ac
--- /dev/null
+++ b/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.ui" id="org.eclipse.capra.ui.transfers" name="Transfers"/>
+      </appinfo>
+      <documentation>
+         Defines the transfers needed to support drag&amp;drop operations from and to the selection view.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="transfer"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="transfer">
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.swt.dnd.Transfer:"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
index 7620066..7260af7 100644
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
+++ b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
@@ -11,6 +11,7 @@
 package org.eclipse.capra.ui.views;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -52,6 +53,21 @@
 	/** The ID of the view as specified by the extension. */
 	public static final String ID = "org.eclipse.capra.generic.views.SelectionView";
 
+	/**
+	 * Identifier of the extension point that contains the transfer definitions.
+	 */
+	private static final String TRANSFER_EXTENSION_POINT_ID = "org.eclipse.capra.ui.transfers";
+
+	/**
+	 * Standard transfers that are always used in the SelectionView.
+	 */
+	private static final Transfer[] DEFAULT_TRANSFERS = new Transfer[] {
+			org.eclipse.ui.part.ResourceTransfer.getInstance(), org.eclipse.ui.part.EditorInputTransfer.getInstance(),
+			org.eclipse.swt.dnd.FileTransfer.getInstance(), org.eclipse.swt.dnd.RTFTransfer.getInstance(),
+			org.eclipse.swt.dnd.TextTransfer.getInstance(), org.eclipse.swt.dnd.URLTransfer.getInstance(),
+			org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(),
+			org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() };
+
 	/** The actual table containing selected elements */
 	public TableViewer viewer;
 
@@ -128,6 +144,7 @@
 
 	}
 
+	@Override
 	public void createPartControl(Composite parent) {
 		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 		viewer.setContentProvider(new ViewContentProvider());
@@ -139,14 +156,14 @@
 		hookContextMenu();
 
 		int ops = DND.DROP_COPY | DND.DROP_MOVE;
-		Transfer[] transfers = new Transfer[] { org.eclipse.ui.part.ResourceTransfer.getInstance(),
-				org.eclipse.ui.part.EditorInputTransfer.getInstance(), org.eclipse.swt.dnd.FileTransfer.getInstance(),
-				org.eclipse.swt.dnd.RTFTransfer.getInstance(), org.eclipse.swt.dnd.TextTransfer.getInstance(),
-				org.eclipse.swt.dnd.URLTransfer.getInstance(),
-				org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(),
-				org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() };
 
-		viewer.addDropSupport(ops, transfers, new SelectionDropAdapter(viewer));
+		List<Transfer> transfers = new ArrayList<Transfer>(Arrays.asList(DEFAULT_TRANSFERS));
+
+		// Get all additionally configured transfers from the extension point.
+		transfers.addAll(ExtensionPointHelper.getExtensions(TRANSFER_EXTENSION_POINT_ID, "class").stream()
+				.map(Transfer.class::cast).collect(Collectors.toList()));
+
+		viewer.addDropSupport(ops, transfers.toArray(DEFAULT_TRANSFERS), new SelectionDropAdapter(viewer));
 	}
 
 	private void hookContextMenu() {
@@ -168,7 +185,6 @@
 
 	@SuppressWarnings("unchecked")
 	public void dropToSelection(Object data) {
-
 		if (data instanceof TreeSelection) {
 			TreeSelection tree = (TreeSelection) data;
 			if (tree.toList().stream().allMatch(this::validateSelection))