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