### Eclipse Workspace Patch 1.0 #P org.eclipse.rse.ui Index: UI/org/eclipse/rse/internal/ui/view/SystemViewDataDropAdapter.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewDataDropAdapter.java,v retrieving revision 1.3 diff -u -r1.3 SystemViewDataDropAdapter.java --- UI/org/eclipse/rse/internal/ui/view/SystemViewDataDropAdapter.java 14 May 2007 13:04:52 -0000 1.3 +++ UI/org/eclipse/rse/internal/ui/view/SystemViewDataDropAdapter.java 15 Jun 2007 15:46:59 -0000 @@ -18,6 +18,7 @@ package org.eclipse.rse.internal.ui.view; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IResource; @@ -27,6 +28,8 @@ import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.jface.util.LocalSelectionTransfer; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.ViewerDropAdapter; import org.eclipse.rse.core.RSECorePlugin; @@ -50,7 +53,9 @@ * Drop adapter for dropping objects in the Systems views. * */ -public class SystemViewDataDropAdapter extends ViewerDropAdapter +public class SystemViewDataDropAdapter +//extends PluginDropAdapter +extends ViewerDropAdapter { protected Shell shell; protected long hoverStart = 0; @@ -94,6 +99,27 @@ return false; } + + + // DKM - hack to see if project explorer resources can be dropped in RSE + private boolean isLocalSelectionResources(PluginTransferData transferData) + { + byte[] result = transferData.getData(); + + // get the sources + String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR); //$NON-NLS-1$ + + ArrayList srcObjects = new ArrayList(); + for (int i = 0;i < tokens.length; i++) + { + String srcStr = tokens[i]; + if (srcStr.equals("org.eclipse.ui.navigator.ProjectExplorer")) + { + return true; + } + } + return false; + } private ArrayList getRSESourceObjects(PluginTransferData transferData) { @@ -109,8 +135,10 @@ { String srcStr = tokens[i]; - Object srcObject = getObjectFor(srcStr); - srcObjects.add(srcObject); + { + Object srcObject = getObjectFor(srcStr); + srcObjects.add(srcObject); + } } return srcObjects; } @@ -124,8 +152,21 @@ if (data instanceof PluginTransferData) { PluginTransferData transferData = (PluginTransferData) data; - srcObjects = getRSESourceObjects(transferData); - _sourceType = SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE; + if (isLocalSelectionResources(transferData)) + { + IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection(); + Iterator selIt = selection.iterator(); + while (selIt.hasNext()) + { + srcObjects.add(selIt.next()); + } + _sourceType = SystemDNDTransferRunnable.SRC_TYPE_ECLIPSE_RESOURCE; + } + else + { + srcObjects = getRSESourceObjects(transferData); + _sourceType = SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE; + } } // different kind of data else if (data instanceof IResource[]) @@ -152,6 +193,7 @@ return srcObjects; } + /** * Called by SWT after the drop have been validated to perform the * drop transfer.