diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java index 54f90479a26..002c69bcf49 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java @@ -45,6 +45,7 @@ * David McKnight (IBM) - [229610] [api] File transfers should use workspace text file encoding * David McKnight (IBM) - [221211] [api][breaking][files] need batch operations to indicate which operations were successful * Radoslav Gerganov (ProSyst) - [230919] IFileService.delete() should not return a boolean + * Martin Oberhuber (Wind River) - [235463][ftp][dstore] Incorrect case sensitivity reported on windows-remote *******************************************************************************/ package org.eclipse.rse.internal.services.dstore.files; @@ -2023,7 +2024,7 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer public boolean isCaseSensitive() { - return true; + return this.unixStyle; } public void setLastModified(String parent, String name, 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 bd18f561773..ccdd706b7e2 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 @@ -76,6 +76,7 @@ * Radoslav Gerganov (ProSyst) - [230919] IFileService.delete() should not return a boolean * Martin Oberhuber (Wind River) - [218040] FTP should support permission modification * Martin Oberhuber (Wind River) - [234045] FTP Permission Error Handling + * Martin Oberhuber (Wind River) - [235463][ftp][dstore] Incorrect case sensitivity reported on windows-remote ********************************************************************************/ package org.eclipse.rse.internal.services.files.ftp; @@ -137,6 +138,7 @@ public class FTPService extends AbstractFileService implements IFTPService, IFil private Mutex _commandMutex = new Mutex(); private String _userHome; + private boolean _caseSensitive = true; private transient String _hostName; private transient String _userId; private transient String _password; @@ -572,7 +574,7 @@ public class FTPService extends AbstractFileService implements IFTPService, IFil */ protected FTPHostFile getFileInternal(String remoteParent, String fileName, IProgressMonitor monitor) throws SystemMessageException { - remoteParent = checkEncoding(remoteParent); + remoteParent = checkEncoding(remoteParent); fileName = checkEncoding(fileName); if (monitor!=null){ if (monitor.isCanceled()) { @@ -603,50 +605,46 @@ public class FTPService extends AbstractFileService implements IFTPService, IFil FTPHostFile file = null; if(_commandMutex.waitForLock(monitor, Long.MAX_VALUE)) { - - try{ - + try { //try to retrieve the file _ftpClient = getFTPClient(); if(!_ftpClient.changeWorkingDirectory(remoteParent)) { - throw new RemoteFileIOException(new Exception(_ftpClient.getReplyString())); - } + throw new RemoteFileIOException(new Exception(_ftpClient.getReplyString())); + } if(!listFiles(monitor)) { - throw new SystemOperationCancelledException(); - } + throw new SystemOperationCancelledException(); + } - synchronized(_fCachePreviousFiles) { - cacheFiles(remoteParent); + synchronized (_fCachePreviousFiles) { + cacheFiles(remoteParent); - //Bug 198645: try exact match first - Object o = _fCachePreviousFiles.get(fileName); + //Bug 198645: try exact match first + Object o = _fCachePreviousFiles.get(fileName); if (o!=null) return (FTPHostFile)o; - //try case insensitive match (usually never executed) - if (!isCaseSensitive()) { - for (int i = 0; i < _ftpFiles.length; i++) { - String tempName = _ftpFiles[i].getName(); - if(tempName.equalsIgnoreCase(fileName)) { - file = (FTPHostFile)_fCachePreviousFiles.get(tempName); - break; + //try case insensitive match (usually never executed) + if (!isCaseSensitive()) { + for (int i = 0; i < _ftpFiles.length; i++) { + String tempName = _ftpFiles[i].getName(); + if (tempName.equalsIgnoreCase(fileName)) { + file = (FTPHostFile) _fCachePreviousFiles.get(tempName); + break; + } } } } - } - // if not found, create new object with non-existing flag if(file == null) { file = new FTPHostFile(remoteParent,fileName, false, false, 0, 0, false); } - - }catch (Exception e){ + } catch (Exception e) { throw new RemoteFileIOException(e); } finally { _commandMutex.release(); @@ -1362,10 +1360,13 @@ public class FTPService extends AbstractFileService implements IFTPService, IFil } } + public void setIsCaseSensitive(boolean b) { + _caseSensitive = b; + } + public boolean isCaseSensitive() { - //TODO find out whether remote is case sensitive or not - return true; + return _caseSensitive; } /** diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreWindowsFileSubSystemConfiguration.java b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreWindowsFileSubSystemConfiguration.java index d36ad4fdbd4..8bf4d98d560 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreWindowsFileSubSystemConfiguration.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/subsystems/files/dstore/DStoreWindowsFileSubSystemConfiguration.java @@ -7,13 +7,14 @@ * * Initial Contributors: * The following IBM employees contributed to the Remote System Explorer - * component that contains this file: David McKnight, Kushal Munir, - * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. - * + * * Contributors: * Martin Oberhuber (Wind River) - [168870] refactor org.eclipse.rse.core package of the UI plugin * David Dykstal (IBM) - [222270] clean up interfaces in org.eclipse.rse.core.filters + * Martin Oberhuber (Wind River) - [235463][ftp][dstore] Incorrect case sensitivity reported on windows-remote *******************************************************************************/ package org.eclipse.rse.subsystems.files.dstore; @@ -28,13 +29,19 @@ import org.eclipse.rse.ui.SystemBasePlugin; public class DStoreWindowsFileSubSystemConfiguration extends DStoreFileSubSystemConfiguration { + public DStoreWindowsFileSubSystemConfiguration() { + super(); + _isWindows = true; + setIsUnixStyle(!_isWindows); + } + protected ISystemFilterPool createDefaultFilterPool(ISystemFilterPoolManager mgr) { ISystemFilterPool pool = null; try { // ----------------------------------------------------- // create a pool named filters - // ----------------------------------------------------- + // ----------------------------------------------------- pool = mgr.createSystemFilterPool(getDefaultFilterPoolName(mgr.getName(), getId()), true); // true=>is deletable by user if (pool == null) // hmmm, why would this happen? { @@ -53,7 +60,7 @@ public class DStoreWindowsFileSubSystemConfiguration extends DStoreFileSubSystem ISystemFilter filter = mgr.createSystemFilter(pool, SystemFileResources.RESID_FILTER_MYHOME,filterStrings); filter.setNonChangable(true); filter.setSingleFilterStringOnly(true); - + RemoteFileFilterString defaultFilterString = new RemoteFileFilterString(this); filterStrings = new String[] {defaultFilterString.toString()}; String filterName = SystemFileResources.RESID_FILTER_DRIVES; @@ -86,6 +93,6 @@ public class DStoreWindowsFileSubSystemConfiguration extends DStoreFileSubSystem return '\\'; } - + } diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java index 684b9b3fef5..1d7ba7ef91e 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java @@ -7,10 +7,10 @@ * * Initial Contributors: * The following IBM employees contributed to the Remote System Explorer - * component that contains this file: David McKnight, Kushal Munir, - * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * component that contains this file: David McKnight, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. - * + * * Contributors: * Javier Montalvo Orus (Symbian) - Bug 140348 - FTP did not use port number * Javier Montalvo Orus (Symbian) - Bug 161209 - Need a Log of ftp commands @@ -23,6 +23,7 @@ * David McKnight (IBM) - [196632] [ftp] Passive mode setting does not work * Martin Oberhuber (Wind River) - [204669] Fix ftp path concatenation on systems using backslash separator * Martin Oberhuber (Wind River) - [203500] Support encodings for FTP paths + * Martin Oberhuber (Wind River) - [235463][ftp][dstore] Incorrect case sensitivity reported on windows-remote *******************************************************************************/ package org.eclipse.rse.internal.subsystems.files.ftp.connectorservice; @@ -50,41 +51,45 @@ import org.eclipse.ui.console.MessageConsole; -public class FTPConnectorService extends StandardConnectorService +public class FTPConnectorService extends StandardConnectorService { protected FTPService _ftpService; /** Indicates the default string encoding on this platform */ private static String _defaultEncoding = new java.io.InputStreamReader(new java.io.ByteArrayInputStream(new byte[0])).getEncoding(); - + public FTPConnectorService(IHost host, int port) - { + { super(FTPSubsystemResources.RESID_FTP_CONNECTORSERVICE_NAME,FTPSubsystemResources.RESID_FTP_CONNECTORSERVICE_DESCRIPTION, host, port); _ftpService = new FTPService(); + if (getHost().getSystemType().isWindows()) { + // Configured against a Windows-specific system type + _ftpService.setIsCaseSensitive(false); + } getPropertySet(); } - + private IPropertySet getPropertySet() { IPropertySet propertySet = getPropertySet("FTP Settings"); //$NON-NLS-1$ - + if(propertySet==null) { - + //Active - passive mode propertySet = createPropertySet("FTP Settings"); //$NON-NLS-1$ propertySet.addProperty("passive","false",PropertyType.getEnumPropertyType(new String[]{"true","false"})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - + // FTP List parser String[] keys = FTPClientConfigFactory.getParserFactory().getKeySet(); String[] keysArray = new String[keys.length+1]; - + System.arraycopy(keys, 0, keysArray, 0, keys.length); - + keysArray[keysArray.length-1]="AUTO"; //$NON-NLS-1$ - + Arrays.sort(keysArray); - + propertySet.addProperty("parser","AUTO",PropertyType.getEnumPropertyType(keysArray)); //$NON-NLS-1$ //$NON-NLS-2$ } if (propertySet instanceof ILabeledObject) { @@ -93,7 +98,7 @@ public class FTPConnectorService extends StandardConnectorService } return propertySet; } - + protected void internalConnect(IProgressMonitor monitor) throws RemoteFileException, IOException { internalConnect(); @@ -119,7 +124,7 @@ public class FTPConnectorService extends StandardConnectorService if (encoding==null) encoding = _defaultEncoding; // _ftpService.setControlEncoding(encoding); - + _ftpService.connect(); } @@ -140,36 +145,36 @@ public class FTPConnectorService extends StandardConnectorService private OutputStream getLoggingStream(String hostName,int portNumber) { MessageConsole messageConsole=null; - + IConsole[] consoles = ConsolePlugin.getDefault().getConsoleManager().getConsoles(); for (int i = 0; i < consoles.length; i++) { if(consoles[i].getName().equals("FTP log: "+hostName+":"+portNumber)) { //$NON-NLS-1$ //$NON-NLS-2$ messageConsole = (MessageConsole)consoles[i]; break; - } + } } - + if(messageConsole==null){ messageConsole = new MessageConsole("FTP log: "+hostName+":"+portNumber, null); //$NON-NLS-1$ //$NON-NLS-2$ ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{ messageConsole }); } - + ConsolePlugin.getDefault().getConsoleManager().showConsoleView(messageConsole); - + return messageConsole.newOutputStream(); } - + public IFileService getFileService() { return _ftpService; } - + protected void internalDisconnect(IProgressMonitor monitor) { _ftpService.disconnect(); } - - public boolean isConnected() + + public boolean isConnected() { return (_ftpService != null && _ftpService.isConnected()); }