### Eclipse Workspace Patch 1.0 #P org.eclipse.rse.subsystems.files.dstore Index: src/org/eclipse/rse/internal/subsystems/files/dstore/DStoreFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.dstore/src/org/eclipse/rse/internal/subsystems/files/dstore/DStoreFile.java,v retrieving revision 1.8 diff -u -r1.8 DStoreFile.java --- src/org/eclipse/rse/internal/subsystems/files/dstore/DStoreFile.java 5 Nov 2007 20:55:51 -0000 1.8 +++ src/org/eclipse/rse/internal/subsystems/files/dstore/DStoreFile.java 21 Jan 2008 18:26:56 -0000 @@ -202,9 +202,4 @@ return _dstoreHostFile.getClassification(); } - - - - - } #P org.eclipse.rse.services Index: src/org/eclipse/rse/services/files/HostFilePermissions.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/HostFilePermissions.java,v retrieving revision 1.1 diff -u -r1.1 HostFilePermissions.java --- src/org/eclipse/rse/services/files/HostFilePermissions.java 16 Jan 2008 18:29:09 -0000 1.1 +++ src/org/eclipse/rse/services/files/HostFilePermissions.java 21 Jan 2008 18:26:57 -0000 @@ -21,13 +21,69 @@ IHostFilePermissions { private int _permissions = 0; - + private String _user; + private String _group; + + /** - * Constructor that take the initial permissions as a bitmask - * @param initialPermissions the intial permissions bitmask + * Constructor without any intial values. Users of this + * need to set fields as appropriate */ - public HostFilePermissions(int initialPermissions){ + public HostFilePermissions(){ + } + + /** + * Constructor that takes the initial permissions in rwxrwxrwx form + * @param alphaPermissions the initial permissions in alpha form + */ + public HostFilePermissions(String alphaPermissions, String user, String group){ + String accessString = alphaPermissionsToOctal(alphaPermissions); + _permissions = Integer.parseInt(accessString, 8); + _user = user; + _group = group; + } + + /** + * Constructor that takes the initial permissions as a bitmask + * @param initialPermissions the initial permissions bitmask + */ + public HostFilePermissions(int initialPermissions, String user, String group){ _permissions = initialPermissions; + _user = user; + _group = group; + } + + /** + * Convert permissions in rwxrwxrwx form to octal + * @param userPermissions + * @return + */ + private String alphaPermissionsToOctal(String alphaPermissions) + { + if (alphaPermissions.length() == 10){ // directory bit? + alphaPermissions = alphaPermissions.substring(1); + } + StringBuffer buf = new StringBuffer(); + // permissions + char[] chars = alphaPermissions.toCharArray(); + + int offset = -1; + for (int i = 0; i < 3; i++){ + int value = 0; + + if (chars[++offset] == 'r'){ + value = 4; + } + if (chars[++offset] == 'w'){ + value += 2; + } + if (chars[++offset] == 'x'){ + value += 1; + } + buf.append(value); + } + + return buf.toString(); } public void setPermission(int permission, boolean value) { @@ -53,7 +109,6 @@ return "" + _permissions; } - private boolean isSet(long mask) { return (_permissions & mask) != 0; } @@ -69,7 +124,7 @@ /** * return permissions in rwxrwxrwx form */ - public String toUserString(){ + public String toAlphaString(){ StringBuffer buf = new StringBuffer(); buf.append(getPermission(IHostFilePermissions.PERM_USER_READ) ? 'r' : '-'); @@ -83,4 +138,20 @@ buf.append(getPermission(IHostFilePermissions.PERM_OTHER_EXECUTE) ? 'x' : '-'); return buf.toString(); } + + public String getGroupOwner() { + return _group; + } + + public String getUserOwner() { + return _user; + } + + public void setGroupOwner(String group) { + _group = group; + } + + public void setUserOwner(String user) { + _user = user; + } } Index: src/org/eclipse/rse/services/files/IFileOwnerService.java =================================================================== RCS file: src/org/eclipse/rse/services/files/IFileOwnerService.java diff -N src/org/eclipse/rse/services/files/IFileOwnerService.java --- src/org/eclipse/rse/services/files/IFileOwnerService.java 16 Jan 2008 18:29:09 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,83 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2008 IBM Corporation. All rights reserved. - * This program and the accompanying materials are made available under the terms - * of the Eclipse Public License v1.0 which accompanies this distribution, and is - * available at http://www.eclipse.org/legal/epl-v10.html - * - * Initial Contributors: - * The following IBM employees contributed to the Remote System Explorer - * component that contains this file: David McKnight. - * - * Contributors: - * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files - ********************************************************************************/ -package org.eclipse.rse.services.files; - -import org.eclipse.core.runtime.IProgressMonitor; - -import org.eclipse.rse.services.clientserver.messages.SystemMessageException; - -/** - * Service used to get and set the owner of a file. - */ -public interface IFileOwnerService { - /** - * @param remoteParent - * @param name - * @param monitor the monitor for this potentially long running operation - * @return the host file owner - * @throws SystemMessageException if an error occurs. - * Typically this would be one of those in the RemoteFileException family. - */ - public String getFileUserOwner(String remoteParent, String name, IProgressMonitor monitor) throws SystemMessageException; - - /** - * @param remoteParent - * @param name - * @param monitor the monitor for this potentially long running operation - * @throws SystemMessageException if an error occurs. - * Typically this would be one of those in the RemoteFileException family. - */ - public void setFileUserOwner(String remoteParent, String name, String newOwner, IProgressMonitor monitor) throws SystemMessageException; - - /** - * @param remoteParent - * @param name - * @param monitor the monitor for this potentially long running operation - * @return the host file owner - * @throws SystemMessageException if an error occurs. - * Typically this would be one of those in the RemoteFileException family. - */ - public String getFileGroupOwner(String remoteParent, String name, IProgressMonitor monitor) throws SystemMessageException; - - /** - * @param remoteParent - * @param name - * @param monitor the monitor for this potentially long running operation - * @throws SystemMessageException if an error occurs. - * Typically this would be one of those in the RemoteFileException family. - */ - public void setFileGroupOwner(String remoteParent, String name, String newGroupOwner, IProgressMonitor monitor) throws SystemMessageException; - - - - /** - * Indicates whether the file owner can be retrieved for the specified file - * In some cases the service will need to determine whether it supports ownership - * depending on the current server. - * - * @param remoteParent the - * @param name - * @return whether the file owner can be retrieved - */ - public boolean canGetFileOwner(String remoteParent, String name); - - /** - * Indicates whether the file owner can be set for the specified file - * - * @param remoteParent the - * @param name - * @return whether the file owner can be set - */ - public boolean canSetFileOwner(String remoteParent, String name); -} Index: src/org/eclipse/rse/services/files/PendingHostFilePermissions.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/PendingHostFilePermissions.java,v retrieving revision 1.1 diff -u -r1.1 PendingHostFilePermissions.java --- src/org/eclipse/rse/services/files/PendingHostFilePermissions.java 17 Jan 2008 22:18:42 -0000 1.1 +++ src/org/eclipse/rse/services/files/PendingHostFilePermissions.java 21 Jan 2008 18:26:57 -0000 @@ -17,7 +17,7 @@ public PendingHostFilePermissions() { - super(0); + super(0, "Pending", "Pending"); //$NON-NLS-2$ } } Index: src/org/eclipse/rse/services/files/IHostFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFile.java,v retrieving revision 1.6 diff -u -r1.6 IHostFile.java --- src/org/eclipse/rse/services/files/IHostFile.java 5 Jun 2007 10:37:07 -0000 1.6 +++ src/org/eclipse/rse/services/files/IHostFile.java 21 Jan 2008 18:26:57 -0000 @@ -168,4 +168,5 @@ * this file will be renamed to. */ public void renameTo(String newAbsolutePath); + } Index: src/org/eclipse/rse/services/files/IFilePermissionsService.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IFilePermissionsService.java,v retrieving revision 1.1 diff -u -r1.1 IFilePermissionsService.java --- src/org/eclipse/rse/services/files/IFilePermissionsService.java 16 Jan 2008 18:29:09 -0000 1.1 +++ src/org/eclipse/rse/services/files/IFilePermissionsService.java 21 Jan 2008 18:26:57 -0000 @@ -23,42 +23,43 @@ public interface IFilePermissionsService { /** - * @param remoteParent - * @param name + * Gets the permissions for a file including the user and group owner + * + * @param file the remote file * @param monitor the monitor for this potentially long running operation * @return the host file permissions * @throws SystemMessageException if an error occurs. * Typically this would be one of those in the RemoteFileException family. */ - public IHostFilePermissions getFilePermissions(String remoteParent, String name, IProgressMonitor monitor) throws SystemMessageException; + public IHostFilePermissions getFilePermissions(IHostFile file, IProgressMonitor monitor) throws SystemMessageException; /** - * @param remoteParent - * @param name + * Sets the permissions for a file including the user and group owner as specified in the permissions + * + * @param file the remote file * @param permissions the new permissions for this file * @param monitor the monitor for this potentially long running operation * @throws SystemMessageException if an error occurs. * Typically this would be one of those in the RemoteFileException family. */ - public void setFilePermissions(String remoteParent, String name, IHostFilePermissions permissions, IProgressMonitor monitor) throws SystemMessageException; + public void setFilePermissions(IHostFile file, IHostFilePermissions permissions, IProgressMonitor monitor) throws SystemMessageException; /** * Indicates whether the file permissions can be retrieved for the specified file. * In some cases the service will need to determine whether it supports permissions * depending on the current server. * - * @param remoteParent - * @param name + * @param file the remote file * @return whether the file permissions can be retrieved */ - public boolean canGetFilePermissions(String remoteParent, String name); + public boolean canGetFilePermissions(IHostFile file); /** * Indicates whether the file permissions can be set for the specified file * - * @param remoteParent - * @param name + * @param file the remote file * @return whether the file permissions can be set */ - public boolean canSetFilePermissions(String remoteParent, String name); + public boolean canSetFilePermissions(IHostFile file); + } Index: src/org/eclipse/rse/services/files/IHostFilePermissions.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFilePermissions.java,v retrieving revision 1.1 diff -u -r1.1 IHostFilePermissions.java --- src/org/eclipse/rse/services/files/IHostFilePermissions.java 16 Jan 2008 18:29:09 -0000 1.1 +++ src/org/eclipse/rse/services/files/IHostFilePermissions.java 21 Jan 2008 18:26:57 -0000 @@ -114,9 +114,34 @@ */ public void setPermissionBits(int bits); - + /** * return permissions in rwxrwxrwx form */ - public String toUserString(); + public String toAlphaString(); + + /** + * returns the user owner of the file + * @return the user owner + */ + public String getUserOwner(); + + /** + * returns the group owner of the file + * @return the group owner + */ + public String getGroupOwner(); + + /** + * Sets the user owner attribute + * @param user the user owner attribute + */ + public void setUserOwner(String user); + + /** + * Sets the group owner attribute + * @param group the group owner attribute + */ + public void setGroupOwner(String group); + } Index: src/org/eclipse/rse/services/files/IHostFilePermissionsContainer.java =================================================================== RCS file: src/org/eclipse/rse/services/files/IHostFilePermissionsContainer.java diff -N src/org/eclipse/rse/services/files/IHostFilePermissionsContainer.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/rse/services/files/IHostFilePermissionsContainer.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,36 @@ +/******************************************************************************** + * Copyright (c) 2008 IBM Corporation. All rights reserved. + * This program and the accompanying materials are made available under the terms + * of the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Initial Contributors: + * The following IBM employees contributed to the Remote System Explorer + * component that contains this file: David McKnight. + * + * Contributors: + * {Name} (company) - description of contribution. + ********************************************************************************/ +package org.eclipse.rse.services.files; + +/** + * A container of permissions. Implementations of IHostFile that support + * IHostFilePermissions should implement this too + * + */ +public interface IHostFilePermissionsContainer { + + /** + * Returns the host file permissions (including user and group) for this file + * @return the host file permissions + */ + public IHostFilePermissions getPermissions(); + + /** + * Sets the permissions attributes for this file. Right now, using this + * to set a dummy "Pending" set of permissions from UI when doing asynchronous queries + * from property sheet or table view + */ + public void setPermissions(IHostFilePermissions permissions); + +} #P org.eclipse.rse.services.dstore Index: miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java,v retrieving revision 1.30 diff -u -r1.30 UniversalFileSystemMiner.java --- miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java 16 Jan 2008 18:33:46 -0000 1.30 +++ miners/org/eclipse/rse/dstore/universal/miners/UniversalFileSystemMiner.java 21 Jan 2008 18:26:59 -0000 @@ -216,16 +216,6 @@ } else if (IUniversalDataStoreConstants.C_SET_FILE_PERMISSIONS.equals(name)) { DataElement newPermissions = getCommandArgument(theElement, 1); return handleSetFilePermissions(subject, newPermissions, status); - } else if (IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER.equals(name)) { - return handleQueryFileOwner(subject, status); - } else if (IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER.equals(name)) { - DataElement newOwner = getCommandArgument(theElement, 1); - return handleSetFileOwner(subject, newOwner, status); - } else if (IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER.equals(name)) { - return handleQueryFileGroupOwner(subject, status); - } else if (IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER.equals(name)) { - DataElement newOwner = getCommandArgument(theElement, 1); - return handleSetFileGroupOwner(subject, newOwner, status); } else { UniversalServerUtilities.logError(CLASSNAME, "Invalid query to handlecommand", null); //$NON-NLS-1$ @@ -1608,37 +1598,6 @@ createCommandDescriptor(FileDescriptors._deUniversalArchiveFileObject, "SetPermissions",IUniversalDataStoreConstants.C_SET_FILE_PERMISSIONS); //$NON-NLS-1$ createCommandDescriptor(FileDescriptors._deUniversalVirtualFileObject, "SetPermissions", IUniversalDataStoreConstants.C_SET_FILE_PERMISSIONS); //$NON-NLS-1$ createCommandDescriptor(FileDescriptors._deUniversalVirtualFolderObject, "SetPermissions", IUniversalDataStoreConstants.C_SET_FILE_PERMISSIONS); //$NON-NLS-1$ - - - // descriptors for ownership - createCommandDescriptor(UniversalFilter, "GetOwner", IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFolderObject, "GetOwner", IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFileObject, "GetOwner", IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalArchiveFileObject, "GetOwner",IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFileObject, "GetOwner", IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFolderObject, "GetOwner", IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); //$NON-NLS-1$ - - createCommandDescriptor(UniversalFilter, "SetOwner", IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFolderObject, "SetOwner", IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFileObject, "SetOwner", IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalArchiveFileObject, "SetOwner",IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFileObject, "SetOwner", IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFolderObject, "SetOwner", IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER); //$NON-NLS-1$ - - createCommandDescriptor(UniversalFilter, "GetGroupOwner", IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFolderObject, "GetGroupOwner", IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFileObject, "GetGroupOwner", IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalArchiveFileObject, "GetGroupOwner",IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFileObject, "GetGroupOwner", IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFolderObject, "GetGroupOwner", IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER); //$NON-NLS-1$ - - createCommandDescriptor(UniversalFilter, "SetGroupOwner", IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFolderObject, "SetGroupOwner", IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalFileObject, "SetGroupOwner", IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalArchiveFileObject, "SetGroupOwner",IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFileObject, "SetGroupOwner", IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - createCommandDescriptor(FileDescriptors._deUniversalVirtualFolderObject, "SetGroupOwner", IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER); //$NON-NLS-1$ - } } @@ -1886,16 +1845,23 @@ } + /** + * Gets file permissions in the form || + * @param subject + * @param status + * @return + */ private DataElement handleQueryFilePermissions(DataElement subject, DataElement status) { File file = getFileFor(subject); - String result = null; + // permissions + String octalPermissions = null; String os = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ if (os.startsWith("linux")){ //$NON-NLS-1$ // permissions in octal form - result = simpleShellCommand("stat -c%a", file); //$NON-NLS-1$ + octalPermissions = simpleShellCommand("stat -c%a", file); //$NON-NLS-1$ } else { // permissions in form "drwxrwxrwx ..." @@ -1905,95 +1871,53 @@ // permissions in form "rwxrwxrwx" String permString = ldStr.substring(1, firstSpace); - result = alphaPermissionsToOctal(permString); + octalPermissions = alphaPermissionsToOctal(permString); } + // user and group + String ldStr = simpleShellCommand("ls -ld", file); //$NON-NLS-1$ + StringTokenizer tokenizer = new StringTokenizer(ldStr, " \t"); //$NON-NLS-1$ + tokenizer.nextToken(); + tokenizer.nextToken(); + String user = tokenizer.nextToken(); // 3rd + String group = tokenizer.nextToken(); // 4th + + String result = octalPermissions + '|' + user + '|' + group; status.setAttribute(DE.A_SOURCE, result); statusDone(status); return status; } + /** + * Set file permissions including user and group + * @param subject + * @param newPermissions permissions in the form || + * @param status + * @return + */ private DataElement handleSetFilePermissions(DataElement subject, DataElement newPermissions, DataElement status) { File file = getFileFor(subject); - String result = simpleShellCommand("chmod " + newPermissions.getName(), file); //$NON-NLS-1$ - status.setAttribute(DE.A_SOURCE, result); - statusDone(status); - - return status; - } - - private DataElement handleQueryFileOwner(DataElement subject, DataElement status) - { - File file = getFileFor(subject); - String result = null; - String os = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ + String permissionsStr = newPermissions.getName(); + String[] permAttributes = permissionsStr.split("\\"+IServiceConstants.TOKEN_SEPARATOR); - if (os.startsWith("linux")){ //$NON-NLS-1$ - result = simpleShellCommand("stat -c%U", file); //$NON-NLS-1$ - } - else { - // in form " ..." - String ldStr = simpleShellCommand("ls -ld", file); //$NON-NLS-1$ - StringTokenizer tokenizer = new StringTokenizer(ldStr, " \t"); //$NON-NLS-1$ - tokenizer.nextToken(); - tokenizer.nextToken(); - result = tokenizer.nextToken(); // 3rd - } + // set the permissions + String result = simpleShellCommand("chmod " + permAttributes[0], file); //$NON-NLS-1$ - status.setAttribute(DE.A_SOURCE, result); - statusDone(status); - - return status; - } - - private DataElement handleSetFileOwner(DataElement subject, DataElement newOwner, DataElement status) - { - File file = getFileFor(subject); - String result = simpleShellCommand("chown " + newOwner.getName(), file); //$NON-NLS-1$ + // set the user + simpleShellCommand("chown " + permAttributes[1], file); //$NON-NLS-1$ - status.setAttribute(DE.A_SOURCE, result); - statusDone(status); - return status; - } - - private DataElement handleQueryFileGroupOwner(DataElement subject, DataElement status) - { - File file = getFileFor(subject); - String result = null; - String os = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ - - if (os.startsWith("linux")){ //$NON-NLS-1$ - result = simpleShellCommand("stat -c%G", file); //$NON-NLS-1$ - } - else { - // in form " ..." - String ldStr = simpleShellCommand("ls -ld", file); //$NON-NLS-1$ - - StringTokenizer tokenizer = new StringTokenizer(ldStr, " \t"); //$NON-NLS-1$ - tokenizer.nextToken(); - tokenizer.nextToken(); - tokenizer.nextToken(); - result = tokenizer.nextToken(); // 4rd - } + // set the group + simpleShellCommand("chown :" + permAttributes[2], file); //$NON-NLS-1$ status.setAttribute(DE.A_SOURCE, result); statusDone(status); return status; } - - private DataElement handleSetFileGroupOwner(DataElement subject, DataElement newGroup, DataElement status) - { - File file = getFileFor(subject); - String result = simpleShellCommand("chown :" + newGroup.getName(), file); //$NON-NLS-1$ - - status.setAttribute(DE.A_SOURCE, result); - statusDone(status); - return status; - } + private String simpleShellCommand(String cmd) { Index: miners/org/eclipse/rse/dstore/universal/miners/IUniversalDataStoreConstants.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/IUniversalDataStoreConstants.java,v retrieving revision 1.7 diff -u -r1.7 IUniversalDataStoreConstants.java --- miners/org/eclipse/rse/dstore/universal/miners/IUniversalDataStoreConstants.java 16 Jan 2008 18:29:55 -0000 1.7 +++ miners/org/eclipse/rse/dstore/universal/miners/IUniversalDataStoreConstants.java 21 Jan 2008 18:26:58 -0000 @@ -100,12 +100,7 @@ public static final String C_QUERY_FILE_PERMISSIONS = "C_QUERY_FILE_PERMISSIONS"; public static final String C_SET_FILE_PERMISSIONS = "C_SET_FILE_PERMISSIONS"; - // ownership commands - public static final String C_QUERY_FILE_USER_OWNER = "C_QUERY_FILE_USER_OWNER"; - public static final String C_SET_FILE_USER_OWNER = "C_SET_FILE_USER_OWNER"; - public static final String C_QUERY_FILE_GROUP_OWNER = "C_QUERY_FILE_GROUP_OWNER"; - public static final String C_SET_FILE_GROUP_OWNER = "C_SET_FILE_GROUP_OWNER"; - + // Mode of transfer: text or binary public static final int TEXT_MODE = -1; public static final int BINARY_MODE = -2; Index: src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java,v retrieving revision 1.43 diff -u -r1.43 DStoreFileService.java --- src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java 16 Jan 2008 18:29:38 -0000 1.43 +++ src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java 21 Jan 2008 18:27:00 -0000 @@ -76,15 +76,15 @@ import org.eclipse.rse.services.dstore.util.FileSystemMessageUtil; import org.eclipse.rse.services.files.CodePageConverterManager; import org.eclipse.rse.services.files.HostFilePermissions; -import org.eclipse.rse.services.files.IFileOwnerService; import org.eclipse.rse.services.files.IFilePermissionsService; import org.eclipse.rse.services.files.IFileService; import org.eclipse.rse.services.files.IFileServiceCodePageConverter; import org.eclipse.rse.services.files.IHostFile; import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.PendingHostFilePermissions; import org.eclipse.rse.services.files.RemoteFileSecurityException; -public class DStoreFileService extends AbstractDStoreService implements IFileService, IFilePermissionsService, IFileOwnerService +public class DStoreFileService extends AbstractDStoreService implements IFileService, IFilePermissionsService { protected org.eclipse.dstore.core.model.DataElement _uploadLogElement = null; @@ -2076,10 +2076,8 @@ - public boolean canGetFilePermissions(String remoteParent, String name) { - - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); + public boolean canGetFilePermissions(IHostFile file) { + DataElement remoteFile = ((DStoreHostFile)file).getDataElement(); DataElement queryCmd = getCommandDescriptor(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_PERMISSIONS); if (queryCmd != null){ @@ -2088,68 +2086,68 @@ return false; } - public boolean canGetFileOwner(String remoteParent, String name) { - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - DataElement queryCmd = getCommandDescriptor(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER); - if (queryCmd != null){ - return true; - } - return false; - } - - public boolean canSetFilePermissions(String remoteParent, String name) { - // for now just falling back to the same as get - return canGetFilePermissions(remoteParent, name); - } - public boolean canSetFileOwner(String remoteParent, String name) { + public boolean canSetFilePermissions(IHostFile file) { // for now just falling back to the same as get - return canGetFileOwner(remoteParent, name); + return canGetFilePermissions(file); } - public IHostFilePermissions getFilePermissions(String remoteParent, - String name, IProgressMonitor monitor) + public IHostFilePermissions getFilePermissions(IHostFile rfile, IProgressMonitor monitor) throws SystemMessageException { - - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - DataElement status = dsStatusCommand(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_PERMISSIONS, monitor); - if (status != null) { - int permissionsInt = 0; - String accessString = status.getSource(); // access string in octal - if (accessString != null && accessString.length() > 0) { - try - { - int accessInt = Integer.parseInt(accessString, 8); - permissionsInt = accessInt; // leave permissions in decimal - } - catch (Exception e){ + DStoreHostFile file = (DStoreHostFile)rfile; + IHostFilePermissions result = file.getPermissions(); + if (result == null || result instanceof PendingHostFilePermissions){ + DataElement remoteFile = file.getDataElement(); + + DataElement status = dsStatusCommand(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_PERMISSIONS, monitor); + if (status != null) { + int permissionsInt = 0; + + // access string in the form || + String permissionsStr = status.getSource(); + + if (permissionsStr != null && permissionsStr.length() > 0) { + String[] permAttributes = permissionsStr.split("\\"+IServiceConstants.TOKEN_SEPARATOR); //$NON-NLS-1$ + + // permissions bits + String accessString = permAttributes[0]; + try + { + int accessInt = Integer.parseInt(accessString, 8); + permissionsInt = accessInt; // leave permissions in decimal + } + catch (Exception e){ + } + + // user + String user = permAttributes[1]; + // group + String group = permAttributes[2]; + + result = new HostFilePermissions(permissionsInt, user, group); + ((DStoreHostFile)file).setPermissions(result); } - HostFilePermissions permissions = new HostFilePermissions(permissionsInt); - return permissions; } } - - // nothing - server may not be up-to-date - missing permissions and owner support - return null; + + return result; } - public void setFilePermissions(String remoteParent, String name, + public void setFilePermissions(IHostFile file, IHostFilePermissions permissions, IProgressMonitor monitor) throws SystemMessageException { - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); + DataElement remoteFile = ((DStoreHostFile)file).getDataElement(); ArrayList args = new ArrayList(); int bits = permissions.getPermissionBits(); String permissionsInOctal = Integer.toOctalString(bits); // from decimal to octal + String user = permissions.getUserOwner(); + String group = permissions.getGroupOwner(); - DataElement newPermissionsElement = getDataStore().createObject(null, "permissions", permissionsInOctal); //$NON-NLS-1$ + String permissionsStr = permissionsInOctal + '|' + user + '|' + group; + DataElement newPermissionsElement = getDataStore().createObject(null, "permissions", permissionsStr); //$NON-NLS-1$ args.add(newPermissionsElement); DataElement status = dsStatusCommand(remoteFile, args, IUniversalDataStoreConstants.C_SET_FILE_PERMISSIONS, monitor); @@ -2160,77 +2158,5 @@ } - public String getFileUserOwner(String remoteParent, String name, - IProgressMonitor monitor) throws SystemMessageException { - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - DataElement status = dsStatusCommand(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_USER_OWNER, monitor); - if (status != null) - { - String ownerString = status.getSource(); - if (ownerString != null && ownerString.length() > 0){ - return ownerString; - } - } - - // nothing - server may not be up-to-date - missing permissions and owner support - return null; - } - - public void setFileUserOwner(String remoteParent, String name, String newOwner, - IProgressMonitor monitor) throws SystemMessageException { - - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - ArrayList args = new ArrayList(); - DataElement newOwnerElement = getDataStore().createObject(null, "owner", newOwner); //$NON-NLS-1$ - args.add(newOwnerElement); - - DataElement status = dsStatusCommand(remoteFile, args, IUniversalDataStoreConstants.C_SET_FILE_USER_OWNER, monitor); - if (status != null) - { - // check status to make sure the file really changed - } - } - - public String getFileGroupOwner(String remoteParent, String name, - IProgressMonitor monitor) throws SystemMessageException { - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - DataElement status = dsStatusCommand(remoteFile, IUniversalDataStoreConstants.C_QUERY_FILE_GROUP_OWNER, monitor); - if (status != null) - { - String ownerString = status.getSource(); - if (ownerString != null && ownerString.length() > 0){ - return ownerString; - } - } - - // nothing - server may not be up-to-date - missing permissions and owner support - return null; - } - - public void setFileGroupOwner(String remoteParent, String name, String newOwner, - IProgressMonitor monitor) throws SystemMessageException { - - String remotePath = remoteParent + getSeparator(remoteParent) + name; - DataElement remoteFile = getElementFor(remotePath); - - ArrayList args = new ArrayList(); - DataElement newOwnerElement = getDataStore().createObject(null, "group", newOwner); //$NON-NLS-1$ - args.add(newOwnerElement); - - DataElement status = dsStatusCommand(remoteFile, args, IUniversalDataStoreConstants.C_SET_FILE_GROUP_OWNER, monitor); - if (status != null) - { - // check status to make sure the file really changed - } - } - - - } \ No newline at end of file Index: src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java,v retrieving revision 1.12 diff -u -r1.12 DStoreHostFile.java --- src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java 23 Aug 2007 15:26:06 -0000 1.12 +++ src/org/eclipse/rse/internal/services/dstore/files/DStoreHostFile.java 21 Jan 2008 18:27:00 -0000 @@ -29,8 +29,10 @@ import org.eclipse.rse.services.clientserver.PathUtility; import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; -public class DStoreHostFile implements IHostFile +public class DStoreHostFile implements IHostFile, IHostFilePermissionsContainer { public static final int ATTRIBUTE_MODIFIED_DATE=1; public static final int ATTRIBUTE_SIZE = 2; @@ -43,6 +45,7 @@ protected DataElement _element; protected boolean _isArchive; protected String _absolutePath; + protected IHostFilePermissions _permissions; public DStoreHostFile(DataElement element) { @@ -416,4 +419,12 @@ return "true".equals(str); //$NON-NLS-1$ } + public void setPermissions(IHostFilePermissions permissions){ + _permissions = permissions; + } + + public IHostFilePermissions getPermissions() { + return _permissions; + } + } Index: miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java,v retrieving revision 1.16 diff -u -r1.16 CommandMinerThread.java --- miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java 3 Dec 2007 17:07:04 -0000 1.16 +++ miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java 21 Jan 2008 18:26:59 -0000 @@ -177,6 +177,9 @@ else { isBash = true; + // no bash! + theShell = "sh"; + } } else if (theShell.endsWith("sh") && isZ)//$NON-NLS-1$ #P org.eclipse.rse.services.ssh Index: src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java,v retrieving revision 1.32 diff -u -r1.32 SftpFileService.java --- src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java 7 Jan 2008 14:53:46 -0000 1.32 +++ src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java 21 Jan 2008 18:27:02 -0000 @@ -20,6 +20,7 @@ * David McKnight (IBM) - [210109] store constants in IFileService rather than IFileServiceConstants * Kevin Doyle (IBM) - [208778] [efs][api] RSEFileStore#getOutputStream() does not support EFS#APPEND * Kevin Doyle (IBM) - [211374] [ssh] New File on SSH has unnecessary space in its contents + * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files *******************************************************************************/ package org.eclipse.rse.internal.services.ssh.files; @@ -65,13 +66,17 @@ import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.AbstractFileService; +import org.eclipse.rse.services.files.HostFilePermissions; +import org.eclipse.rse.services.files.IFilePermissionsService; import org.eclipse.rse.services.files.IFileService; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; import org.eclipse.rse.services.files.RemoteFileCancelledException; import org.eclipse.rse.services.files.RemoteFileIOException; import org.eclipse.rse.services.files.RemoteFileSecurityException; -public class SftpFileService extends AbstractFileService implements IFileService, ISshService +public class SftpFileService extends AbstractFileService implements IFileService, ISshService, IFilePermissionsService { private static class SftpBufferedInputStream extends BufferedInputStream { @@ -462,7 +467,7 @@ if (".".equals(fileName) || "..".equals(fileName)) { //$NON-NLS-1$ //$NON-NLS-2$ //don't show the trivial names continue; - } + } if (filematcher.matches(fileName) || (lsEntry.getAttrs().isDir() && fileType!=IFileService.FILE_TYPE_FOLDERS)) { //get ALL directory names (unless looking for folders only) SftpHostFile node = makeHostFile(parentPath, fileName, lsEntry.getAttrs()); @@ -521,6 +526,8 @@ } } } + + SftpHostFile node = new SftpHostFile(parentPath, fileName, attrsTarget.isDir(), false, attrs.isLink(), 1000L * attrs.getMTime(), attrs.getSize()); if (linkTarget!=null) { node.setLinkTarget(linkTarget); @@ -545,6 +552,12 @@ if (attrs.getExtended()!=null) { node.setExtendedData(attrs.getExtended()); } + + // permissions + // TODO get the user and owner from the uid and gid + HostFilePermissions permissions = new HostFilePermissions(perms, "" + attrs.getUId(), "" + attrs.getGId()); + node.setPermissions(permissions); + return node; } @@ -1122,4 +1135,45 @@ } return stream; } + + /** + * @see org.eclipse.rse.services.files.IFilePermissionsService#canGetFilePermissions(IHostFile) + */ + public boolean canGetFilePermissions(IHostFile file) { + if (file instanceof IHostFilePermissionsContainer && + ((IHostFilePermissionsContainer)file).getPermissions() != null){ + return true; + } + return false; + } + + + /** + * @see org.eclipse.rse.services.files.IFilePermissionsService#canSetFilePermissions(IHostFile) + */ + public boolean canSetFilePermissions(IHostFile file) { + return false; + } + + + /** + * @see org.eclipse.rse.services.files.IFilePermissionsService#getFilePermissions(IHostFile, IProgressMonitor) + */ + public IHostFilePermissions getFilePermissions(IHostFile file, + IProgressMonitor monitor) throws SystemMessageException { + if (file instanceof IHostFilePermissionsContainer){ + return ((IHostFilePermissionsContainer)file).getPermissions(); + } + return null; + } + + + /** + * @see org.eclipse.rse.services.files.IFilePermissionsService#setFilePermissions(IHostFile, IHostFilePermissions, IProgressMonitor) + */ + public void setFilePermissions(IHostFile file, + IHostFilePermissions permissions, IProgressMonitor monitor) + throws SystemMessageException { + return; + } } Index: src/org/eclipse/rse/internal/services/ssh/files/SftpHostFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpHostFile.java,v retrieving revision 1.2 diff -u -r1.2 SftpHostFile.java --- src/org/eclipse/rse/internal/services/ssh/files/SftpHostFile.java 15 Feb 2007 09:57:04 -0000 1.2 +++ src/org/eclipse/rse/internal/services/ssh/files/SftpHostFile.java 21 Jan 2008 18:27:02 -0000 @@ -13,6 +13,7 @@ * * Contributors: * Martin Oberhuber (Wind River) - Adapted from FTPHostFile. + * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files *******************************************************************************/ package org.eclipse.rse.internal.services.ssh.files; @@ -21,8 +22,10 @@ import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; -public class SftpHostFile implements IHostFile { +public class SftpHostFile implements IHostFile, IHostFilePermissionsContainer { private String fName; private String fParentPath; @@ -39,6 +42,8 @@ private String fLinkTarget; private String[] fExtended = null; + private IHostFilePermissions _permissions = null; + //TODO just re-use or extend FTPHostFile instead of copying here? public SftpHostFile(String parentPath, String name, boolean isDirectory, boolean isRoot, boolean isLink, long lastModified, long size) { fParentPath = parentPath; @@ -215,4 +220,12 @@ public boolean canExecute() { return fIsExecutable; } + + public IHostFilePermissions getPermissions() { + return _permissions; + } + + public void setPermissions(IHostFilePermissions permissions) { + _permissions = permissions; + } } #P org.eclipse.rse.services.files.ftp Index: src/org/eclipse/rse/internal/services/files/ftp/FTPService.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPService.java,v retrieving revision 1.49 diff -u -r1.49 FTPService.java --- src/org/eclipse/rse/internal/services/files/ftp/FTPService.java 7 Jan 2008 14:53:57 -0000 1.49 +++ src/org/eclipse/rse/internal/services/files/ftp/FTPService.java 21 Jan 2008 18:27:05 -0000 @@ -68,6 +68,7 @@ * Javier Montalvo Orus (Symbian) - [208912] Cannot expand /C on a VxWorks SSH Server * David McKnight (IBM) - [210109] store constants in IFileService rather than IFileServiceConstants * Kevin Doyle (IBM) - [208778] [efs][api] RSEFileStore#getOutputStream() does not support EFS#APPEND + * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files ********************************************************************************/ package org.eclipse.rse.internal.services.files.ftp; @@ -108,13 +109,16 @@ import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.AbstractFileService; +import org.eclipse.rse.services.files.IFilePermissionsService; import org.eclipse.rse.services.files.IFileService; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; import org.eclipse.rse.services.files.RemoteFileCancelledException; import org.eclipse.rse.services.files.RemoteFileIOException; import org.eclipse.rse.services.files.RemoteFileSecurityException; -public class FTPService extends AbstractFileService implements IFileService, IFTPService +public class FTPService extends AbstractFileService implements IFileService, IFTPService, IFilePermissionsService { private FTPClient _ftpClient; private FTPFile[] _ftpFiles; @@ -1709,5 +1713,31 @@ path.append(fileName); return path.toString(); } + + public boolean canGetFilePermissions(IHostFile file) { + if (file instanceof IHostFilePermissionsContainer && + ((IHostFilePermissionsContainer)file).getPermissions() != null){ + return true; + } + return false; + } + + public boolean canSetFilePermissions(IHostFile file) { + return false; + } + + public IHostFilePermissions getFilePermissions(IHostFile file, + IProgressMonitor monitor) throws SystemMessageException { + if (file instanceof IHostFilePermissionsContainer) + { + return ((IHostFilePermissionsContainer)file).getPermissions(); + } + return null; + } + + public void setFilePermissions(IHostFile file, + IHostFilePermissions permissions, IProgressMonitor monitor) + throws SystemMessageException { + } } Index: src/org/eclipse/rse/internal/services/files/ftp/FTPHostFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services.files.ftp/src/org/eclipse/rse/internal/services/files/ftp/FTPHostFile.java,v retrieving revision 1.7 diff -u -r1.7 FTPHostFile.java --- src/org/eclipse/rse/internal/services/files/ftp/FTPHostFile.java 1 Oct 2007 16:19:40 -0000 1.7 +++ src/org/eclipse/rse/internal/services/files/ftp/FTPHostFile.java 21 Jan 2008 18:27:05 -0000 @@ -20,6 +20,7 @@ * Javier Montalvo Orus (Symbian) - [198272] FTP should return classification for symbolic links so they show a link overlay * Martin Oberhuber (Wind River) - [204669] Fix ftp path concatenation on systems using backslash separator * Javier Montalvo Orus (Symbian) - [198692] FTP should mark files starting with "." as hidden + * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files ********************************************************************************/ package org.eclipse.rse.internal.services.files.ftp; @@ -30,9 +31,12 @@ import org.apache.commons.net.ftp.FTPFile; import org.eclipse.rse.services.clientserver.PathUtility; import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; +import org.eclipse.rse.services.files.HostFilePermissions; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; -public class FTPHostFile implements IHostFile +public class FTPHostFile implements IHostFile, IHostFilePermissionsContainer { private String _name; @@ -46,6 +50,7 @@ private boolean _canWrite = true; private boolean _isRoot; private boolean _exists; + private IHostFilePermissions _permissions; private FTPFile _ftpFile; public FTPHostFile(String parentPath, String name, boolean isDirectory, boolean isRoot, long lastModified, long size, boolean exists) @@ -80,8 +85,12 @@ _isRoot = false; _exists = true; + + initPermissions(ftpFile); } + + public long getSize() { @@ -283,5 +292,30 @@ } return result; } + + private void initPermissions(FTPFile ftpFile){ + _permissions = new HostFilePermissions(); + _permissions.setPermission(IHostFilePermissions.PERM_USER_READ, ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_USER_WRITE, ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_USER_EXECUTE, ftpFile.hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_GROUP_READ, ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_GROUP_WRITE, ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_GROUP_EXECUTE, ftpFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_OTHER_READ, ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_OTHER_WRITE, ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION)); + _permissions.setPermission(IHostFilePermissions.PERM_OTHER_EXECUTE, ftpFile.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION)); + + + _permissions.setUserOwner(ftpFile.getUser()); + _permissions.setGroupOwner(ftpFile.getGroup()); + } + + public IHostFilePermissions getPermissions() { + return _permissions; + } + + public void setPermissions(IHostFilePermissions permissions) { + _permissions = permissions; + } } \ No newline at end of file #P org.eclipse.rse.files.ui Index: src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java,v retrieving revision 1.64 diff -u -r1.64 SystemViewRemoteFileAdapter.java --- src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java 17 Jan 2008 22:25:09 -0000 1.64 +++ src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java 21 Jan 2008 18:27:09 -0000 @@ -117,9 +117,10 @@ import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; -import org.eclipse.rse.services.files.IFileOwnerService; import org.eclipse.rse.services.files.IFilePermissionsService; +import org.eclipse.rse.services.files.IHostFile; import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; import org.eclipse.rse.services.files.PendingHostFilePermissions; import org.eclipse.rse.services.search.HostSearchResultSet; import org.eclipse.rse.services.search.IHostSearchConstants; @@ -1317,133 +1318,45 @@ IHostFilePermissions permissions = file.getPermissions(); if (permissions == null){ - if (file instanceof IAdaptable){ - final IFilePermissionsService service = (IFilePermissionsService)((IAdaptable)file).getAdapter(IFilePermissionsService.class); - if (service != null && service.canGetFilePermissions(file.getParentPath(), file.getName())){ - final IRemoteFile rFile = file; - - - Job deferredFetch = new Job(MessageFormat.format(FileResources.MESSAGE_GETTING_PERMISSIONS, new Object[] {file.getAbsolutePath()})) - { - public IStatus run(IProgressMonitor monitor){ - try - { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - IHostFilePermissions perm = service.getFilePermissions(remoteParent, fname, monitor); - if (perm != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setPermissions(perm); - // notify change to property sheet - - ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); - registry.fireEvent(new SystemResourceChangeEvent(rFile, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, rFile)); - } - } - catch (Exception e) - { - } - return Status.OK_STATUS; - } - }; - deferredFetch.schedule(); - if (file instanceof RemoteFile){ - // using pending host file permssions as dummy until we have the real thing - ((RemoteFile)file).setPermissions(new PendingHostFilePermissions()); - } - return FileResources.MESSAGE_PENDING; - } + if (getFilePermissions(file)){ + return FileResources.MESSAGE_PENDING; } return FileResources.MESSAGE_NOT_SUPPORTED; } - return permissions.toUserString(); + if (permissions instanceof PendingHostFilePermissions){ + return FileResources.MESSAGE_PENDING; + } + return permissions.toAlphaString(); } else if (name.equals(ISystemPropertyConstants.P_FILE_OWNER)) { - String owner = file.getOwner(); - if (owner == null){ - if (file instanceof IAdaptable){ - - final IFileOwnerService service = (IFileOwnerService)((IAdaptable)file).getAdapter(IFileOwnerService.class); - if (service != null && service.canGetFileOwner(file.getParentPath(), file.getName())){ - - final IRemoteFile rFile = file; - - Job deferredFetch = new Job(MessageFormat.format(FileResources.MESSAGE_GETTING_OWNER, new Object[] {file.getAbsolutePath()})) - { - public IStatus run(IProgressMonitor monitor){ - try - { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - String uowner = service.getFileUserOwner(remoteParent, fname, monitor); - if (uowner != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setOwner(uowner); - } - - // notify change to property sheet - ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); - registry.fireEvent(new SystemResourceChangeEvent(rFile, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, rFile)); - } - catch (Exception e) - { - } - return Status.OK_STATUS; - } - }; - deferredFetch.schedule(); - - if (file instanceof RemoteFile){ - // using pending host file owner as dummy until we have the real thing - ((RemoteFile)file).setOwner("Pending"); //pending for now - } - return FileResources.MESSAGE_PENDING; - } + IHostFilePermissions permissions = file.getPermissions(); + if (permissions == null){ + + if (getFilePermissions(file)){ + return FileResources.MESSAGE_PENDING; } return FileResources.MESSAGE_NOT_SUPPORTED; } - return owner; + if (permissions instanceof PendingHostFilePermissions){ + return FileResources.MESSAGE_PENDING; + } + return permissions.getUserOwner(); } else if (name.equals(ISystemPropertyConstants.P_FILE_GROUP)) { - String group = file.getGroup(); - if (group == null){ - if (file instanceof IAdaptable){ - final IFileOwnerService service = (IFileOwnerService)((IAdaptable)file).getAdapter(IFileOwnerService.class); - if (service != null && service.canGetFileOwner(file.getParentPath(), file.getName())){ - final IRemoteFile rFile = file; - - Job deferredFetch = new Job(MessageFormat.format(FileResources.MESSAGE_GETTING_GROUP, new Object[] {file.getAbsolutePath()})) - { - public IStatus run(IProgressMonitor monitor){ - try - { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - String ugroup = service.getFileGroupOwner(remoteParent, fname, monitor); - if (ugroup != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setGroup(ugroup); - } - // notify change to property sheet - ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); - registry.fireEvent(new SystemResourceChangeEvent(rFile, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, rFile)); - } - catch (Exception e) - { - } - return Status.OK_STATUS; - } - }; - deferredFetch.schedule(); - if (file instanceof RemoteFile){ - // using pending host file owner as dummy until we have the real thing - ((RemoteFile)file).setGroup("Pending"); //pending for now - } - return FileResources.MESSAGE_PENDING; - } + IHostFilePermissions permissions = file.getPermissions(); + if (permissions == null){ + + if (getFilePermissions(file)){ + return FileResources.MESSAGE_PENDING; } return FileResources.MESSAGE_NOT_SUPPORTED; } - return group; + if (permissions instanceof PendingHostFilePermissions){ + return FileResources.MESSAGE_PENDING; + } + return permissions.getGroupOwner(); } else if (name.equals(ISystemPropertyConstants.P_FILE_CLASSIFICATION)) { @@ -1498,6 +1411,42 @@ else return null; //super.getPropertyValue(name); } + + private boolean getFilePermissions(IRemoteFile file){ + if (file instanceof IAdaptable){ + final IFilePermissionsService service = (IFilePermissionsService)((IAdaptable)file).getAdapter(IFilePermissionsService.class); + if (service != null && service.canGetFilePermissions(file.getHostFile())){ + final IRemoteFile rFile = file; + + + Job deferredFetch = new Job(MessageFormat.format(FileResources.MESSAGE_GETTING_PERMISSIONS, new Object[] {file.getAbsolutePath()})) + { + public IStatus run(IProgressMonitor monitor){ + try + { + // service will take care of setting this on the host file + service.getFilePermissions(rFile.getHostFile(), monitor); + ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); + registry.fireEvent(new SystemResourceChangeEvent(rFile, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, rFile)); + } + catch (Exception e) + { + } + return Status.OK_STATUS; + } + }; + deferredFetch.schedule(); + IHostFile hostFile = file.getHostFile(); + if (hostFile != null && hostFile instanceof IHostFilePermissionsContainer){ + ((IHostFilePermissionsContainer)hostFile).setPermissions(new PendingHostFilePermissions()); + } + + return true; // query kicked off + } + } + return false; // no query kicked off + } + // Drag and Drop Implementation @@ -3559,7 +3508,7 @@ if (tgt instanceof IAdaptable){ IFilePermissionsService service = (IFilePermissionsService)((IAdaptable)tgt).getAdapter(IFilePermissionsService.class); if (service != null){ - return service.canGetFilePermissions(tgt.getParentPath(), tgt.getName()); + return service.canGetFilePermissions(tgt.getHostFile()); } } } Index: src/org/eclipse/rse/internal/files/ui/FileResources.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.java,v retrieving revision 1.10 diff -u -r1.10 FileResources.java --- src/org/eclipse/rse/internal/files/ui/FileResources.java 16 Jan 2008 18:28:17 -0000 1.10 +++ src/org/eclipse/rse/internal/files/ui/FileResources.java 21 Jan 2008 18:27:07 -0000 @@ -282,8 +282,6 @@ public static String MESSAGE_PENDING; public static String MESSAGE_NOT_SUPPORTED; public static String MESSAGE_GETTING_PERMISSIONS; - public static String MESSAGE_GETTING_OWNER; - public static String MESSAGE_GETTING_GROUP; static { Index: src/org/eclipse/rse/internal/files/ui/FileResources.properties =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.properties,v retrieving revision 1.13 diff -u -r1.13 FileResources.properties --- src/org/eclipse/rse/internal/files/ui/FileResources.properties 17 Jan 2008 22:25:08 -0000 1.13 +++ src/org/eclipse/rse/internal/files/ui/FileResources.properties 21 Jan 2008 18:27:07 -0000 @@ -283,6 +283,4 @@ MESSAGE_PENDING=Pending... MESSAGE_NOT_SUPPORTED=Not supported MESSAGE_GETTING_PERMISSIONS=Getting permissions for {0} -MESSAGE_GETTING_OWNER=Getting user owner for {0} -MESSAGE_GETTING_GROUP=Getting group owner for {0} Index: src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java,v retrieving revision 1.1 diff -u -r1.1 SystemFilePermissionsPropertyPage.java --- src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java 16 Jan 2008 18:28:18 -0000 1.1 +++ src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java 21 Jan 2008 18:27:08 -0000 @@ -24,11 +24,10 @@ import org.eclipse.rse.core.events.SystemResourceChangeEvent; import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.internal.files.ui.FileResources; -import org.eclipse.rse.services.files.IFileOwnerService; import org.eclipse.rse.services.files.IFilePermissionsService; import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.PendingHostFilePermissions; import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile; -import org.eclipse.rse.subsystems.files.core.subsystems.RemoteFile; import org.eclipse.rse.ui.SystemWidgetHelpers; import org.eclipse.rse.ui.propertypages.SystemBasePropertyPage; import org.eclipse.swt.SWT; @@ -81,7 +80,7 @@ IRemoteFile file = getRemoteFile(); IFilePermissionsService service = getPermissionsService(file); - if (service == null || !service.canGetFilePermissions(file.getParentPath(), file.getName())){ + if (service == null || !service.canGetFilePermissions(file.getHostFile())){ // not supported SystemWidgetHelpers.createLabel(parent, FileResources.MESSAGE_FILE_PERMISSIONS_NOT_SUPPORTED); } @@ -227,14 +226,6 @@ } - private IFileOwnerService getOwnerService(IRemoteFile remoteFile){ - - if (remoteFile instanceof IAdaptable){ - return (IFileOwnerService)((IAdaptable)remoteFile).getAdapter(IFileOwnerService.class); - } - - return null; - } private void initFields() { @@ -243,17 +234,10 @@ IFilePermissionsService ps = getPermissionsService(remoteFile); if (ps == null){ enablePermissionFields(false); - } - else { - initPermissionFields(remoteFile, ps); - } - - IFileOwnerService os = getOwnerService(remoteFile); - if (ps == null){ enableOwnershipFields(false); } else { - initOwnershipFields(remoteFile, os); + initPermissionFields(remoteFile, ps); } } @@ -262,26 +246,28 @@ final IRemoteFile rFile = file; final IFilePermissionsService pService = service; - String remoteParent = file.getParentPath(); - String name = file.getName(); + - if (service.canGetFilePermissions(remoteParent, name)){ - enablePermissionFields(true); + if (service.canGetFilePermissions(rFile.getHostFile())){ + if (service.canSetFilePermissions(rFile.getHostFile())) { + enablePermissionFields(true); + enableOwnershipFields(true); + } + else { + enablePermissionFields(false); + enableOwnershipFields(false); + } + try { _permissions = file.getPermissions(); - if (_permissions == null){ + if (_permissions == null || _permissions instanceof PendingHostFilePermissions){ Job deferredFetch = new Job(FileResources.MESSAGE_GETTING_PERMISSIONS) { public IStatus run(IProgressMonitor monitor){ try { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - _permissions = pService.getFilePermissions(remoteParent, fname, monitor); - if (_permissions != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setPermissions(_permissions); - } + _permissions = pService.getFilePermissions(rFile.getHostFile(), monitor); // notify change Display.getDefault().asyncExec(new Runnable() @@ -297,6 +283,13 @@ _otherRead.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_READ)); _otherWrite.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_WRITE)); _otherExecute.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_EXECUTE)); + + _owner = _permissions.getUserOwner(); + _group = _permissions.getGroupOwner(); + + _userEntry.setText(_owner); + _groupEntry.setText(_group); + } }); } @@ -317,102 +310,12 @@ _groupExecute.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_GROUP_EXECUTE)); _otherRead.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_READ)); _otherWrite.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_WRITE)); - _otherExecute.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_EXECUTE)); - } - } - catch (Exception e){ - - } - } - else { - enablePermissionFields(false); - } - } - - - private void initOwnershipFields(IRemoteFile file, IFileOwnerService service){ - _owner = null; - _group = null; - - String remoteParent = file.getParentPath(); - String name = file.getName(); - final IRemoteFile rFile = file; - final IFileOwnerService oService = service; - - if (service.canGetFileOwner(remoteParent, name)){ - enableOwnershipFields(true); - try - { - _owner = file.getOwner(); - if (_owner == null){ - Job deferredFetch = new Job(FileResources.MESSAGE_GETTING_OWNER) - { - public IStatus run(IProgressMonitor monitor){ - try - { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - _owner = oService.getFileUserOwner(remoteParent, fname, monitor); - if (_owner != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setOwner(_owner); - } - - // notify change - Display.getDefault().asyncExec(new Runnable() - { - public void run() - { - _userEntry.setText(_owner); - } - }); - } - catch (Exception e) - { - } - return Status.OK_STATUS; - } - }; - deferredFetch.schedule(); - _userEntry.setText(FileResources.MESSAGE_PENDING); - } - else { + _otherExecute.setSelection(_permissions.getPermission(IHostFilePermissions.PERM_OTHER_EXECUTE)); + + _owner = _permissions.getUserOwner(); + _group = _permissions.getGroupOwner(); + _userEntry.setText(_owner); - } - - _group = file.getGroup(); - if (_group == null){ - Job deferredFetch = new Job(FileResources.MESSAGE_GETTING_GROUP) - { - public IStatus run(IProgressMonitor monitor){ - try - { - String remoteParent = rFile.getParentPath(); - String fname = rFile.getName(); - _group = oService.getFileGroupOwner(remoteParent, fname, monitor); - if (_group != null && rFile instanceof RemoteFile){ - ((RemoteFile)rFile).setGroup(_group); - } - - // notify change - Display.getDefault().asyncExec(new Runnable() - { - public void run() - { - _groupEntry.setText(_group); - } - }); - - } - catch (Exception e) - { - } - return Status.OK_STATUS; - } - }; - deferredFetch.schedule(); - _groupEntry.setText(FileResources.MESSAGE_PENDING); - } - else { _groupEntry.setText(_group); } } @@ -421,10 +324,13 @@ } } else { + enablePermissionFields(false); enableOwnershipFields(false); } } + + public boolean performOk() { IRemoteFile remoteFile = getRemoteFile(); @@ -438,7 +344,7 @@ String name = remoteFile.getName(); - if (service.canSetFilePermissions(remoteParent, name)){ + if (service.canSetFilePermissions(remoteFile.getHostFile())){ try { @@ -479,47 +385,27 @@ changed = true; _permissions.setPermission(IHostFilePermissions.PERM_OTHER_EXECUTE, _otherExecute.getSelection()); } - - if (changed){ - service.setFilePermissions(remoteParent, name, _permissions, new NullProgressMonitor()); - } - } - catch (Exception e){ - } - } - } - if (_owner != null){ - IFileOwnerService service = getOwnerService(remoteFile); - - String remoteParent = remoteFile.getParentPath(); - String name = remoteFile.getName(); - - if (service.canSetFileOwner(remoteParent, name)){ - try - { if (_owner != _userEntry.getText()){ changed = true; - if (remoteFile instanceof RemoteFile){ - ((RemoteFile)remoteFile).setOwner(_owner); - } - - service.setFileUserOwner(remoteParent, name, _userEntry.getText(), new NullProgressMonitor()); + _permissions.setUserOwner(_userEntry.getText()); } if (_group != _groupEntry.getText()){ changed = true; - if (remoteFile instanceof RemoteFile){ - ((RemoteFile)remoteFile).setGroup(_group); - } - service.setFileGroupOwner(remoteParent, name, _groupEntry.getText(), new NullProgressMonitor()); + _permissions.setGroupOwner(_groupEntry.getText()); + } + + + if (changed){ + service.setFilePermissions(remoteFile.getHostFile(), _permissions, new NullProgressMonitor()); } } catch (Exception e){ } - } + } } - + if (changed){ // notify views of change ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); #P org.eclipse.rse.subsystems.files.core Index: src/org/eclipse/rse/internal/subsystems/files/core/RemoteFilePermissionsAdapterFactory.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/internal/subsystems/files/core/RemoteFilePermissionsAdapterFactory.java,v retrieving revision 1.1 diff -u -r1.1 RemoteFilePermissionsAdapterFactory.java --- src/org/eclipse/rse/internal/subsystems/files/core/RemoteFilePermissionsAdapterFactory.java 16 Jan 2008 18:35:39 -0000 1.1 +++ src/org/eclipse/rse/internal/subsystems/files/core/RemoteFilePermissionsAdapterFactory.java 21 Jan 2008 18:27:11 -0000 @@ -13,7 +13,6 @@ ********************************************************************************/ package org.eclipse.rse.internal.subsystems.files.core; -import org.eclipse.rse.services.files.IFileOwnerService; import org.eclipse.rse.services.files.IFilePermissionsService; import org.eclipse.rse.services.files.IFileService; import org.eclipse.rse.subsystems.files.core.servicesubsystem.FileServiceSubSystem; @@ -44,11 +43,6 @@ return fileService; } } - else if (adapterType == IFileOwnerService.class){ - if (fileService instanceof IFileOwnerService){ - return fileService; - } - } } @@ -60,6 +54,6 @@ */ public Class[] getAdapterList() { - return new Class[] {IFilePermissionsService.class, IFileOwnerService.class}; + return new Class[] {IFilePermissionsService.class}; } } Index: src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileEmpty.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileEmpty.java,v retrieving revision 1.5 diff -u -r1.5 RemoteFileEmpty.java --- src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileEmpty.java 22 Feb 2007 15:15:21 -0000 1.5 +++ src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileEmpty.java 21 Jan 2008 18:27:11 -0000 @@ -18,6 +18,7 @@ package org.eclipse.rse.subsystems.files.core.subsystems; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; /** @@ -200,7 +201,12 @@ return null; } - + /** + * Override this to provide permissions + */ + public IHostFilePermissions getPermissions() { + return null; + } } Index: src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileRoot.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileRoot.java,v retrieving revision 1.3 diff -u -r1.3 RemoteFileRoot.java --- src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileRoot.java 22 Feb 2007 15:15:21 -0000 1.3 +++ src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFileRoot.java 21 Jan 2008 18:27:11 -0000 @@ -18,6 +18,7 @@ package org.eclipse.rse.subsystems.files.core.subsystems; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.files.IHostFilePermissions; /** * A root node used to drive a CheckboxTreeAndListGroup, or any viewer which @@ -102,8 +103,7 @@ } public String getRoot() { - // TODO Auto-generated method stub - return null; + return rootFile.getAbsolutePath(); } public String getParentName() { @@ -112,68 +112,71 @@ } public boolean isRoot() { - // TODO Auto-generated method stub - return false; + return true; } public boolean isDirectory() { - // TODO Auto-generated method stub - return false; + return true; } public boolean isFile() { - // TODO Auto-generated method stub return false; } + public boolean isHidden() { - // TODO Auto-generated method stub return false; } + public boolean canRead() { - // TODO Auto-generated method stub - return false; + return rootFile.canRead(); } + public boolean canWrite() { - // TODO Auto-generated method stub - return false; + return rootFile.canWrite(); } + public boolean exists() { - // TODO Auto-generated method stub - return false; + return rootFile.exists(); } + public long getLastModified() { - // TODO Auto-generated method stub - return 0; + return rootFile.getLastModified(); } + public long getLength() { - // TODO Auto-generated method stub - return 0; + return rootFile.getLength(); } + public boolean showReadOnlyProperty() { - // TODO Auto-generated method stub - return false; + return rootFile.showReadOnlyProperty(); } + public String getClassification() { - // TODO Auto-generated method stub - return null; + return rootFile.getClassification(); } + public String getCanonicalPath() { - // TODO Auto-generated method stub - return null; + return rootFile.getCanonicalPath(); } + public IHostFile getHostFile() { - // TODO Auto-generated method stub - return null; + return rootFile.getHostFile(); } + /** + * Override this to provide permissions + */ + public IHostFilePermissions getPermissions() { + return rootFile.getPermissions(); + } } Index: src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFile.java,v retrieving revision 1.10 diff -u -r1.10 IRemoteFile.java --- src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFile.java 16 Jan 2008 18:35:39 -0000 1.10 +++ src/org/eclipse/rse/subsystems/files/core/subsystems/IRemoteFile.java 21 Jan 2008 18:27:11 -0000 @@ -342,16 +342,4 @@ */ public IHostFilePermissions getPermissions(); - /** - * Returns the owner for this file if it exists - * @return the owner - */ - public String getOwner(); - - /** - * Returns the group for this file if it exists - * @return the group - */ - public String getGroup(); - } Index: src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java,v retrieving revision 1.31 diff -u -r1.31 RemoteFile.java --- src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java 16 Jan 2008 18:35:39 -0000 1.31 +++ src/org/eclipse/rse/subsystems/files/core/subsystems/RemoteFile.java 21 Jan 2008 18:27:11 -0000 @@ -44,7 +44,9 @@ import org.eclipse.rse.services.clientserver.StringComparePatternMatcher; import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; +import org.eclipse.rse.services.files.IHostFile; import org.eclipse.rse.services.files.IHostFilePermissions; +import org.eclipse.rse.services.files.IHostFilePermissionsContainer; import org.eclipse.rse.subsystems.files.core.model.RemoteFileFilterString; import org.eclipse.rse.subsystems.files.core.model.SystemFileTransferModeRegistry; import org.eclipse.rse.ui.SystemBasePlugin; @@ -100,10 +102,7 @@ protected HashMap properties = new HashMap(); protected HashMap propertyStates = new HashMap(); - // permissions - protected IHostFilePermissions _permissions; - protected String _owner; - protected String _group; + /** * Constructor that takes a context object containing important information. @@ -907,9 +906,6 @@ public void markStale(boolean isStale, boolean clearCache) { _isStale = isStale; - _owner = null; - _group = null; - _permissions = null; if (isStale && clearCache) { @@ -1207,32 +1203,12 @@ public void setEncoding(String encoding) { RemoteFileEncodingManager.getInstance().setEncoding(getHostName(), getAbsolutePath(), encoding); } - - public void setGroup(String group) { - _group = group; - } - - public void setOwner(String owner) { - _owner = owner; - } - - public void setPermissions(IHostFilePermissions permissions) { - _permissions = permissions; - } - - - public String getGroup() { - return _group; - } - - - public String getOwner() { - return _owner; - } - public IHostFilePermissions getPermissions() { - return _permissions; + IHostFile hostFile = getHostFile(); + if (hostFile instanceof IHostFilePermissionsContainer){ + return ((IHostFilePermissionsContainer)hostFile).getPermissions(); + } + return null; } - } Index: src/org/eclipse/rse/subsystems/files/core/servicesubsystem/AbstractRemoteFile.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.subsystems.files.core/src/org/eclipse/rse/subsystems/files/core/servicesubsystem/AbstractRemoteFile.java,v retrieving revision 1.6 diff -u -r1.6 AbstractRemoteFile.java --- src/org/eclipse/rse/subsystems/files/core/servicesubsystem/AbstractRemoteFile.java 11 Jul 2007 21:00:25 -0000 1.6 +++ src/org/eclipse/rse/subsystems/files/core/servicesubsystem/AbstractRemoteFile.java 21 Jan 2008 18:27:11 -0000 @@ -199,4 +199,5 @@ return _hostFile; } + }