extensions/net.sf.basedb.opengrid/trunk/src/net/sf/basedb/opengrid/filetransfer/FilePermission.java

Code
Comments
Other
Rev Date Author Line
4121 22 Sep 16 nicklas 1 package net.sf.basedb.opengrid.filetransfer;
4121 22 Sep 16 nicklas 2
4121 22 Sep 16 nicklas 3 /**
4121 22 Sep 16 nicklas 4   Represents the permission code for a file on a UNIX file system. 
4121 22 Sep 16 nicklas 5   This class define numeric constanst for READ, WRITE and EXECUTE
4121 22 Sep 16 nicklas 6   permissions which can be OR-ed to make up a final permission. 
4121 22 Sep 16 nicklas 7   
4121 22 Sep 16 nicklas 8   We also define some common presets for user, group and other users.
4121 22 Sep 16 nicklas 9
4121 22 Sep 16 nicklas 10   @author nicklas
4121 22 Sep 16 nicklas 11   @since 1.0
4121 22 Sep 16 nicklas 12 */
4121 22 Sep 16 nicklas 13 public class FilePermission 
4121 22 Sep 16 nicklas 14 {
4121 22 Sep 16 nicklas 15   /**
4121 22 Sep 16 nicklas 16     No permissions = 0;
4121 22 Sep 16 nicklas 17   */
4121 22 Sep 16 nicklas 18   public static final int NONE = 0;
4121 22 Sep 16 nicklas 19   
4121 22 Sep 16 nicklas 20   /**
4121 22 Sep 16 nicklas 21     Read permissions = 4.
4121 22 Sep 16 nicklas 22   */
4121 22 Sep 16 nicklas 23   public static final int READ = 4;
4121 22 Sep 16 nicklas 24
4121 22 Sep 16 nicklas 25   /**
4121 22 Sep 16 nicklas 26     Write permissions = 2.
4121 22 Sep 16 nicklas 27   */
4121 22 Sep 16 nicklas 28   public static final int WRITE = 2;
4121 22 Sep 16 nicklas 29
4121 22 Sep 16 nicklas 30   /**
4121 22 Sep 16 nicklas 31     Execute permissions = 1.
4121 22 Sep 16 nicklas 32   */
4121 22 Sep 16 nicklas 33   public static final int EXECUTE = 1;
4121 22 Sep 16 nicklas 34   
4121 22 Sep 16 nicklas 35   /**
4121 22 Sep 16 nicklas 36     Predefined set of permission giving the owner READ+WRITE permission and
4121 22 Sep 16 nicklas 37     no permissions to other users.
4121 22 Sep 16 nicklas 38   */
4121 22 Sep 16 nicklas 39   public static final FilePermission USER_RW = new FilePermission(READ+WRITE, NONE, NONE);
4121 22 Sep 16 nicklas 40   
4121 22 Sep 16 nicklas 41   /**
4121 22 Sep 16 nicklas 42     Predefined set of permission giving the owner READ+WRITE+EXECUTE permission and
4121 22 Sep 16 nicklas 43     no permissions to other users.
4121 22 Sep 16 nicklas 44   */
4121 22 Sep 16 nicklas 45   public static final FilePermission USER_RWX = new FilePermission(READ+WRITE+EXECUTE, NONE, NONE);
4121 22 Sep 16 nicklas 46   
4121 22 Sep 16 nicklas 47   /**
4121 22 Sep 16 nicklas 48     Predefined set of permission giving the owner READ+WRITE permission, the
4121 22 Sep 16 nicklas 49     group READ permission and no permissions to other users.
4121 22 Sep 16 nicklas 50   */
4121 22 Sep 16 nicklas 51   public static final FilePermission USER_RW_GROUP_R = new FilePermission(READ+WRITE, READ, NONE);
4121 22 Sep 16 nicklas 52
4121 22 Sep 16 nicklas 53   /**
4121 22 Sep 16 nicklas 54     Predefined set of permission giving the owner READ+WRITE permission and 
4121 22 Sep 16 nicklas 55     READ permissions to other users.
4121 22 Sep 16 nicklas 56   */
4121 22 Sep 16 nicklas 57   public static final FilePermission USER_RW_ALL_R = new FilePermission(READ+WRITE, READ, READ);
4121 22 Sep 16 nicklas 58
4121 22 Sep 16 nicklas 59   
4121 22 Sep 16 nicklas 60   private final int user;
4121 22 Sep 16 nicklas 61   private final int group;
4121 22 Sep 16 nicklas 62   private final int other;
4121 22 Sep 16 nicklas 63   
4121 22 Sep 16 nicklas 64   /**
4121 22 Sep 16 nicklas 65     Create a new set of permissions for the owner, group and all other users.
4121 22 Sep 16 nicklas 66     The permission codes are integer values between 0 and 7. Use the
4121 22 Sep 16 nicklas 67     other constants defined in this file.
4121 22 Sep 16 nicklas 68   */
4121 22 Sep 16 nicklas 69   public FilePermission(int user, int group, int other)
4121 22 Sep 16 nicklas 70   {
4121 22 Sep 16 nicklas 71     this.user = user & 7;
4121 22 Sep 16 nicklas 72     this.group = group & 7;
4121 22 Sep 16 nicklas 73     this.other = other & 7;
4121 22 Sep 16 nicklas 74   }
4121 22 Sep 16 nicklas 75
4121 22 Sep 16 nicklas 76   /**
4121 22 Sep 16 nicklas 77     Get the user (owner) permission.
4121 22 Sep 16 nicklas 78   */
4121 22 Sep 16 nicklas 79   public int getUserPermission()
4121 22 Sep 16 nicklas 80   {
4121 22 Sep 16 nicklas 81     return user;
4121 22 Sep 16 nicklas 82   }
4121 22 Sep 16 nicklas 83   
4121 22 Sep 16 nicklas 84   /**
4121 22 Sep 16 nicklas 85     Get the group permission.
4121 22 Sep 16 nicklas 86   */
4121 22 Sep 16 nicklas 87   public int getGroupPermission()
4121 22 Sep 16 nicklas 88   {
4121 22 Sep 16 nicklas 89     return group;
4121 22 Sep 16 nicklas 90   }
4121 22 Sep 16 nicklas 91   
4121 22 Sep 16 nicklas 92   /**
4121 22 Sep 16 nicklas 93     Get the permission for other users.
4121 22 Sep 16 nicklas 94   */
4121 22 Sep 16 nicklas 95   public int getOtherPermission()
4121 22 Sep 16 nicklas 96   {
4121 22 Sep 16 nicklas 97     return other;
4121 22 Sep 16 nicklas 98   }
4121 22 Sep 16 nicklas 99   
4121 22 Sep 16 nicklas 100   /**
4121 22 Sep 16 nicklas 101     Get the combined permissions.
4121 22 Sep 16 nicklas 102   */
4121 22 Sep 16 nicklas 103   public int getPermissions()
4121 22 Sep 16 nicklas 104   {
4121 22 Sep 16 nicklas 105     return user * 64 + group * 8 + other;
4121 22 Sep 16 nicklas 106   }
4338 07 Feb 17 nicklas 107   
4338 07 Feb 17 nicklas 108   /**
4338 07 Feb 17 nicklas 109     Get the octal permission representation to set in 'chmod' command.
4338 07 Feb 17 nicklas 110     @since 1.1
4338 07 Feb 17 nicklas 111   */
4338 07 Feb 17 nicklas 112   public String chmod()
4338 07 Feb 17 nicklas 113   {
4338 07 Feb 17 nicklas 114     StringBuilder sb = new StringBuilder();
4338 07 Feb 17 nicklas 115     sb.append("0");
4338 07 Feb 17 nicklas 116     sb.append(user);
4338 07 Feb 17 nicklas 117     sb.append(group);
4338 07 Feb 17 nicklas 118     sb.append(other);
4338 07 Feb 17 nicklas 119     return sb.toString();
4338 07 Feb 17 nicklas 120   }
4338 07 Feb 17 nicklas 121   
4338 07 Feb 17 nicklas 122   /**
4338 07 Feb 17 nicklas 123     Get the octal permission representation to set in 'umask' command.
4338 07 Feb 17 nicklas 124     @since 1.1
4338 07 Feb 17 nicklas 125   */
4338 07 Feb 17 nicklas 126   public String umask()
4338 07 Feb 17 nicklas 127   {
4338 07 Feb 17 nicklas 128     StringBuilder sb = new StringBuilder();
4338 07 Feb 17 nicklas 129     sb.append("0");
4338 07 Feb 17 nicklas 130     sb.append(7-user);
4338 07 Feb 17 nicklas 131     sb.append(7-group);
4338 07 Feb 17 nicklas 132     sb.append(7-other);
4338 07 Feb 17 nicklas 133     return sb.toString();
4338 07 Feb 17 nicklas 134   }
4338 07 Feb 17 nicklas 135   
4121 22 Sep 16 nicklas 136   @Override
4121 22 Sep 16 nicklas 137   public boolean equals(Object obj) 
4121 22 Sep 16 nicklas 138   {
4121 22 Sep 16 nicklas 139     if (obj == null) return false;
4121 22 Sep 16 nicklas 140     if (!obj.getClass().equals(this.getClass())) return false;
4121 22 Sep 16 nicklas 141     FilePermission fp = (FilePermission)obj;
4121 22 Sep 16 nicklas 142     return user == fp.user && group == fp.group && other == fp.other;
4121 22 Sep 16 nicklas 143   }
4121 22 Sep 16 nicklas 144
4121 22 Sep 16 nicklas 145   @Override
4121 22 Sep 16 nicklas 146   public int hashCode() 
4121 22 Sep 16 nicklas 147   {
4121 22 Sep 16 nicklas 148     return getPermissions();
4121 22 Sep 16 nicklas 149   }
4121 22 Sep 16 nicklas 150   
4121 22 Sep 16 nicklas 151   
4121 22 Sep 16 nicklas 152 }