Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/sun/nio/fs/AbstractBasicFileAttributeView.java
41159 views
1
/*
2
* Copyright (c) 2008, 2011, 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
26
package sun.nio.fs;
27
28
import java.nio.file.attribute.*;
29
import java.util.*;
30
import java.io.IOException;
31
32
/**
33
* Base implementation of BasicFileAttributeView
34
*/
35
36
abstract class AbstractBasicFileAttributeView
37
implements BasicFileAttributeView, DynamicFileAttributeView
38
{
39
private static final String SIZE_NAME = "size";
40
private static final String CREATION_TIME_NAME = "creationTime";
41
private static final String LAST_ACCESS_TIME_NAME = "lastAccessTime";
42
private static final String LAST_MODIFIED_TIME_NAME = "lastModifiedTime";
43
private static final String FILE_KEY_NAME = "fileKey";
44
private static final String IS_DIRECTORY_NAME = "isDirectory";
45
private static final String IS_REGULAR_FILE_NAME = "isRegularFile";
46
private static final String IS_SYMBOLIC_LINK_NAME = "isSymbolicLink";
47
private static final String IS_OTHER_NAME = "isOther";
48
49
// the names of the basic attributes
50
static final Set<String> basicAttributeNames =
51
Util.newSet(SIZE_NAME,
52
CREATION_TIME_NAME,
53
LAST_ACCESS_TIME_NAME,
54
LAST_MODIFIED_TIME_NAME,
55
FILE_KEY_NAME,
56
IS_DIRECTORY_NAME,
57
IS_REGULAR_FILE_NAME,
58
IS_SYMBOLIC_LINK_NAME,
59
IS_OTHER_NAME);
60
61
protected AbstractBasicFileAttributeView() { }
62
63
@Override
64
public String name() {
65
return "basic";
66
}
67
68
@Override
69
public void setAttribute(String attribute, Object value)
70
throws IOException
71
{
72
if (attribute.equals(LAST_MODIFIED_TIME_NAME)) {
73
setTimes((FileTime)value, null, null);
74
return;
75
}
76
if (attribute.equals(LAST_ACCESS_TIME_NAME)) {
77
setTimes(null, (FileTime)value, null);
78
return;
79
}
80
if (attribute.equals(CREATION_TIME_NAME)) {
81
setTimes(null, null, (FileTime)value);
82
return;
83
}
84
throw new IllegalArgumentException("'" + name() + ":" +
85
attribute + "' not recognized");
86
}
87
88
/**
89
* Used to build a map of attribute name/values.
90
*/
91
static class AttributesBuilder {
92
private Set<String> names = new HashSet<>();
93
private Map<String,Object> map = new HashMap<>();
94
private boolean copyAll;
95
96
private AttributesBuilder(Set<String> allowed, String[] requested) {
97
for (String name: requested) {
98
if (name.equals("*")) {
99
copyAll = true;
100
} else {
101
if (!allowed.contains(name))
102
throw new IllegalArgumentException("'" + name + "' not recognized");
103
names.add(name);
104
}
105
}
106
}
107
108
/**
109
* Creates builder to build up a map of the matching attributes
110
*/
111
static AttributesBuilder create(Set<String> allowed, String[] requested) {
112
return new AttributesBuilder(allowed, requested);
113
}
114
115
/**
116
* Returns true if the attribute should be returned in the map
117
*/
118
boolean match(String name) {
119
return copyAll || names.contains(name);
120
}
121
122
void add(String name, Object value) {
123
map.put(name, value);
124
}
125
126
/**
127
* Returns the map. Discard all references to the AttributesBuilder
128
* after invoking this method.
129
*/
130
Map<String,Object> unmodifiableMap() {
131
return Collections.unmodifiableMap(map);
132
}
133
}
134
135
/**
136
* Invoked by readAttributes or sub-classes to add all matching basic
137
* attributes to the builder
138
*/
139
final void addRequestedBasicAttributes(BasicFileAttributes attrs,
140
AttributesBuilder builder)
141
{
142
if (builder.match(SIZE_NAME))
143
builder.add(SIZE_NAME, attrs.size());
144
if (builder.match(CREATION_TIME_NAME))
145
builder.add(CREATION_TIME_NAME, attrs.creationTime());
146
if (builder.match(LAST_ACCESS_TIME_NAME))
147
builder.add(LAST_ACCESS_TIME_NAME, attrs.lastAccessTime());
148
if (builder.match(LAST_MODIFIED_TIME_NAME))
149
builder.add(LAST_MODIFIED_TIME_NAME, attrs.lastModifiedTime());
150
if (builder.match(FILE_KEY_NAME))
151
builder.add(FILE_KEY_NAME, attrs.fileKey());
152
if (builder.match(IS_DIRECTORY_NAME))
153
builder.add(IS_DIRECTORY_NAME, attrs.isDirectory());
154
if (builder.match(IS_REGULAR_FILE_NAME))
155
builder.add(IS_REGULAR_FILE_NAME, attrs.isRegularFile());
156
if (builder.match(IS_SYMBOLIC_LINK_NAME))
157
builder.add(IS_SYMBOLIC_LINK_NAME, attrs.isSymbolicLink());
158
if (builder.match(IS_OTHER_NAME))
159
builder.add(IS_OTHER_NAME, attrs.isOther());
160
}
161
162
@Override
163
public Map<String,Object> readAttributes(String[] requested)
164
throws IOException
165
{
166
AttributesBuilder builder =
167
AttributesBuilder.create(basicAttributeNames, requested);
168
addRequestedBasicAttributes(readAttributes(), builder);
169
return builder.unmodifiableMap();
170
}
171
}
172
173