From c2c9afef9b691cbbfed37b212907da5f96acd95a Mon Sep 17 00:00:00 2001 From: David McKnight Date: Mon, 11 Sep 2006 14:39:35 +0000 Subject: [PATCH] part of fix for 153652. Allowing drag and drop from RSE to navigator --- .../ui/view/SystemDNDTransferRunnable.java | 42 +++++++ .../rse/ui/view/SystemDropActionDelegate.java | 116 ++++++++++++++++++ 2 files changed, 158 insertions(+) diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java index 51cf3b9e2a7..17351906a28 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDNDTransferRunnable.java @@ -21,6 +21,7 @@ import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -275,6 +276,43 @@ public class SystemDNDTransferRunnable extends Job return _ok; } + protected boolean transferRSEResourcesToEclipseResource(IProgressMonitor monitor, IResource target, ISubSystem targetSubSystem) + { + for (int i = 0; i < _srcObjects.size() && _ok; i++) + { + Object srcObject = _srcObjects.get(i); + + _resultSrcObjects.add(srcObject); + + if (srcObject instanceof SystemMessage) + { + operationFailed(monitor); + showErrorMessage((SystemMessage) srcObject); + } + else if (srcObject != null) + { + ISystemDragDropAdapter srcAdapter = (ISystemDragDropAdapter) ((IAdaptable) srcObject).getAdapter(ISystemDragDropAdapter.class); + Object tempFile = srcAdapter.doDrag(srcObject, true, monitor); + if (tempFile instanceof IResource) + { + IResource res = (IResource)tempFile; + try + { + IPath destPath = target.getFullPath(); + destPath = destPath.append(res.getName()); + res.copy(destPath, false, monitor); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + + return true; + } + protected boolean transferNonRSEResources(IProgressMonitor monitor, Object target, ISubSystem targetSubSystem, ISystemDragDropAdapter targetAdapter) { @@ -535,6 +573,10 @@ public class SystemDNDTransferRunnable extends Job transferNonRSEResources(monitor, target, targetSubSystem, targetAdapter); } } + else if (target instanceof IResource) + { + transferRSEResourcesToEclipseResource(monitor, (IResource)target, targetSubSystem); + } } // fire refresh for target diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDropActionDelegate.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDropActionDelegate.java index b62862a6b6d..74f1530af95 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDropActionDelegate.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDropActionDelegate.java @@ -16,10 +16,19 @@ package org.eclipse.rse.ui.view; +import java.util.ArrayList; + import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.rse.core.model.ISystemProfile; +import org.eclipse.rse.core.model.ISystemRegistry; +import org.eclipse.rse.core.subsystems.ISubSystem; +import org.eclipse.rse.services.clientserver.messages.SystemMessage; +import org.eclipse.rse.services.clientserver.messages.SystemMessageException; +import org.eclipse.rse.ui.ISystemMessages; import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.part.IDropActionDelegate; @@ -69,6 +78,43 @@ public class SystemDropActionDelegate implements IDropActionDelegate if (localPath != null) { + + if (data instanceof byte[]) + { + byte[] result = (byte[]) data; + + // get the sources + //StringTokenizer tokenizer = new StringTokenizer(new String(result), SystemViewDataDropAdapter.RESOURCE_SEPARATOR); + String[] tokens = (new String(result)).split("\\"+SystemViewDataDropAdapter.RESOURCE_SEPARATOR); + ArrayList srcObjects = new ArrayList(); + ArrayList rulesList = new ArrayList(); + int j = 0; + //while (tokenizer.hasMoreTokens()) + for (int i = 0; i