From d847b065017fa4c82010161682429b9a78f33df5 Mon Sep 17 00:00:00 2001 From: Javier Montalvo Orus Date: Thu, 1 Feb 2007 10:58:44 +0000 Subject: [PATCH] implemented new API IFileService.setReadOnly() --- .../rse/services/files/ftp/Activator.java | 1 + .../rse/services/files/ftp/FTPHostFile.java | 35 ++++++++++++++ .../rse/services/files/ftp/FTPService.java | 46 ++++++++++++++++--- 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/Activator.java b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/Activator.java index 3c1edefb0d7..d0c714017d2 100644 --- a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/Activator.java +++ b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/Activator.java @@ -51,6 +51,7 @@ public class Activator extends Plugin { /** * Returns the shared instance. + * @return activator */ public static Activator getDefault() { return plugin; diff --git a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPHostFile.java b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPHostFile.java index 8e00d758a31..e1f8a6da3c3 100644 --- a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPHostFile.java +++ b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPHostFile.java @@ -41,6 +41,7 @@ public class FTPHostFile implements IHostFile private boolean _canWrite = true; private boolean _isRoot; private boolean _exists; + private FTPFile _ftpFile; public FTPHostFile(String parentPath, String name, boolean isDirectory, boolean isRoot, long lastModified, long size, boolean exists) { @@ -59,6 +60,7 @@ public class FTPHostFile implements IHostFile public FTPHostFile(String parentPath, FTPFile ftpFile, String systemName) { _parentPath = parentPath; + _ftpFile = ftpFile; if(systemName.equals(FTPClientConfig.SYST_VMS)) { @@ -184,6 +186,39 @@ public class FTPHostFile implements IHostFile _isArchive = internalIsArchive(); } + public int getUserPermissions() + { + //user + int userRead = _ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION) || _canRead ? 1 : 0; + int userWrite = _ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION) || _canWrite ? 1 : 0; + int userExec = _ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION) ? 1 : 0; + + return userRead << 2 | userWrite << 1 | userExec; + } + + public int getGroupPermissions() + { + //group + int groupRead = _ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION) ? 1 : 0; + int groupWrite = _ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION) ? 1 : 0; + int groupExec = _ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION) ? 1 : 0; + + return groupRead << 2 | groupWrite << 1 | groupExec; + } + + public int getOtherPermissions() + { + //other + int otherRead = _ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION) ? 1 : 0; + int otherWrite = _ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION) ? 1 : 0; + int otherExec = _ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION) ? 1 : 0; + + return otherRead << 2 | otherWrite << 1 | otherExec; + } + + + + protected boolean internalIsArchive() { return ArchiveHandlerManager.getInstance().isArchive(new File(getAbsolutePath())) diff --git a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPService.java b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPService.java index 2dce5541598..2ba4217cd8f 100644 --- a/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPService.java +++ b/rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/services/files/ftp/FTPService.java @@ -418,7 +418,7 @@ public class FTPService extends AbstractFileService implements IFileService, IFT { char separator = '/'; - if(_systemName.equals(FTPClientConfig.SYST_NT) || _userHome.indexOf('\\')!=-1) + if((_systemName.equals(FTPClientConfig.SYST_NT) || _userHome.indexOf('\\')!=-1) && _userHome.indexOf('/')==-1) { separator = '\\'; } @@ -980,19 +980,53 @@ public class FTPService extends AbstractFileService implements IFileService, IFT } - + /* + * (non-Javadoc) + * @see org.eclipse.rse.services.files.IFileService#setLastModified(org.eclipse.core.runtime.IProgressMonitor, java.lang.String, java.lang.String, long) + */ public boolean setLastModified(IProgressMonitor monitor, String parent, String name, long timestamp) throws SystemMessageException { - // TODO - implement this to set the timestamp + // not applicable for FTP return false; } + /* + * (non-Javadoc) + * @see org.eclipse.rse.services.files.IFileService#setReadOnly(org.eclipse.core.runtime.IProgressMonitor, java.lang.String, java.lang.String, boolean) + */ public boolean setReadOnly(IProgressMonitor monitor, String parent, String name, boolean readOnly) throws SystemMessageException { - // TODO Auto-generated method stub - return false; + + boolean result = false; + int permissions = 0; + + FTPHostFile file = (FTPHostFile)getFile(monitor,parent, name); + + int userPermissions = file.getUserPermissions(); + int groupPermissions = file.getGroupPermissions(); + int otherPermissions = file.getOtherPermissions(); + + + if(readOnly) + { + userPermissions &= 5; // & 101b + } + else + { + userPermissions |= 2; // | 010b + } + + permissions = userPermissions * 100 + groupPermissions * 10 + otherPermissions; + + try { + result =_ftpClient.sendSiteCommand("CHMOD "+permissions+" "+file.getAbsolutePath()); //$NON-NLS-1$ //$NON-NLS-2$ + } catch (IOException e) { + result = false; + } + + return result; } -} +} \ No newline at end of file