From 82dd0450ccc37db36111a15187f5f9e7e0e6388c Mon Sep 17 00:00:00 2001 From: Javier Montalvo Orus Date: Fri, 26 Oct 2007 16:25:10 +0000 Subject: [PATCH] [187096] Drag&Drop + Copy&Paste shows error message on FTP connection --- .../services/files/ftp/FTPService.java | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java index 48fa023c98f..f0e1d6887b7 100644 --- a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java +++ b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java @@ -63,6 +63,7 @@ * Martin Oberhuber (Wind River) - [203490] Fix NPE in FTPService.getUserHome() * Martin Oberhuber (Wind River) - [203500] Support encodings for FTP paths * Javier Montalvo Orus (Symbian) - [196351] Delete a folder should do recursive Delete + * Javier Montalvo Orus (Symbian) - [187096] Drag&Drop + Copy&Paste shows error message on FTP connection ********************************************************************************/ package org.eclipse.rse.internal.services.files.ftp; @@ -1276,23 +1277,8 @@ public class FTPService extends AbstractFileService implements IFileService, IFT if(_commandMutex.waitForLock(monitor, Long.MAX_VALUE)) { try { - File tempFile = null; - try { - tempFile = File.createTempFile(srcName, String.valueOf(srcParent.hashCode())); - tempFile.deleteOnExit(); - } catch (IOException e) { - throw new RemoteFileIOException(e); - } - - //Use binary raw transfer since the file will be uploaded again - - success = internalDownload(srcParent, srcName, tempFile, true, null, progressMonitor); - - if(success) - { - success = internalUpload(tempFile,tgtParent,tgtName,true,null,null,progressMonitor); - } + success = internalCopy(getFTPClient(), srcParent, srcName, tgtParent, tgtName, remoteHostFile.isDirectory(), progressMonitor); } catch(IOException e) { @@ -1306,6 +1292,53 @@ public class FTPService extends AbstractFileService implements IFileService, IFT return success; } + private boolean internalCopy(FTPClient ftpClient, String srcParent, String srcName, String tgtParent, String tgtName, boolean isDirectory, MyProgressMonitor monitor) throws SystemMessageException, IOException + { + boolean success = false; + + if(isDirectory) + { + + //create folder + success = ftpClient.makeDirectory(tgtParent+getSeparator()+tgtName); + + //copy contents + String newSrcParentPath = srcParent+getSeparator()+srcName; + String newTgtParentPath = tgtParent+getSeparator()+tgtName; + + ftpClient.changeWorkingDirectory(newSrcParentPath); + FTPFile[] fileNames = ftpClient.listFiles(); + + for (int i = 0; i < fileNames.length; i++) { + success = internalCopy(ftpClient,newSrcParentPath,fileNames[i].getName(), newTgtParentPath, fileNames[i].getName(), fileNames[i].isDirectory(),monitor); + } + + } + else + { + File tempFile = null; + + try { + tempFile = File.createTempFile(srcName, String.valueOf(srcParent.hashCode())); + tempFile.deleteOnExit(); + } catch (IOException e) { + throw new RemoteFileIOException(e); + } + + //Use binary raw transfer since the file will be uploaded again + + success = internalDownload(srcParent, srcName, tempFile, true, null, monitor); + + if(success) + { + success = internalUpload(tempFile,tgtParent,tgtName,true,null,null,monitor); + } + } + + return success; + + } + public boolean copyBatch(String[] srcParents, String[] srcNames, String tgtParent, IProgressMonitor monitor) throws SystemMessageException { boolean hasSucceeded = false;