From 739dc3ac37fff65590a13c89a8e4ca9e8bca8450 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Tue, 22 Jan 2008 23:13:13 +0000 Subject: [PATCH] [209593] clone permissions for modification purposes --- .../SystemFilePermissionsPropertyPage.java | 29 ++++++++++--------- .../dstore/files/DStoreFileService.java | 5 ++++ .../services/files/HostFilePermissions.java | 5 ++++ .../services/files/IHostFilePermissions.java | 6 ++++ 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java index 74536fea7bf..f7578190b9c 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/propertypages/SystemFilePermissionsPropertyPage.java @@ -351,57 +351,60 @@ public class SystemFilePermissionsPropertyPage extends SystemBasePropertyPage { if ((capabilities & IFilePermissionsService.FS_CAN_SET_PERMISSIONS) != 0){ try { - + IHostFilePermissions newPermissions = _permissions.clone(_permissions); if (_permissions.getPermission(IHostFilePermissions.PERM_USER_READ) != _userRead.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_USER_READ, _userRead.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_USER_READ, _userRead.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_USER_WRITE) != _userWrite.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_USER_WRITE, _userWrite.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_USER_WRITE, _userWrite.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_USER_EXECUTE) != _userExecute.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_USER_EXECUTE, _userExecute.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_USER_EXECUTE, _userExecute.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_GROUP_READ) != _groupRead.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_GROUP_READ, _groupRead.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_GROUP_READ, _groupRead.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_GROUP_WRITE) != _groupWrite.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_GROUP_WRITE, _groupWrite.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_GROUP_WRITE, _groupWrite.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_GROUP_EXECUTE) != _groupExecute.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_GROUP_EXECUTE, _groupExecute.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_GROUP_EXECUTE, _groupExecute.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_OTHER_READ) != _otherRead.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_OTHER_READ, _otherRead.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_OTHER_READ, _otherRead.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_OTHER_WRITE) != _otherWrite.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_OTHER_WRITE, _otherWrite.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_OTHER_WRITE, _otherWrite.getSelection()); } if (_permissions.getPermission(IHostFilePermissions.PERM_OTHER_EXECUTE) != _otherExecute.getSelection()){ changed = true; - _permissions.setPermission(IHostFilePermissions.PERM_OTHER_EXECUTE, _otherExecute.getSelection()); + newPermissions.setPermission(IHostFilePermissions.PERM_OTHER_EXECUTE, _otherExecute.getSelection()); } if (_owner != _userEntry.getText()){ changed = true; - _permissions.setUserOwner(_userEntry.getText()); + newPermissions.setUserOwner(_userEntry.getText()); } if (_group != _groupEntry.getText()){ changed = true; - _permissions.setGroupOwner(_groupEntry.getText()); + newPermissions.setGroupOwner(_groupEntry.getText()); } if (changed){ - service.setFilePermissions(remoteFile.getHostFile(), _permissions, new NullProgressMonitor()); + // assuming permissions are good + service.setFilePermissions(remoteFile.getHostFile(), newPermissions, new NullProgressMonitor()); + + _permissions = newPermissions; } } catch (Exception e){ diff --git a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java index ed2852dd33c..13131af7374 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/src/org/eclipse/rse/internal/services/dstore/files/DStoreFileService.java @@ -81,6 +81,7 @@ 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.IHostFilePermissionsContainer; import org.eclipse.rse.services.files.PendingHostFilePermissions; import org.eclipse.rse.services.files.RemoteFileSecurityException; @@ -2143,6 +2144,10 @@ public class DStoreFileService extends AbstractDStoreService implements IFileSer if (status != null) { // check status to make sure the file really changed + if (file instanceof IHostFilePermissionsContainer){ + ((IHostFilePermissionsContainer)file).setPermissions(permissions); // set to use new permissions + } + } } diff --git a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/HostFilePermissions.java b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/HostFilePermissions.java index f27a9d1f56b..42941501eb3 100644 --- a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/HostFilePermissions.java +++ b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/HostFilePermissions.java @@ -154,4 +154,9 @@ public class HostFilePermissions implements public void setUserOwner(String user) { _user = user; } + + public IHostFilePermissions clone(IHostFilePermissions toClone) { + IHostFilePermissions clone = new HostFilePermissions(toClone.getPermissionBits(), toClone.getUserOwner(), toClone.getGroupOwner()); + return clone; + } } diff --git a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFilePermissions.java b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFilePermissions.java index d5294e65ee8..af14730d613 100644 --- a/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFilePermissions.java +++ b/rse/plugins/org.eclipse.rse.services/src/org/eclipse/rse/services/files/IHostFilePermissions.java @@ -144,4 +144,10 @@ public interface IHostFilePermissions { */ public void setGroupOwner(String group); + /** + * Create a duplicate of a set of permissions + * @param toClone + * @return the duplicate + */ + public IHostFilePermissions clone(IHostFilePermissions toClone); }