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