Permissions.java revision 35a92abff87b74147a232dc55cf1b3ea0f4d0663
137259d8cbd6487bf94bb12782090f866812ac3a4chrismair/* 237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Copyright 2008 the original author or authors. 337259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 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 737259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 837259d8cbd6487bf94bb12782090f866812ac3a4chrismair * http://www.apache.org/licenses/LICENSE-2.0 937259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 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 */ 1637259d8cbd6487bf94bb12782090f866812ac3a4chrismairpackage org.mockftpserver.fake.filesystem 1737259d8cbd6487bf94bb12782090f866812ac3a4chrismair 1837259d8cbd6487bf94bb12782090f866812ac3a4chrismair/** 1937259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Represents and encapsulates the read/write/execute permissions for a file or directory. 2035a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * This is conceptually (and somewhat loosely) based on the permissions flags within the Unix 2135a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * file system. An instance of this class is immutable. 2237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 2337259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @version $Revision: 86 $ - $Date: 2008-07-23 21:16:27 -0400 (Wed, 23 Jul 2008) $ 2437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * 2537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @author Chris Mair 2637259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 2737259d8cbd6487bf94bb12782090f866812ac3a4chrismairclass Permissions { 2881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair public static final ALL = new Permissions('rwxrwxrwx') 2981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair public static final NONE = new Permissions('---------') 3081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair public static final DEFAULT = ALL 3137259d8cbd6487bf94bb12782090f866812ac3a4chrismair 3237259d8cbd6487bf94bb12782090f866812ac3a4chrismair static final READ_CHAR = 'r' 3337259d8cbd6487bf94bb12782090f866812ac3a4chrismair static final WRITE_CHAR = 'w' 3437259d8cbd6487bf94bb12782090f866812ac3a4chrismair static final EXECUTE_CHAR = 'x' 3537259d8cbd6487bf94bb12782090f866812ac3a4chrismair 3635a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair private String rwxString 3737259d8cbd6487bf94bb12782090f866812ac3a4chrismair 3837259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 3937259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Costruct a new instance for the specified read/write/execute specification String 4037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @param rwxString - the read/write/execute specification String; must be 9 characters long, with chars 4137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * at index 0,3,6 == '-' or 'r', chars at index 1,4,7 == '-' or 'w' and chars at index 2,5,8 == '-' or 'x'. 4237259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 4337259d8cbd6487bf94bb12782090f866812ac3a4chrismair Permissions(String rwxString) { 4437259d8cbd6487bf94bb12782090f866812ac3a4chrismair assert rwxString.size() == 9 4537259d8cbd6487bf94bb12782090f866812ac3a4chrismair assert rwxString ==~ /(-|r)(-|w)(-|x)/ * 3 4637259d8cbd6487bf94bb12782090f866812ac3a4chrismair this.rwxString = rwxString 4737259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 4837259d8cbd6487bf94bb12782090f866812ac3a4chrismair 4937259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 5037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * Return the read/write/execute specification String representing the set of permissions. For example: 5137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * "rwxrwxrwx" or "rw-r-----". 5237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return the String containing 9 characters that represent the read/write/execute permissions. 5337259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 5437259d8cbd6487bf94bb12782090f866812ac3a4chrismair String asRwxString() { 5537259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString 5637259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 5737259d8cbd6487bf94bb12782090f866812ac3a4chrismair 5837259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 5935a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair * @return the RWX string for this instance 6035a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair */ 6135a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair String getRwxString() { 6235a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair return rwxString 6335a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair } 6435a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair 6535a92abff87b74147a232dc55cf1b3ea0f4d0663chrismair /** 6681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * @see java.lang.Object#equals(java.lang.Object) 6781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair */ 6881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair boolean equals(Object object) { 6981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair (object 7081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair && object.class == this.class 7181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair && object.hashCode() == hashCode()) 7281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 7381c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 7481c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair /** 7581c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * Return the hash code for this object. 7681c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair * @see java.lang.Object#hashCode() 7781c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair */ 7881c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair int hashCode() { 7981c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair return rwxString.hashCode() 8081c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair } 8181c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair 8281c5294b43234e26add70ffd5bfb8fbc31db45c9chrismair /** 8337259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has read permission 8437259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 8537259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canUserRead() { 8637259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[0] == READ_CHAR 8737259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 8837259d8cbd6487bf94bb12782090f866812ac3a4chrismair 8937259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 9037259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has write permission 9137259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 9237259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canUserWrite() { 9337259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[1] == WRITE_CHAR 9437259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 9537259d8cbd6487bf94bb12782090f866812ac3a4chrismair 9637259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 9737259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the user has execute permission 9837259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 9937259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canUserExecute() { 10037259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[2] == EXECUTE_CHAR 10137259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 10237259d8cbd6487bf94bb12782090f866812ac3a4chrismair 10337259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 10437259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has read permission 10537259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 10637259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canGroupRead() { 10737259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[3] == READ_CHAR 10837259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 10937259d8cbd6487bf94bb12782090f866812ac3a4chrismair 11037259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 11137259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has write permission 11237259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 11337259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canGroupWrite() { 11437259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[4] == WRITE_CHAR 11537259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 11637259d8cbd6487bf94bb12782090f866812ac3a4chrismair 11737259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 11837259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the group has execute permission 11937259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 12037259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canGroupExecute() { 12137259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[5] == EXECUTE_CHAR 12237259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 12337259d8cbd6487bf94bb12782090f866812ac3a4chrismair 12437259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 12537259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has read permission 12637259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 12737259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canWorldRead() { 12837259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[6] == READ_CHAR 12937259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 13037259d8cbd6487bf94bb12782090f866812ac3a4chrismair 13137259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 13237259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has write permission 13337259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 13437259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canWorldWrite() { 13537259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[7] == WRITE_CHAR 13637259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 13737259d8cbd6487bf94bb12782090f866812ac3a4chrismair 13837259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 13937259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return true if and only if the world has execute permission 14037259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 14137259d8cbd6487bf94bb12782090f866812ac3a4chrismair boolean canWorldExecute() { 14237259d8cbd6487bf94bb12782090f866812ac3a4chrismair rwxString[8] == EXECUTE_CHAR 14337259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 14437259d8cbd6487bf94bb12782090f866812ac3a4chrismair 14537259d8cbd6487bf94bb12782090f866812ac3a4chrismair /** 14637259d8cbd6487bf94bb12782090f866812ac3a4chrismair * @return the String representation of this object. 14737259d8cbd6487bf94bb12782090f866812ac3a4chrismair */ 14837259d8cbd6487bf94bb12782090f866812ac3a4chrismair String toString() { 14937259d8cbd6487bf94bb12782090f866812ac3a4chrismair "Permissions[$rwxString]" 15037259d8cbd6487bf94bb12782090f866812ac3a4chrismair } 15137259d8cbd6487bf94bb12782090f866812ac3a4chrismair}