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