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&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))