Permissions.java revision 2a0a3f946dba517a01cc26278f905156857c9c91
137259d8cbd6487bf94bb12782090f866812ac3a4chrismair/* 237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Copyright 2008 the original author or authors. 3c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * you may not use this file except in compliance with the License. 637259d8cbd6487bf94bb12782090f866812ac3a4chrismair * You may obtain a copy of the License at 7c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 837259d8cbd6487bf94bb12782090f866812ac3a4chrismair * http://www.apache.org/licenses/LICENSE-2.0 9c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 1037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Unless required by applicable law or agreed to in writing, software 1137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1337259d8cbd6487bf94bb12782090f866812ac3a4chrismair * See the License for the specific language governing permissions and 1437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * limitations under the License. 1537259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 16c2864b876b5a3892a9332b192799a35a9a9eed05chrismairpackage org.mockftpserver.fake.filesystem; 17c2864b876b5a3892a9332b192799a35a9a9eed05chrismair 18c2864b876b5a3892a9332b192799a35a9a9eed05chrismairimport org.mockftpserver.core.util.Assert; 1937259d8cbd6487bf94bb12782090f866812ac3a4chrismair 2037259d8cbd6487bf94bb12782090f866812ac3a4chrismair/** 2137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Represents and encapsulates the read/write/execute permissions for a file or directory. 2235a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * This is conceptually (and somewhat loosely) based on the permissions flags within the Unix 2335a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * file system. An instance of this class is immutable. 2437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 2537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @author Chris Mair 262a0a3f946dba517a01cc26278f905156857c9c91chrismair * @version $Revision$ - $Date$ 2737259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 28c2864b876b5a3892a9332b192799a35a9a9eed05chrismairpublic class Permissions { 29c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public static final Permissions ALL = new Permissions("rwxrwxrwx"); 30c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public static final Permissions NONE = new Permissions("---------"); 31c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public static final Permissions DEFAULT = ALL; 3237259d8cbd6487bf94bb12782090f866812ac3a4chrismair 33c2864b876b5a3892a9332b192799a35a9a9eed05chrismair private static final char READ_CHAR = 'r'; 34c2864b876b5a3892a9332b192799a35a9a9eed05chrismair private static final char WRITE_CHAR = 'w'; 35c2864b876b5a3892a9332b192799a35a9a9eed05chrismair private static final char EXECUTE_CHAR = 'x'; 3637259d8cbd6487bf94bb12782090f866812ac3a4chrismair 37c2864b876b5a3892a9332b192799a35a9a9eed05chrismair private String rwxString; 3837259d8cbd6487bf94bb12782090f866812ac3a4chrismair 3937259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 4037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Costruct a new instance for the specified read/write/execute specification String 41c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 4237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @param rwxString - the read/write/execute specification String; must be 9 characters long, with chars 43c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * at index 0,3,6 == '-' or 'r', chars at index 1,4,7 == '-' or 'w' and chars at index 2,5,8 == '-' or 'x'. 4437259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 45c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public Permissions(String rwxString) { 46c2864b876b5a3892a9332b192799a35a9a9eed05chrismair Assert.isTrue(rwxString.length() == 9, "The permissions string must be exactly 9 characters"); 47c2864b876b5a3892a9332b192799a35a9a9eed05chrismair final String RWX = "(-|r)(-|w)(-|x)"; 48c2864b876b5a3892a9332b192799a35a9a9eed05chrismair final String PATTERN = RWX + RWX + RWX; 49c2864b876b5a3892a9332b192799a35a9a9eed05chrismair Assert.isTrue(rwxString.matches(PATTERN), "The permissions string must match [" + PATTERN + "]"); 50c2864b876b5a3892a9332b192799a35a9a9eed05chrismair this.rwxString = rwxString; 5137259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 5237259d8cbd6487bf94bb12782090f866812ac3a4chrismair 5337259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 5437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Return the read/write/execute specification String representing the set of permissions. For example: 5537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * "rwxrwxrwx" or "rw-r-----". 56c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 5737259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return the String containing 9 characters that represent the read/write/execute permissions. 5837259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 59c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public String asRwxString() { 60c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString; 6137259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 6237259d8cbd6487bf94bb12782090f866812ac3a4chrismair 6337259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 6435a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * @return the RWX string for this instance 6535a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair */ 66c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public String getRwxString() { 67c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString; 6835a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair } 6935a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair 7035a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair /** 7181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * @see java.lang.Object#equals(java.lang.Object) 7281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair */ 73c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean equals(Object object) { 74c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return (object != null) 75c2864b876b5a3892a9332b192799a35a9a9eed05chrismair && (object.getClass() == this.getClass()) 76c2864b876b5a3892a9332b192799a35a9a9eed05chrismair && (object.hashCode() == hashCode()); 7781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 7881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 7981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair /** 8081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * Return the hash code for this object. 81c2864b876b5a3892a9332b192799a35a9a9eed05chrismair * 8281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * @see java.lang.Object#hashCode() 8381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair */ 84c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public int hashCode() { 85c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.hashCode(); 8681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 8781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 8881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair /** 8937259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has read permission 9037259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 91c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canUserRead() { 92c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(0) == READ_CHAR; 9337259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 9437259d8cbd6487bf94bb12782090f866812ac3a4chrismair 9537259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 9637259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has write permission 9737259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 98c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canUserWrite() { 99c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(1) == WRITE_CHAR; 10037259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 10137259d8cbd6487bf94bb12782090f866812ac3a4chrismair 10237259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 10337259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has execute permission 10437259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 105c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canUserExecute() { 106c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(2) == EXECUTE_CHAR; 10737259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 10837259d8cbd6487bf94bb12782090f866812ac3a4chrismair 10937259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 11037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has read permission 11137259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 112c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canGroupRead() { 113c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(3) == READ_CHAR; 11437259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 11537259d8cbd6487bf94bb12782090f866812ac3a4chrismair 11637259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 11737259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has write permission 11837259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 119c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canGroupWrite() { 120c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(4) == WRITE_CHAR; 12137259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 12237259d8cbd6487bf94bb12782090f866812ac3a4chrismair 12337259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 12437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has execute permission 12537259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 126c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canGroupExecute() { 127c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(5) == EXECUTE_CHAR; 12837259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 12937259d8cbd6487bf94bb12782090f866812ac3a4chrismair 13037259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 13137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has read permission 13237259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 133c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canWorldRead() { 134c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(6) == READ_CHAR; 13537259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 13637259d8cbd6487bf94bb12782090f866812ac3a4chrismair 13737259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 13837259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has write permission 13937259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 140c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canWorldWrite() { 141c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(7) == WRITE_CHAR; 14237259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 14337259d8cbd6487bf94bb12782090f866812ac3a4chrismair 14437259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 14537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has execute permission 14637259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 147c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public boolean canWorldExecute() { 148c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return rwxString.charAt(8) == EXECUTE_CHAR; 14937259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 15037259d8cbd6487bf94bb12782090f866812ac3a4chrismair 15137259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 15237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return the String representation of this object. 15337259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 154c2864b876b5a3892a9332b192799a35a9a9eed05chrismair public String toString() { 155c2864b876b5a3892a9332b192799a35a9a9eed05chrismair return "Permissions[" + rwxString + "]"; 15637259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 15737259d8cbd6487bf94bb12782090f866812ac3a4chrismair}