151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage sun.net.ftp; 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Date; 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.HashMap; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A {@code FtpDirEntry} is a class agregating all the information that the FTP client 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * can gather from the server by doing a {@code LST} (or {@code NLST}) command and 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parsing the output. It will typically contain the name, type, size, last modification 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * time, owner and group of the file, although some of these could be unavailable 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * due to specific FTP server limitations. 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see sun.net.ftp.FtpDirParser 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.7 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class FtpDirEntry { 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public enum Type { 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski FILE, DIR, PDIR, CDIR, LINK 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski }; 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public enum Permission { 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski USER(0), GROUP(1), OTHERS(2); 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int value; 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Permission(int v) { 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski value = v; 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski }; 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final String name; 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private String user = null; 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private String group = null; 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private long size = -1; 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private java.util.Date created = null; 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private java.util.Date lastModified = null; 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private Type type = Type.FILE; 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private boolean[][] permissions = null; 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private HashMap<String, String> facts = new HashMap<String, String>(); 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private FtpDirEntry() { 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski name = null; 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates an FtpDirEntry instance with only the name being set. 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param name The name of the file 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry(String name) { 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.name = name; 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the name of the remote file. 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a {@code String} containing the name of the remote file. 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getName() { 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return name; 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the user name of the owner of the file as returned by the FTP 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * server, if provided. This could be a name or a user id (number). 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a {@code String} containing the user name or 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@code null} if that information is not available. 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getUser() { 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return user; 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the user name of the owner of the file. Intended mostly to be 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * used from inside a {@link java.net.FtpDirParser} implementation. 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param user The user name of the owner of the file, or {@code null} 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if that information is not available. 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setUser(String user) { 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.user = user; 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the group name of the file as returned by the FTP 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * server, if provided. This could be a name or a group id (number). 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a {@code String} containing the group name or 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@code null} if that information is not available. 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getGroup() { 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return group; 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the name of the group to which the file belong. Intended mostly to be 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * used from inside a {@link java.net.FtpDirParser} implementation. 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param group The name of the group to which the file belong, or {@code null} 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if that information is not available. 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setGroup(String group) { 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.group = group; 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the size of the remote file as it was returned by the FTP 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * server, if provided. 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the size of the file or -1 if that information is not available. 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public long getSize() { 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return size; 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the size of that file. Intended mostly to be used from inside an 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@link java.net.FtpDirParser} implementation. 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param size The size, in bytes, of that file. or -1 if unknown. 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setSize(long size) { 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.size = size; 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the type of the remote file as it was returned by the FTP 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * server, if provided. 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * It returns a FtpDirEntry.Type enum and the values can be: 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * - FtpDirEntry.Type.FILE for a normal file 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * - FtpDirEntry.Type.DIR for a directory 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * - FtpDirEntry.Type.LINK for a symbolic link 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a {@code FtpDirEntry.Type} describing the type of the file 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or {@code null} if that information is not available. 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Type getType() { 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return type; 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the type of the file. Intended mostly to be used from inside an 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@link java.net.FtpDirParser} implementation. 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param type the type of this file or {@code null} if that information 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is not available. 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setType(Type type) { 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.type = type; 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the last modification time of the remote file as it was returned 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by the FTP server, if provided, {@code null} otherwise. 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a <code>Date</code> representing the last time the file was 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * modified on the server, or {@code null} if that 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * information is not available. 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public java.util.Date getLastModified() { 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this.lastModified; 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the last modification time of the file. Intended mostly to be used 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * from inside an {@link java.net.FtpDirParser} implementation. 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param lastModified The Date representing the last modification time, or 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@code null} if that information is not available. 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setLastModified(Date lastModified) { 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.lastModified = lastModified; 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns whether read access is granted for a specific permission. 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param p the Permission (user, group, others) to check. 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return {@code true} if read access is granted. 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean canRead(Permission p) { 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (permissions != null) { 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return permissions[p.value][0]; 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return false; 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns whether write access is granted for a specific permission. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param p the Permission (user, group, others) to check. 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return {@code true} if write access is granted. 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean canWrite(Permission p) { 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (permissions != null) { 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return permissions[p.value][1]; 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return false; 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns whether execute access is granted for a specific permission. 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param p the Permission (user, group, others) to check. 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return {@code true} if execute access is granted. 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean canExexcute(Permission p) { 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (permissions != null) { 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return permissions[p.value][2]; 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return false; 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the permissions for that file. Intended mostly to be used 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * from inside an {@link java.net.FtpDirParser} implementation. 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The permissions array is a 3x3 {@code boolean} array, the first index being 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the User, group or owner (0, 1 and 2 respectively) while the second 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * index is read, write or execute (0, 1 and 2 respectively again). 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>E.G.: {@code permissions[1][2]} is the group/execute permission.</p> 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param permissions a 3x3 {@code boolean} array 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this {@code FtpDirEntry} 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setPermissions(boolean[][] permissions) { 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.permissions = permissions; 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Adds a 'fact', as defined in RFC 3659, to the list of facts of this file. 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Intended mostly to be used from inside a {@link java.net.FtpDirParser} 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation. 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param fact the name of the fact (e.g. "Media-Type"). It is not case-sensitive. 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param value the value associated with this fact. 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this {@code FtpDirEntry} 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry addFact(String fact, String value) { 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski facts.put(fact.toLowerCase(), value); 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the requested 'fact', as defined in RFC 3659, if available. 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param fact The name of the fact *e.g. "Media-Type"). It is not case sensitive. 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return The value of the fact or, {@code null} if that fact wasn't 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * provided by the server. 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String getFact(String fact) { 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return facts.get(fact.toLowerCase()); 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the creation time of the file, when provided by the server. 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return The Date representing the creation time, or {@code null} 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * if the server didn't provide that information. 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Date getCreated() { 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return created; 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Sets the creation time for that file. Intended mostly to be used from 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * inside a {@link java.net.FtpDirParser} implementation. 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param created the Date representing the creation time for that file, or 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * {@code null} if that information is not available. 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return this FtpDirEntry 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public FtpDirEntry setCreated(Date created) { 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.created = created; 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a string representation of the object. 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The {@code toString} method for class {@code FtpDirEntry} 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * returns a string consisting of the name of the file, followed by its 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * type between brackets, followed by the user and group between 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parenthesis, then size between '{', and, finally, the lastModified of last 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * modification if it's available. 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a string representation of the object. 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski @Override 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String toString() { 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (lastModified == null) { 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return name + " [" + type + "] (" + user + " / " + group + ") " + size; 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return name + " [" + type + "] (" + user + " / " + group + ") {" + size + "} " + java.text.DateFormat.getDateInstance().format(lastModified); 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 332