From 86c93fa0761bdc076da5f7a77e22411c89a2e386 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Thu, 25 Nov 2010 16:34:10 +0000 Subject: [PATCH] [228743] [usability][dnd] Paste into read-only folder fails silently --- .../UniversalFileTransferUtility.java | 5 ++-- .../ui/view/SystemViewRemoteFileAdapter.java | 23 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java index 4cd702b2cc8..9f8dd410591 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/UniversalFileTransferUtility.java @@ -61,6 +61,7 @@ * David McKnight (IBM) - [299140] Local Readonly file can't be copied/pasted twice * David McKnight (IBM) - [298440] jar files in a directory can't be pasted to another system properly * David McKnight (IBM) - [311218] Content conflict dialog pops up when it should not + * David McKnight (IBM) - [228743] [usability][dnd] Paste into read-only folder fails silently *******************************************************************************/ package org.eclipse.rse.files.ui.resources; @@ -1537,7 +1538,7 @@ public class UniversalFileTransferUtility { IRemoteFileSubSystem targetFS = targetFolder.getParentRemoteFileSubSystem(); - + boolean isWindows = !targetFS.getParentRemoteFileSubSystemConfiguration().isUnixStyle(); boolean doSuperTransferPreference = doSuperTransfer(targetFS); SystemRemoteResourceSet resultSet = new SystemRemoteResourceSet(targetFS); @@ -1552,7 +1553,7 @@ public class UniversalFileTransferUtility { } } - if (!targetFolder.canWrite()) + if (!targetFolder.canWrite() && !isWindows) // windows check for bug 228743 { String msgTxt = FileResources.FILEMSG_SECURITY_ERROR; String msgDetails = NLS.bind(FileResources.FILEMSG_SECURITY_ERROR_DETAILS, targetFS.getHostAliasName()); diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java index 4461805d5e7..8fdfdee6f66 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java @@ -69,6 +69,7 @@ * David McKnight (IBM) - [317541] Show blank as the last modified for a file with no last modified * David McKnight (IBM) - [323299] [files] remote file view adapter needs to use the latest version of IRemoteFile * David McKnight (IBM) - [324192] Cannot open a renamed file + * David McKnight (IBM) - [228743] [usability][dnd] Paste into read-only folder fails silently *******************************************************************************/ package org.eclipse.rse.internal.files.ui.view; @@ -1554,9 +1555,13 @@ public class SystemViewRemoteFileAdapter if (element instanceof IRemoteFile) { IRemoteFile file = (IRemoteFile) element; - boolean offline = file.getParentRemoteFileSubSystem().isOffline(); - boolean supportsArchiveManagement = file.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration().supportsArchiveManagement(); - return !offline && file.canRead() && file.canWrite() && (file.isDirectory() || file.isRoot() || (file.isArchive() && supportsArchiveManagement)); + IRemoteFileSubSystem ss = file.getParentRemoteFileSubSystem(); + IRemoteFileSubSystemConfiguration config = ss.getParentRemoteFileSubSystemConfiguration(); + boolean offline = ss.isOffline(); + boolean isWindows = !config.isUnixStyle(); // windows check for bug 228743 + boolean supportsArchiveManagement = config.supportsArchiveManagement(); + + return !offline && file.canRead() && (file.canWrite() || isWindows) && (file.isDirectory() || file.isRoot() || (file.isArchive() && supportsArchiveManagement)); } return false; @@ -1574,10 +1579,12 @@ public class SystemViewRemoteFileAdapter if (target instanceof IRemoteFile) { IRemoteFile targetFile = (IRemoteFile) target; - boolean supportsArchiveManagement = targetFile.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration().supportsArchiveManagement(); + IRemoteFileSubSystemConfiguration config = targetFile.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration(); + boolean supportsArchiveManagement = config.supportsArchiveManagement(); if (!targetFile.isFile() || (targetFile.isArchive() && supportsArchiveManagement)) { - targetFile.canWrite(); + boolean isWindows = !config.isUnixStyle(); + return targetFile.canWrite() || isWindows; // windows check for bug 228743 } // all objects are of same type, so we only need to use first to validate Object first = srcSet.get(0); @@ -1615,7 +1622,8 @@ public class SystemViewRemoteFileAdapter if (target instanceof IRemoteFile) { IRemoteFile targetFile = (IRemoteFile) target; - boolean supportsArchiveManagement = targetFile.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration().supportsArchiveManagement(); + IRemoteFileSubSystemConfiguration config = targetFile.getParentRemoteFileSubSystem().getParentRemoteFileSubSystemConfiguration(); + boolean supportsArchiveManagement = config.supportsArchiveManagement(); if (!targetFile.isFile() || (targetFile.isArchive() && supportsArchiveManagement)) { // get properties @@ -2028,6 +2036,7 @@ public class SystemViewRemoteFileAdapter { IRemoteFile targetFolder = (IRemoteFile) target; IRemoteFileSubSystem targetFS = targetFolder.getParentRemoteFileSubSystem(); + boolean isWindows = !targetFS.getParentRemoteFileSubSystemConfiguration().isUnixStyle(); // make sure properties are uptodate try @@ -2039,7 +2048,7 @@ public class SystemViewRemoteFileAdapter { } - if (!targetFolder.canWrite()) + if (!targetFolder.canWrite() && !isWindows) // windows check for bug 228743 { String msgTxt = FileResources.FILEMSG_SECURITY_ERROR; String msgDetails = NLS.bind(FileResources.FILEMSG_SECURITY_ERROR_DETAILS, targetFS.getHostAliasName());