Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/sun/net/ftp/FtpDirEntry.java
41159 views
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
}
332
333