From a5357c0c00d81a86982e3fb6a3f0624a5cf5a614 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Wed, 11 Mar 2009 20:16:14 +0000 Subject: [PATCH] [267247] Wrong encoding --- .../resources/SystemEditableRemoteFile.java | 8 ++++-- .../UniversalFileTransferUtility.java | 28 ++----------------- .../actions/SystemCopyRemoteFileAction.java | 2 +- .../files/ui/actions/SystemEditionAction.java | 7 +++-- .../actions/SystemUploadConflictAction.java | 20 ++++++++----- 5 files changed, 26 insertions(+), 39 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/SystemEditableRemoteFile.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/SystemEditableRemoteFile.java index 4133f66ae5d..519eeb4e362 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/SystemEditableRemoteFile.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/resources/SystemEditableRemoteFile.java @@ -35,6 +35,7 @@ * David McKnight (IBM) - [235221] Files truncated on exit of Eclipse * David McKnight (IBM) - [247189] SystemEditableRemoteFile.openEditor() not updating the default editor properly * David McKnight (IBM) - [249544] Save conflict dialog appears when saving files in the editor + * David McKnight (IBM) - [267247] Wrong encoding *******************************************************************************/ package org.eclipse.rse.files.ui.resources; @@ -80,6 +81,7 @@ import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.RemoteFileIOException; import org.eclipse.rse.subsystems.files.core.SystemIFileProperties; +import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem; import org.eclipse.rse.subsystems.files.core.subsystems.IVirtualRemoteFile; @@ -731,10 +733,12 @@ public class SystemEditableRemoteFile implements ISystemEditableRemoteObject, IP } } - subsystem.upload(localPath, remoteFile, SystemEncodingUtil.ENCODING_UTF_8, null); + IFile file = getLocalResource(); + String srcEncoding = RemoteFileUtility.getSourceEncoding(file); + + subsystem.upload(localPath, remoteFile, srcEncoding, null); // update timestamp - IFile file = getLocalResource(); SystemIFileProperties properties = new SystemIFileProperties(file); //DKM- saveAS fix 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 2f885db4862..07e825793fc 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 @@ -1582,20 +1582,7 @@ public class UniversalFileTransferUtility { { try { - String srcCharSet = null; - try - { - srcCharSet = ((IFile)srcFileOrFolder).getCharset(false); - if (srcCharSet == null || srcCharSet.length() == 0) - { - srcCharSet = srcFileOrFolder.getWorkspace().getRoot().getDefaultCharset(); - } - } - catch (CoreException e) - { - srcCharSet = SystemEncodingUtil.ENCODING_UTF_8; - } - + String srcCharSet = RemoteFileUtility.getSourceEncoding((IFile)srcFileOrFolder); String srcFileLocation = srcFileOrFolder.getLocation().toOSString(); @@ -1806,18 +1793,7 @@ public class UniversalFileTransferUtility { boolean isText = RemoteFileUtility.getSystemFileTransferModeRegistry().isText(newPath); if (isText) { - try - { - srcCharSet = ((IFile)srcFileOrFolder).getCharset(false); - if (srcCharSet == null || srcCharSet.length() == 0) - { - srcCharSet = srcFileOrFolder.getWorkspace().getRoot().getDefaultCharset(); - } - } - catch (CoreException e) - { - srcCharSet = SystemEncodingUtil.ENCODING_UTF_8; - } + srcCharSet = RemoteFileUtility.getSourceEncoding((IFile)srcFileOrFolder); } IPath location = srcFileOrFolder.getLocation(); IRemoteFile copiedFile = null; diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemCopyRemoteFileAction.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemCopyRemoteFileAction.java index a07fe286b20..8049f277672 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemCopyRemoteFileAction.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemCopyRemoteFileAction.java @@ -313,7 +313,7 @@ implements IValidatorRemoteSelection path = path.append(absolutePath); String tempFile = path.toString(); - + srcFS.download(srcFileOrFolder, tempFile, SystemEncodingUtil.ENCODING_UTF_8, null); targetFS.upload(tempFile, SystemEncodingUtil.ENCODING_UTF_8, newPath, System.getProperty("file.encoding"), null); //$NON-NLS-1$ } diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemEditionAction.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemEditionAction.java index 204a94c7731..3c1c0cc2838 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemEditionAction.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemEditionAction.java @@ -12,7 +12,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David McKnight (IBM) - [267247] Wrong encoding *******************************************************************************/ package org.eclipse.rse.internal.files.ui.actions; @@ -35,6 +35,7 @@ import org.eclipse.compare.internal.CompareUIPlugin; import org.eclipse.compare.internal.Utilities; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFileState; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; @@ -43,7 +44,6 @@ import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.rse.files.ui.resources.SystemEditableRemoteFile; -import org.eclipse.rse.services.clientserver.SystemEncodingUtil; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; import org.eclipse.rse.subsystems.files.core.subsystems.RemoteFile; import org.eclipse.rse.ui.actions.SystemBaseAction; @@ -304,7 +304,8 @@ public class SystemEditionAction extends SystemBaseAction try { InputStream is = sa.getContents(); - String text = Utilities.readString(is, SystemEncodingUtil.ENCODING_UTF_8); + String encoding = ResourcesPlugin.getEncoding(); + String text = Utilities.readString(is, encoding); document.replace(0, document.getLength(), text); } catch (CoreException e) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemUploadConflictAction.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemUploadConflictAction.java index cbc393afaad..8c7e342e8aa 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemUploadConflictAction.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/SystemUploadConflictAction.java @@ -23,6 +23,7 @@ * David McKnight (IBM) - [235221] Files truncated on exit of Eclipse * David McKnight (IBM) - [249544] Save conflict dialog appears when saving files in the editor * Kevin Doyle (IBM) - [242389] [usability] RSE Save Conflict dialog should indicate which file is in conflict + * David McKnight (IBM) - [267247] Wrong encoding *******************************************************************************/ package org.eclipse.rse.internal.files.ui.actions; @@ -48,7 +49,6 @@ import org.eclipse.rse.internal.files.ui.Activator; import org.eclipse.rse.internal.files.ui.FileResources; import org.eclipse.rse.internal.files.ui.ISystemFileConstants; import org.eclipse.rse.internal.ui.SystemResources; -import org.eclipse.rse.services.clientserver.SystemEncodingUtil; import org.eclipse.rse.services.clientserver.messages.CommonMessages; import org.eclipse.rse.services.clientserver.messages.ICommonMessageIds; import org.eclipse.rse.services.clientserver.messages.SimpleSystemMessage; @@ -57,6 +57,7 @@ import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.RemoteFileIOException; import org.eclipse.rse.services.files.RemoteFileSecurityException; import org.eclipse.rse.subsystems.files.core.SystemIFileProperties; +import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem; import org.eclipse.rse.ui.RSEUIPlugin; @@ -124,8 +125,9 @@ public class SystemUploadConflictAction extends SystemBaseAction implements Runn try { + String srcEncoding = RemoteFileUtility.getSourceEncoding(_tempFile); // copy temp file to remote system - fs.upload(_tempFile.getLocation().makeAbsolute().toOSString(), _saveasFile, SystemEncodingUtil.ENCODING_UTF_8, monitor); + fs.upload(_tempFile.getLocation().makeAbsolute().toOSString(), _saveasFile, srcEncoding, monitor); // set original time stamp to 0 so that file will be overwritten next download SystemIFileProperties properties = new SystemIFileProperties(_tempFile); @@ -157,12 +159,14 @@ public class SystemUploadConflictAction extends SystemBaseAction implements Runn try { IRemoteFileSubSystem fs = _remoteFile.getParentRemoteFileSubSystem(); - SystemIFileProperties properties = new SystemIFileProperties(_tempFile); + SystemIFileProperties properties = new SystemIFileProperties(_tempFile); - // download remote version - fs.download(_remoteFile, _tempFile.getLocation().makeAbsolute().toOSString(), SystemEncodingUtil.ENCODING_UTF_8, monitor); + // download remote version + String srcEncoding = RemoteFileUtility.getSourceEncoding(_tempFile); - properties.setRemoteFileTimeStamp(_remoteFile.getLastModified()); + fs.download(_remoteFile, _tempFile.getLocation().makeAbsolute().toOSString(), srcEncoding, monitor); + + properties.setRemoteFileTimeStamp(_remoteFile.getLastModified()); //properties.setRemoteFileTimeStamp(-1); properties.setDirty(false); @@ -204,7 +208,9 @@ public class SystemUploadConflictAction extends SystemBaseAction implements Runn // making sure we have the same version as is in the cache _remoteFile = fs.getRemoteFileObject(_remoteFile.getAbsolutePath(), monitor); - fs.upload(_tempFile.getLocation().makeAbsolute().toOSString(), _remoteFile, SystemEncodingUtil.ENCODING_UTF_8, monitor); + String srcEncoding = RemoteFileUtility.getSourceEncoding(_tempFile); + + fs.upload(_tempFile.getLocation().makeAbsolute().toOSString(), _remoteFile, srcEncoding, monitor); // wait for timestamp to update before re-fetching remote file _remoteFile.markStale(true);