Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-09-22 09:51:03 +0000
committerEike Stepper2012-09-22 09:51:03 +0000
commitb3afe301c5673763353006fbbcd22f67f4688c60 (patch)
tree70e9121dab176c9b34b63f5148ab650991405e64
parent99862da85768d88a0470978a8a91096afc2b391b (diff)
downloadcdo-b3afe301c5673763353006fbbcd22f67f4688c60.tar.gz
cdo-b3afe301c5673763353006fbbcd22f67f4688c60.tar.xz
cdo-b3afe301c5673763353006fbbcd22f67f4688c60.zip
[388928] Develop a resource transfer framework
https://bugs.eclipse.org/bugs/show_bug.cgi?id=388928
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.repository.ui/src/org/eclipse/emf/cdo/transfer/repository/internal/ui/RepositoryUIProvider.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/internal/ui/FileSystemUIProvider.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/spi/ui/TransferUIProvider.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDragListener.java92
-rw-r--r--plugins/org.eclipse.emf.cdo.transfer.workspace.ui/src/org/eclipse/emf/cdo/transfer/internal/workspace/WorkspaceUIProvider.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java2
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/dnd/DNDDragListener.java16
7 files changed, 147 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.transfer.repository.ui/src/org/eclipse/emf/cdo/transfer/repository/internal/ui/RepositoryUIProvider.java b/plugins/org.eclipse.emf.cdo.transfer.repository.ui/src/org/eclipse/emf/cdo/transfer/repository/internal/ui/RepositoryUIProvider.java
index 455bde482a..d573b4d69a 100644
--- a/plugins/org.eclipse.emf.cdo.transfer.repository.ui/src/org/eclipse/emf/cdo/transfer/repository/internal/ui/RepositoryUIProvider.java
+++ b/plugins/org.eclipse.emf.cdo.transfer.repository.ui/src/org/eclipse/emf/cdo/transfer/repository/internal/ui/RepositoryUIProvider.java
@@ -11,6 +11,7 @@
package org.eclipse.emf.cdo.transfer.repository.internal.ui;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
+import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.transfer.CDOTransferElement;
import org.eclipse.emf.cdo.transfer.CDOTransferSystem;
@@ -23,8 +24,11 @@ import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.factory.ProductCreationException;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Transfer;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
/**
@@ -74,6 +78,22 @@ public class RepositoryUIProvider implements TransferUIProvider
return null;
}
+ public Object convertSelection(IStructuredSelection selection)
+ {
+ List<CDOResourceNode> result = new ArrayList<CDOResourceNode>();
+ for (Iterator<?> it = selection.iterator(); it.hasNext();)
+ {
+ Object object = it.next();
+ if (object instanceof CDOResourceNode)
+ {
+ CDOResourceNode node = (CDOResourceNode)object;
+ result.add(node);
+ }
+ }
+
+ return result.toArray(new CDOResourceNode[result.size()]);
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/internal/ui/FileSystemUIProvider.java b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/internal/ui/FileSystemUIProvider.java
index 24372b0fc0..913b0c9071 100644
--- a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/internal/ui/FileSystemUIProvider.java
+++ b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/internal/ui/FileSystemUIProvider.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.cdo.ui.shared.SharedIcons;
import org.eclipse.net4j.util.factory.ProductCreationException;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
@@ -76,6 +77,12 @@ public class FileSystemUIProvider implements TransferUIProvider
return null;
}
+ public Object convertSelection(IStructuredSelection selection)
+ {
+ // TODO: implement FileSystemUIProvider.convertSelection(selection)
+ return null;
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/spi/ui/TransferUIProvider.java b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/spi/ui/TransferUIProvider.java
index a00c1e0e0b..5e1c244c3a 100644
--- a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/spi/ui/TransferUIProvider.java
+++ b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/spi/ui/TransferUIProvider.java
@@ -17,6 +17,7 @@ import org.eclipse.net4j.util.container.IManagedContainer;
import org.eclipse.net4j.util.factory.ProductCreationException;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Transfer;
import java.util.ArrayList;
@@ -36,6 +37,8 @@ public interface TransferUIProvider
public CDOTransferElement convertTransferTarget(Object target);
+ public Object convertSelection(IStructuredSelection selection);
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDragListener.java b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDragListener.java
new file mode 100644
index 0000000000..35e44d0a6f
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.transfer.ui/src/org/eclipse/emf/cdo/transfer/ui/TransferDragListener.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) 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:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.transfer.ui;
+
+import org.eclipse.emf.cdo.transfer.spi.ui.TransferUIProvider;
+import org.eclipse.emf.cdo.transfer.spi.ui.TransferUIProvider.Factory;
+
+import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.ui.dnd.DNDDragListener;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class TransferDragListener extends DNDDragListener<Object>
+{
+ private TransferUIProvider[] uiProviders;
+
+ protected TransferDragListener(StructuredViewer viewer)
+ {
+ super(viewer);
+ uiProviders = getUIProviders();
+
+ List<Transfer> transfers = new ArrayList<Transfer>();
+ for (int i = 0; i < uiProviders.length; i++)
+ {
+ TransferUIProvider uiProvider = uiProviders[i];
+ uiProvider.addSupportedTransfers(transfers);
+ }
+
+ setTransfers(transfers.toArray(new Transfer[transfers.size()]));
+ }
+
+ protected IManagedContainer getContainer()
+ {
+ return IPluginContainer.INSTANCE;
+ }
+
+ protected TransferUIProvider[] getUIProviders()
+ {
+ return Factory.getAll(getContainer());
+ }
+
+ @Override
+ protected Object getObject(IStructuredSelection selection)
+ {
+ for (int i = 0; i < uiProviders.length; i++)
+ {
+ TransferUIProvider uiProvider = uiProviders[i];
+
+ Object object = uiProvider.convertSelection(selection);
+ if (object != null)
+ {
+ return object;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public void dragFinished(DragSourceEvent event)
+ {
+ // TODO Eventually implement removal for move DND
+ super.dragFinished(event);
+ }
+
+ public static TransferDragListener support(StructuredViewer viewer)
+ {
+ TransferDragListener dragListener = new TransferDragListener(viewer);
+ Transfer[] transfers = dragListener.getTransfers();
+ viewer.addDragSupport(DND.DROP_MOVE, transfers, dragListener);
+ return dragListener;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.transfer.workspace.ui/src/org/eclipse/emf/cdo/transfer/internal/workspace/WorkspaceUIProvider.java b/plugins/org.eclipse.emf.cdo.transfer.workspace.ui/src/org/eclipse/emf/cdo/transfer/internal/workspace/WorkspaceUIProvider.java
index a7da8500b8..d07f9f5eba 100644
--- a/plugins/org.eclipse.emf.cdo.transfer.workspace.ui/src/org/eclipse/emf/cdo/transfer/internal/workspace/WorkspaceUIProvider.java
+++ b/plugins/org.eclipse.emf.cdo.transfer.workspace.ui/src/org/eclipse/emf/cdo/transfer/internal/workspace/WorkspaceUIProvider.java
@@ -22,6 +22,7 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchLabelProvider;
@@ -77,6 +78,12 @@ public class WorkspaceUIProvider implements TransferUIProvider
return null;
}
+ public Object convertSelection(IStructuredSelection selection)
+ {
+ // TODO: implement WorkspaceUIProvider.convertSelection(selection)
+ return null;
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
index e73f480fb2..463d1d2403 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.cdo.eresource.CDOResourceLeaf;
import org.eclipse.emf.cdo.internal.ui.actions.OpenSessionAction;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transfer.ui.TransferDragListener;
import org.eclipse.emf.cdo.transfer.ui.TransferDropAdapter;
import org.eclipse.emf.cdo.ui.CDOEditorUtil;
import org.eclipse.emf.cdo.ui.CDOItemProvider;
@@ -62,6 +63,7 @@ public class CDOSessionsView extends ContainerView
Control control = super.createUI(parent);
TreeViewer viewer = getViewer();
+ TransferDragListener.support(viewer);
TransferDropAdapter.support(viewer);
return control;
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/dnd/DNDDragListener.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/dnd/DNDDragListener.java
index 6a5b49d340..31f9cca423 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/dnd/DNDDragListener.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/dnd/DNDDragListener.java
@@ -35,6 +35,14 @@ public abstract class DNDDragListener<TYPE> extends DragSourceAdapter
}
/**
+ * @since 3.3
+ */
+ protected DNDDragListener(StructuredViewer viewer)
+ {
+ this.viewer = viewer;
+ }
+
+ /**
* @since 3.0
*/
public Transfer[] getTransfers()
@@ -42,6 +50,14 @@ public abstract class DNDDragListener<TYPE> extends DragSourceAdapter
return transfers;
}
+ /**
+ * @since 3.3
+ */
+ public void setTransfers(Transfer[] transfers)
+ {
+ this.transfers = transfers;
+ }
+
public StructuredViewer getViewer()
{
return viewer;

Back to the top