1dfb59d50631968ab1a13002ea5421ece93169851chrismair/* 2dfb59d50631968ab1a13002ea5421ece93169851chrismair * Copyright 2008 the original author or authors. 3dfb59d50631968ab1a13002ea5421ece93169851chrismair * 4dfb59d50631968ab1a13002ea5421ece93169851chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5dfb59d50631968ab1a13002ea5421ece93169851chrismair * you may not use this file except in compliance with the License. 6dfb59d50631968ab1a13002ea5421ece93169851chrismair * You may obtain a copy of the License at 7dfb59d50631968ab1a13002ea5421ece93169851chrismair * 8dfb59d50631968ab1a13002ea5421ece93169851chrismair * http://www.apache.org/licenses/LICENSE-2.0 9dfb59d50631968ab1a13002ea5421ece93169851chrismair * 10dfb59d50631968ab1a13002ea5421ece93169851chrismair * Unless required by applicable law or agreed to in writing, software 11dfb59d50631968ab1a13002ea5421ece93169851chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12dfb59d50631968ab1a13002ea5421ece93169851chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dfb59d50631968ab1a13002ea5421ece93169851chrismair * See the License for the specific language governing permissions and 14dfb59d50631968ab1a13002ea5421ece93169851chrismair * limitations under the License. 15dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 16dfb59d50631968ab1a13002ea5421ece93169851chrismairpackage org.mockftpserver.fake.filesystem; 17dfb59d50631968ab1a13002ea5421ece93169851chrismair 18dfb59d50631968ab1a13002ea5421ece93169851chrismairimport org.mockftpserver.core.util.Assert; 19dfb59d50631968ab1a13002ea5421ece93169851chrismair 20dfb59d50631968ab1a13002ea5421ece93169851chrismairimport java.util.Date; 21dfb59d50631968ab1a13002ea5421ece93169851chrismair 22dfb59d50631968ab1a13002ea5421ece93169851chrismair/** 23dfb59d50631968ab1a13002ea5421ece93169851chrismair * The abstract superclass for concrete file system entry classes representing files and directories. 24dfb59d50631968ab1a13002ea5421ece93169851chrismair * 25dfb59d50631968ab1a13002ea5421ece93169851chrismair * @author Chris Mair 26dfb59d50631968ab1a13002ea5421ece93169851chrismair * @version $Revision$ - $Date$ 27dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 28dfb59d50631968ab1a13002ea5421ece93169851chrismairpublic abstract class AbstractFileSystemEntry implements FileSystemEntry { 29dfb59d50631968ab1a13002ea5421ece93169851chrismair 30dfb59d50631968ab1a13002ea5421ece93169851chrismair private String path; 31dfb59d50631968ab1a13002ea5421ece93169851chrismair private boolean pathLocked = false; 32dfb59d50631968ab1a13002ea5421ece93169851chrismair 33dfb59d50631968ab1a13002ea5421ece93169851chrismair private Date lastModified; 34dfb59d50631968ab1a13002ea5421ece93169851chrismair private String owner; 35dfb59d50631968ab1a13002ea5421ece93169851chrismair private String group; 36dfb59d50631968ab1a13002ea5421ece93169851chrismair 37dfb59d50631968ab1a13002ea5421ece93169851chrismair public Date getLastModified() { 38dfb59d50631968ab1a13002ea5421ece93169851chrismair return lastModified; 39dfb59d50631968ab1a13002ea5421ece93169851chrismair } 40dfb59d50631968ab1a13002ea5421ece93169851chrismair 41dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setLastModified(Date lastModified) { 42dfb59d50631968ab1a13002ea5421ece93169851chrismair this.lastModified = lastModified; 43dfb59d50631968ab1a13002ea5421ece93169851chrismair } 44dfb59d50631968ab1a13002ea5421ece93169851chrismair 45dfb59d50631968ab1a13002ea5421ece93169851chrismair public String getOwner() { 46dfb59d50631968ab1a13002ea5421ece93169851chrismair return owner; 47dfb59d50631968ab1a13002ea5421ece93169851chrismair } 48dfb59d50631968ab1a13002ea5421ece93169851chrismair 49dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setOwner(String owner) { 50dfb59d50631968ab1a13002ea5421ece93169851chrismair this.owner = owner; 51dfb59d50631968ab1a13002ea5421ece93169851chrismair } 52dfb59d50631968ab1a13002ea5421ece93169851chrismair 53dfb59d50631968ab1a13002ea5421ece93169851chrismair public String getGroup() { 54dfb59d50631968ab1a13002ea5421ece93169851chrismair return group; 55dfb59d50631968ab1a13002ea5421ece93169851chrismair } 56dfb59d50631968ab1a13002ea5421ece93169851chrismair 57dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setGroup(String group) { 58dfb59d50631968ab1a13002ea5421ece93169851chrismair this.group = group; 59dfb59d50631968ab1a13002ea5421ece93169851chrismair } 60dfb59d50631968ab1a13002ea5421ece93169851chrismair 61dfb59d50631968ab1a13002ea5421ece93169851chrismair public Permissions getPermissions() { 62dfb59d50631968ab1a13002ea5421ece93169851chrismair return permissions; 63dfb59d50631968ab1a13002ea5421ece93169851chrismair } 64dfb59d50631968ab1a13002ea5421ece93169851chrismair 65dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setPermissions(Permissions permissions) { 66dfb59d50631968ab1a13002ea5421ece93169851chrismair this.permissions = permissions; 67dfb59d50631968ab1a13002ea5421ece93169851chrismair } 68dfb59d50631968ab1a13002ea5421ece93169851chrismair 69dfb59d50631968ab1a13002ea5421ece93169851chrismair private Permissions permissions; 70dfb59d50631968ab1a13002ea5421ece93169851chrismair 71dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 72dfb59d50631968ab1a13002ea5421ece93169851chrismair * Construct a new instance without setting its path 73dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 74dfb59d50631968ab1a13002ea5421ece93169851chrismair public AbstractFileSystemEntry() { 75dfb59d50631968ab1a13002ea5421ece93169851chrismair } 76dfb59d50631968ab1a13002ea5421ece93169851chrismair 77dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 78dfb59d50631968ab1a13002ea5421ece93169851chrismair * Construct a new instance with the specified value for its path 79dfb59d50631968ab1a13002ea5421ece93169851chrismair * 80dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param path - the value for path 81dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 82dfb59d50631968ab1a13002ea5421ece93169851chrismair public AbstractFileSystemEntry(String path) { 83dfb59d50631968ab1a13002ea5421ece93169851chrismair this.path = path; 84dfb59d50631968ab1a13002ea5421ece93169851chrismair } 85dfb59d50631968ab1a13002ea5421ece93169851chrismair 86dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 87dfb59d50631968ab1a13002ea5421ece93169851chrismair * @return the path for this entry 88dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 89dfb59d50631968ab1a13002ea5421ece93169851chrismair public String getPath() { 90dfb59d50631968ab1a13002ea5421ece93169851chrismair return path; 91dfb59d50631968ab1a13002ea5421ece93169851chrismair } 92dfb59d50631968ab1a13002ea5421ece93169851chrismair 93dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 94dfb59d50631968ab1a13002ea5421ece93169851chrismair * @return the file name or directory name (no path) for this entry 95dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 96dfb59d50631968ab1a13002ea5421ece93169851chrismair public String getName() { 97dfb59d50631968ab1a13002ea5421ece93169851chrismair int separatorIndex1 = path.lastIndexOf('/'); 98dfb59d50631968ab1a13002ea5421ece93169851chrismair int separatorIndex2 = path.lastIndexOf('\\'); 99dfb59d50631968ab1a13002ea5421ece93169851chrismair// int separatorIndex = [separatorIndex1, separatorIndex2].max(); 100dfb59d50631968ab1a13002ea5421ece93169851chrismair int separatorIndex = separatorIndex1 > separatorIndex2 ? separatorIndex1 : separatorIndex2; 101dfb59d50631968ab1a13002ea5421ece93169851chrismair return (separatorIndex == -1) ? path : path.substring(separatorIndex + 1); 102dfb59d50631968ab1a13002ea5421ece93169851chrismair } 103dfb59d50631968ab1a13002ea5421ece93169851chrismair 104dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 105dfb59d50631968ab1a13002ea5421ece93169851chrismair * Set the path for this entry. Throw an exception if pathLocked is true. 106dfb59d50631968ab1a13002ea5421ece93169851chrismair * 107dfb59d50631968ab1a13002ea5421ece93169851chrismair * @param path - the new path value 108dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 109dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setPath(String path) { 110dfb59d50631968ab1a13002ea5421ece93169851chrismair Assert.isFalse(pathLocked, "path is locked"); 111dfb59d50631968ab1a13002ea5421ece93169851chrismair this.path = path; 112dfb59d50631968ab1a13002ea5421ece93169851chrismair } 113dfb59d50631968ab1a13002ea5421ece93169851chrismair 114dfb59d50631968ab1a13002ea5421ece93169851chrismair public void lockPath() { 115dfb59d50631968ab1a13002ea5421ece93169851chrismair this.pathLocked = true; 116dfb59d50631968ab1a13002ea5421ece93169851chrismair } 117dfb59d50631968ab1a13002ea5421ece93169851chrismair 118dfb59d50631968ab1a13002ea5421ece93169851chrismair public void setPermissionsFromString(String permissionsString) { 119dfb59d50631968ab1a13002ea5421ece93169851chrismair this.permissions = new Permissions(permissionsString); 120dfb59d50631968ab1a13002ea5421ece93169851chrismair } 121dfb59d50631968ab1a13002ea5421ece93169851chrismair 122dfb59d50631968ab1a13002ea5421ece93169851chrismair /** 123dfb59d50631968ab1a13002ea5421ece93169851chrismair * Abstract method -- must be implemented within concrete subclasses 124dfb59d50631968ab1a13002ea5421ece93169851chrismair * 125dfb59d50631968ab1a13002ea5421ece93169851chrismair * @return true if this file system entry represents a directory 126dfb59d50631968ab1a13002ea5421ece93169851chrismair */ 127dfb59d50631968ab1a13002ea5421ece93169851chrismair public abstract boolean isDirectory(); 128dfb59d50631968ab1a13002ea5421ece93169851chrismair 129dfb59d50631968ab1a13002ea5421ece93169851chrismair} 130