diff options
author | Eike Stepper | 2012-09-22 09:51:03 +0000 |
---|---|---|
committer | Eike Stepper | 2012-09-22 09:51:03 +0000 |
commit | b3afe301c5673763353006fbbcd22f67f4688c60 (patch) | |
tree | 70e9121dab176c9b34b63f5148ab650991405e64 | |
parent | 99862da85768d88a0470978a8a91096afc2b391b (diff) | |
download | cdo-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
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; |