History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/net/ftp/FtpDirEntry.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/net/ftp/FtpDirEntry.java+331−0
@@ -0,0 +1,331 @@
1+/*
2+ * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+package sun.net.ftp;
26+
27+import java.util.Date;
28+import java.util.HashMap;
29+
30+/**
31+ * A {@code FtpDirEntry} is a class agregating all the information that the FTP client
32+ * can gather from the server by doing a {@code LST} (or {@code NLST}) command and
33+ * parsing the output. It will typically contain the name, type, size, last modification
34+ * time, owner and group of the file, although some of these could be unavailable
35+ * due to specific FTP server limitations.
36+ *
37+ * @see sun.net.ftp.FtpDirParser
38+ * @since 1.7
39+ */
40+public class FtpDirEntry {
41+
42+ public enum Type {
43+
44+ FILE, DIR, PDIR, CDIR, LINK
45+ };
46+
47+ public enum Permission {
48+
49+ USER(0), GROUP(1), OTHERS(2);
50+ int value;
51+
52+ Permission(int v) {
53+ value = v;
54+ }
55+ };
56+ private final String name;
57+ private String user = null;
58+ private String group = null;
59+ private long size = -1;
60+ private java.util.Date created = null;
61+ private java.util.Date lastModified = null;
62+ private Type type = Type.FILE;
63+ private boolean[][] permissions = null;
64+ private HashMap<String, String> facts = new HashMap<String, String>();
65+
66+ private FtpDirEntry() {
67+ name = null;
68+ }
69+
70+ /**
71+ * Creates an FtpDirEntry instance with only the name being set.
72+ *
73+ * @param name The name of the file
74+ */
75+ public FtpDirEntry(String name) {
76+ this.name = name;
77+ }
78+
79+ /**
80+ * Returns the name of the remote file.
81+ *
82+ * @return a {@code String} containing the name of the remote file.
83+ */
84+ public String getName() {
85+ return name;
86+ }
87+
88+ /**
89+ * Returns the user name of the owner of the file as returned by the FTP
90+ * server, if provided. This could be a name or a user id (number).
91+ *
92+ * @return a {@code String} containing the user name or
93+ * {@code null} if that information is not available.
94+ */
95+ public String getUser() {
96+ return user;
97+ }
98+
99+ /**
100+ * Sets the user name of the owner of the file. Intended mostly to be
101+ * used from inside a {@link java.net.FtpDirParser} implementation.
102+ *
103+ * @param user The user name of the owner of the file, or {@code null}
104+ * if that information is not available.
105+ * @return this FtpDirEntry
106+ */
107+ public FtpDirEntry setUser(String user) {
108+ this.user = user;
109+ return this;
110+ }
111+
112+ /**
113+ * Returns the group name of the file as returned by the FTP
114+ * server, if provided. This could be a name or a group id (number).
115+ *
116+ * @return a {@code String} containing the group name or
117+ * {@code null} if that information is not available.
118+ */
119+ public String getGroup() {
120+ return group;
121+ }
122+
123+ /**
124+ * Sets the name of the group to which the file belong. Intended mostly to be
125+ * used from inside a {@link java.net.FtpDirParser} implementation.
126+ *
127+ * @param group The name of the group to which the file belong, or {@code null}
128+ * if that information is not available.
129+ * @return this FtpDirEntry
130+ */
131+ public FtpDirEntry setGroup(String group) {
132+ this.group = group;
133+ return this;
134+ }
135+
136+ /**
137+ * Returns the size of the remote file as it was returned by the FTP
138+ * server, if provided.
139+ *
140+ * @return the size of the file or -1 if that information is not available.
141+ */
142+ public long getSize() {
143+ return size;
144+ }
145+
146+ /**
147+ * Sets the size of that file. Intended mostly to be used from inside an
148+ * {@link java.net.FtpDirParser} implementation.
149+ *
150+ * @param size The size, in bytes, of that file. or -1 if unknown.
151+ * @return this FtpDirEntry
152+ */
153+ public FtpDirEntry setSize(long size) {
154+ this.size = size;
155+ return this;
156+ }
157+
158+ /**
159+ * Returns the type of the remote file as it was returned by the FTP
160+ * server, if provided.
161+ * It returns a FtpDirEntry.Type enum and the values can be:
162+ * - FtpDirEntry.Type.FILE for a normal file
163+ * - FtpDirEntry.Type.DIR for a directory
164+ * - FtpDirEntry.Type.LINK for a symbolic link
165+ *
166+ * @return a {@code FtpDirEntry.Type} describing the type of the file
167+ * or {@code null} if that information is not available.
168+ */
169+ public Type getType() {
170+ return type;
171+ }
172+
173+ /**
174+ * Sets the type of the file. Intended mostly to be used from inside an
175+ * {@link java.net.FtpDirParser} implementation.
176+ *
177+ * @param type the type of this file or {@code null} if that information
178+ * is not available.
179+ * @return this FtpDirEntry
180+ */
181+ public FtpDirEntry setType(Type type) {
182+ this.type = type;
183+ return this;
184+ }
185+
186+ /**
187+ * Returns the last modification time of the remote file as it was returned
188+ * by the FTP server, if provided, {@code null} otherwise.
189+ *
190+ * @return a <code>Date</code> representing the last time the file was
191+ * modified on the server, or {@code null} if that
192+ * information is not available.
193+ */
194+ public java.util.Date getLastModified() {
195+ return this.lastModified;
196+ }
197+
198+ /**
199+ * Sets the last modification time of the file. Intended mostly to be used
200+ * from inside an {@link java.net.FtpDirParser} implementation.
201+ *
202+ * @param lastModified The Date representing the last modification time, or
203+ * {@code null} if that information is not available.
204+ * @return this FtpDirEntry
205+ */
206+ public FtpDirEntry setLastModified(Date lastModified) {
207+ this.lastModified = lastModified;
208+ return this;
209+ }
210+
211+ /**
212+ * Returns whether read access is granted for a specific permission.
213+ *
214+ * @param p the Permission (user, group, others) to check.
215+ * @return {@code true} if read access is granted.
216+ */
217+ public boolean canRead(Permission p) {
218+ if (permissions != null) {
219+ return permissions[p.value][0];
220+ }
221+ return false;
222+ }
223+
224+ /**
225+ * Returns whether write access is granted for a specific permission.
226+ *
227+ * @param p the Permission (user, group, others) to check.
228+ * @return {@code true} if write access is granted.
229+ */
230+ public boolean canWrite(Permission p) {
231+ if (permissions != null) {
232+ return permissions[p.value][1];
233+ }
234+ return false;
235+ }
236+
237+ /**
238+ * Returns whether execute access is granted for a specific permission.
239+ *
240+ * @param p the Permission (user, group, others) to check.
241+ * @return {@code true} if execute access is granted.
242+ */
243+ public boolean canExexcute(Permission p) {
244+ if (permissions != null) {
245+ return permissions[p.value][2];
246+ }
247+ return false;
248+ }
249+
250+ /**
251+ * Sets the permissions for that file. Intended mostly to be used
252+ * from inside an {@link java.net.FtpDirParser} implementation.
253+ * The permissions array is a 3x3 {@code boolean} array, the first index being
254+ * the User, group or owner (0, 1 and 2 respectively) while the second
255+ * index is read, write or execute (0, 1 and 2 respectively again).
256+ * <p>E.G.: {@code permissions[1][2]} is the group/execute permission.</p>
257+ *
258+ * @param permissions a 3x3 {@code boolean} array
259+ * @return this {@code FtpDirEntry}
260+ */
261+ public FtpDirEntry setPermissions(boolean[][] permissions) {
262+ this.permissions = permissions;
263+ return this;
264+ }
265+
266+ /**
267+ * Adds a 'fact', as defined in RFC 3659, to the list of facts of this file.
268+ * Intended mostly to be used from inside a {@link java.net.FtpDirParser}
269+ * implementation.
270+ *
271+ * @param fact the name of the fact (e.g. "Media-Type"). It is not case-sensitive.
272+ * @param value the value associated with this fact.
273+ * @return this {@code FtpDirEntry}
274+ */
275+ public FtpDirEntry addFact(String fact, String value) {
276+ facts.put(fact.toLowerCase(), value);
277+ return this;
278+ }
279+
280+ /**
281+ * Returns the requested 'fact', as defined in RFC 3659, if available.
282+ *
283+ * @param fact The name of the fact *e.g. "Media-Type"). It is not case sensitive.
284+ * @return The value of the fact or, {@code null} if that fact wasn't
285+ * provided by the server.
286+ */
287+ public String getFact(String fact) {
288+ return facts.get(fact.toLowerCase());
289+ }
290+
291+ /**
292+ * Returns the creation time of the file, when provided by the server.
293+ *
294+ * @return The Date representing the creation time, or {@code null}
295+ * if the server didn't provide that information.
296+ */
297+ public Date getCreated() {
298+ return created;
299+ }
300+
301+ /**
302+ * Sets the creation time for that file. Intended mostly to be used from
303+ * inside a {@link java.net.FtpDirParser} implementation.
304+ *
305+ * @param created the Date representing the creation time for that file, or
306+ * {@code null} if that information is not available.
307+ * @return this FtpDirEntry
308+ */
309+ public FtpDirEntry setCreated(Date created) {
310+ this.created = created;
311+ return this;
312+ }
313+
314+ /**
315+ * Returns a string representation of the object.
316+ * The {@code toString} method for class {@code FtpDirEntry}
317+ * returns a string consisting of the name of the file, followed by its
318+ * type between brackets, followed by the user and group between
319+ * parenthesis, then size between '{', and, finally, the lastModified of last
320+ * modification if it's available.
321+ *
322+ * @return a string representation of the object.
323+ */
324+ @Override
325+ public String toString() {
326+ if (lastModified == null) {
327+ return name + " [" + type + "] (" + user + " / " + group + ") " + size;
328+ }
329+ return name + " [" + type + "] (" + user + " / " + group + ") {" + size + "} " + java.text.DateFormat.getDateInstance().format(lastModified);
330+ }
331+}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t