001 /* 002 * Copyright 2001-2005 The Apache Software Foundation 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.apache.commons.net.ftp; 017 import java.io.Serializable; 018 import java.util.Calendar; 019 020 /*** 021 * The FTPFile class is used to represent information about files stored 022 * on an FTP server. Because there is no standard representation for 023 * file information on FTP servers, it may not always be possible to 024 * extract all the information that can be represented by FTPFile, or 025 * it may even be possible to extract more information. In cases where 026 * more information can be extracted, you will want to subclass FTPFile 027 * and implement your own {@link org.apache.commons.net.ftp.FTPFileListParser} 028 * to extract the information. 029 * However, most FTP servers return file information in a format that 030 * can be completely parsed by 031 * {@link org.apache.commons.net.ftp.DefaultFTPFileListParser} 032 * and stored in FTPFile. 033 * <p> 034 * <p> 035 * @author Daniel F. Savarese 036 * @see FTPFileListParser 037 * @see DefaultFTPFileListParser 038 * @see FTPClient#listFiles 039 ***/ 040 041 public class FTPFile implements Serializable 042 { 043 /** A constant indicating an FTPFile is a file. ***/ 044 public static final int FILE_TYPE = 0; 045 /** A constant indicating an FTPFile is a directory. ***/ 046 public static final int DIRECTORY_TYPE = 1; 047 /** A constant indicating an FTPFile is a symbolic link. ***/ 048 public static final int SYMBOLIC_LINK_TYPE = 2; 049 /** A constant indicating an FTPFile is of unknown type. ***/ 050 public static final int UNKNOWN_TYPE = 3; 051 052 /** A constant indicating user access permissions. ***/ 053 public static final int USER_ACCESS = 0; 054 /** A constant indicating group access permissions. ***/ 055 public static final int GROUP_ACCESS = 1; 056 /** A constant indicating world access permissions. ***/ 057 public static final int WORLD_ACCESS = 2; 058 059 /** A constant indicating file/directory read permission. ***/ 060 public static final int READ_PERMISSION = 0; 061 /** A constant indicating file/directory write permission. ***/ 062 public static final int WRITE_PERMISSION = 1; 063 /** 064 * A constant indicating file execute permission or directory listing 065 * permission. 066 ***/ 067 public static final int EXECUTE_PERMISSION = 2; 068 069 int _type, _hardLinkCount; 070 long _size; 071 String _rawListing, _user, _group, _name, _link; 072 Calendar _date; 073 boolean[] _permissions[]; 074 075 /*** Creates an empty FTPFile. ***/ 076 public FTPFile() 077 { 078 _permissions = new boolean[3][3]; 079 _rawListing = null; 080 _type = UNKNOWN_TYPE; 081 _hardLinkCount = 0; 082 _size = 0; 083 _user = null; 084 _group = null; 085 _date = null; 086 _name = null; 087 } 088 089 090 /*** 091 * Set the original FTP server raw listing from which the FTPFile was 092 * created. 093 * <p> 094 * @param rawListing The raw FTP server listing. 095 ***/ 096 public void setRawListing(String rawListing) 097 { 098 _rawListing = rawListing; 099 } 100 101 /*** 102 * Get the original FTP server raw listing used to initialize the FTPFile. 103 * <p> 104 * @return The original FTP server raw listing used to initialize the 105 * FTPFile. 106 ***/ 107 public String getRawListing() 108 { 109 return _rawListing; 110 } 111 112 113 /*** 114 * Determine if the file is a directory. 115 * <p> 116 * @return True if the file is of type <code>DIRECTORY_TYPE</code>, false if 117 * not. 118 ***/ 119 public boolean isDirectory() 120 { 121 return (_type == DIRECTORY_TYPE); 122 } 123 124 /*** 125 * Determine if the file is a regular file. 126 * <p> 127 * @return True if the file is of type <code>FILE_TYPE</code>, false if 128 * not. 129 ***/ 130 public boolean isFile() 131 { 132 return (_type == FILE_TYPE); 133 } 134 135 /*** 136 * Determine if the file is a symbolic link. 137 * <p> 138 * @return True if the file is of type <code>UNKNOWN_TYPE</code>, false if 139 * not. 140 ***/ 141 public boolean isSymbolicLink() 142 { 143 return (_type == SYMBOLIC_LINK_TYPE); 144 } 145 146 /*** 147 * Determine if the type of the file is unknown. 148 * <p> 149 * @return True if the file is of type <code>UNKNOWN_TYPE</code>, false if 150 * not. 151 ***/ 152 public boolean isUnknown() 153 { 154 return (_type == UNKNOWN_TYPE); 155 } 156 157 158 /*** 159 * Set the type of the file (<code>DIRECTORY_TYPE</code>, 160 * <code>FILE_TYPE</code>, etc.). 161 * <p> 162 * @param type The integer code representing the type of the file. 163 ***/ 164 public void setType(int type) 165 { 166 _type = type; 167 } 168 169 170 /*** 171 * Return the type of the file (one of the <code>_TYPE</code> constants), 172 * e.g., if it is a directory, a regular file, or a symbolic link. 173 * <p> 174 * @return The type of the file. 175 ***/ 176 public int getType() 177 { 178 return _type; 179 } 180 181 182 /*** 183 * Set the name of the file. 184 * <p> 185 * @param name The name of the file. 186 ***/ 187 public void setName(String name) 188 { 189 _name = name; 190 } 191 192 /*** 193 * Return the name of the file. 194 * <p> 195 * @return The name of the file. 196 ***/ 197 public String getName() 198 { 199 return _name; 200 } 201 202 203 /** 204 * Set the file size in bytes. 205 * @param size The file size in bytes. 206 */ 207 public void setSize(long size) 208 { 209 _size = size; 210 } 211 212 213 /*** 214 * Return the file size in bytes. 215 * <p> 216 * @return The file size in bytes. 217 ***/ 218 public long getSize() 219 { 220 return _size; 221 } 222 223 224 /*** 225 * Set the number of hard links to this file. This is not to be 226 * confused with symbolic links. 227 * <p> 228 * @param links The number of hard links to this file. 229 ***/ 230 public void setHardLinkCount(int links) 231 { 232 _hardLinkCount = links; 233 } 234 235 236 /*** 237 * Return the number of hard links to this file. This is not to be 238 * confused with symbolic links. 239 * <p> 240 * @return The number of hard links to this file. 241 ***/ 242 public int getHardLinkCount() 243 { 244 return _hardLinkCount; 245 } 246 247 248 /*** 249 * Set the name of the group owning the file. This may be 250 * a string representation of the group number. 251 * <p> 252 * @param group The name of the group owning the file. 253 ***/ 254 public void setGroup(String group) 255 { 256 _group = group; 257 } 258 259 260 /*** 261 * Returns the name of the group owning the file. Sometimes this will be 262 * a string representation of the group number. 263 * <p> 264 * @return The name of the group owning the file. 265 ***/ 266 public String getGroup() 267 { 268 return _group; 269 } 270 271 272 /*** 273 * Set the name of the user owning the file. This may be 274 * a string representation of the user number; 275 * <p> 276 * @param user The name of the user owning the file. 277 ***/ 278 public void setUser(String user) 279 { 280 _user = user; 281 } 282 283 /*** 284 * Returns the name of the user owning the file. Sometimes this will be 285 * a string representation of the user number. 286 * <p> 287 * @return The name of the user owning the file. 288 ***/ 289 public String getUser() 290 { 291 return _user; 292 } 293 294 295 /*** 296 * If the FTPFile is a symbolic link, use this method to set the name of the 297 * file being pointed to by the symbolic link. 298 * <p> 299 * @param link The file pointed to by the symbolic link. 300 ***/ 301 public void setLink(String link) 302 { 303 _link = link; 304 } 305 306 307 /*** 308 * If the FTPFile is a symbolic link, this method returns the name of the 309 * file being pointed to by the symbolic link. Otherwise it returns null. 310 * <p> 311 * @return The file pointed to by the symbolic link (null if the FTPFile 312 * is not a symbolic link). 313 ***/ 314 public String getLink() 315 { 316 return _link; 317 } 318 319 320 /*** 321 * Set the file timestamp. This usually the last modification time. 322 * The parameter is not cloned, so do not alter its value after calling 323 * this method. 324 * <p> 325 * @param date A Calendar instance representing the file timestamp. 326 ***/ 327 public void setTimestamp(Calendar date) 328 { 329 _date = date; 330 } 331 332 333 /*** 334 * Returns the file timestamp. This usually the last modification time. 335 * <p> 336 * @return A Calendar instance representing the file timestamp. 337 ***/ 338 public Calendar getTimestamp() 339 { 340 return _date; 341 } 342 343 344 /*** 345 * Set if the given access group (one of the <code> _ACCESS </code> 346 * constants) has the given access permission (one of the 347 * <code> _PERMISSION </code> constants) to the file. 348 * <p> 349 * @param access The access group (one of the <code> _ACCESS </code> 350 * constants) 351 * @param permission The access permission (one of the 352 * <code> _PERMISSION </code> constants) 353 * @param value True if permission is allowed, false if not. 354 ***/ 355 public void setPermission(int access, int permission, boolean value) 356 { 357 _permissions[access][permission] = value; 358 } 359 360 361 /*** 362 * Determines if the given access group (one of the <code> _ACCESS </code> 363 * constants) has the given access permission (one of the 364 * <code> _PERMISSION </code> constants) to the file. 365 * <p> 366 * @param access The access group (one of the <code> _ACCESS </code> 367 * constants) 368 * @param permission The access permission (one of the 369 * <code> _PERMISSION </code> constants) 370 ***/ 371 public boolean hasPermission(int access, int permission) 372 { 373 return _permissions[access][permission]; 374 } 375 376 377 /*** 378 * Returns a string representation of the FTPFile information. This 379 * will be the raw FTP server listing that was used to initialize the 380 * FTPFile instance. 381 * <p> 382 * @return A string representation of the FTPFile information. 383 ***/ 384 public String toString() 385 { 386 return _rawListing; 387 } 388 389 }