132 if (sm != null) {
133 file.checkRead();
134 sm.checkPermission(new RuntimePermission("accessUserInformation"));
135 }
136 }
137
138 final void checkWriteExtended() {
139 SecurityManager sm = System.getSecurityManager();
140 if (sm != null) {
141 file.checkWrite();
142 sm.checkPermission(new RuntimePermission("accessUserInformation"));
143 }
144 }
145
146 @Override
147 public String name() {
148 return "posix";
149 }
150
151 @Override
152 public Object getAttribute(String attribute) throws IOException {
153 if (attribute.equals(PERMISSIONS_NAME))
154 return readAttributes().permissions();
155 if (attribute.equals(OWNER_NAME))
156 return readAttributes().owner();
157 if (attribute.equals(GROUP_NAME))
158 return readAttributes().group();
159 return super.getAttribute(attribute);
160 }
161
162 @Override
163 @SuppressWarnings("unchecked")
164 public void setAttribute(String attribute, Object value)
165 throws IOException
166 {
167 if (attribute.equals(PERMISSIONS_NAME)) {
168 setPermissions((Set<PosixFilePermission>)value);
169 return;
170 }
171 if (attribute.equals(OWNER_NAME)) {
172 setOwner((UserPrincipal)value);
173 return;
174 }
175 if (attribute.equals(GROUP_NAME)) {
176 setGroup((GroupPrincipal)value);
177 return;
178 }
179 super.setAttribute(attribute, value);
180 }
181
182 /**
183 * Invoked by readAttributes or sub-classes to add all matching posix
184 * attributes to the builder
185 */
186 final void addPosixAttributesToBuilder(PosixFileAttributes attrs,
187 AttributesBuilder builder)
188 {
189 if (builder.match(PERMISSIONS_NAME))
190 builder.add(PERMISSIONS_NAME, attrs.permissions());
191 if (builder.match(OWNER_NAME))
192 builder.add(OWNER_NAME, attrs.owner());
193 if (builder.match(GROUP_NAME))
194 builder.add(GROUP_NAME, attrs.group());
195 }
196
197 @Override
198 public Map<String,?> readAttributes(String[] attributes)
199 throws IOException
200 {
201 AttributesBuilder builder = AttributesBuilder.create(attributes);
202 PosixFileAttributes attrs = readAttributes();
203 addBasicAttributesToBuilder(attrs, builder);
204 addPosixAttributesToBuilder(attrs, builder);
205 return builder.unmodifiableMap();
206 }
207
208 @Override
209 public UnixFileAttributes readAttributes() throws IOException {
210 checkReadExtended();
211 try {
212 return UnixFileAttributes.get(file, followLinks);
213 } catch (UnixException x) {
214 x.rethrowAsIOException(file);
215 return null; // keep compiler happy
216 }
217 }
218
291 private static class Unix extends Posix {
292 private static final String MODE_NAME = "mode";
293 private static final String INO_NAME = "ino";
294 private static final String DEV_NAME = "dev";
295 private static final String RDEV_NAME = "rdev";
296 private static final String NLINK_NAME = "nlink";
297 private static final String UID_NAME = "uid";
298 private static final String GID_NAME = "gid";
299 private static final String CTIME_NAME = "ctime";
300
301 Unix(UnixPath file, boolean followLinks) {
302 super(file, followLinks);
303 }
304
305 @Override
306 public String name() {
307 return "unix";
308 }
309
310 @Override
311 public Object getAttribute(String attribute) throws IOException {
312 if (attribute.equals(MODE_NAME))
313 return readAttributes().mode();
314 if (attribute.equals(INO_NAME))
315 return readAttributes().ino();
316 if (attribute.equals(DEV_NAME))
317 return readAttributes().dev();
318 if (attribute.equals(RDEV_NAME))
319 return readAttributes().rdev();
320 if (attribute.equals(NLINK_NAME))
321 return readAttributes().nlink();
322 if (attribute.equals(UID_NAME))
323 return readAttributes().uid();
324 if (attribute.equals(GID_NAME))
325 return readAttributes().gid();
326 if (attribute.equals(CTIME_NAME))
327 return readAttributes().ctime();
328 return super.getAttribute(attribute);
329 }
330
331 @Override
332 public void setAttribute(String attribute, Object value)
333 throws IOException
334 {
335 if (attribute.equals(MODE_NAME)) {
336 setMode((Integer)value);
337 return;
338 }
339 if (attribute.equals(UID_NAME)) {
340 setOwners((Integer)value, -1);
341 return;
342 }
343 if (attribute.equals(GID_NAME)) {
344 setOwners(-1, (Integer)value);
345 return;
346 }
347 super.setAttribute(attribute, value);
348 }
349
350 @Override
351 public Map<String,?> readAttributes(String[] attributes)
352 throws IOException
353 {
354 AttributesBuilder builder = AttributesBuilder.create(attributes);
355 UnixFileAttributes attrs = readAttributes();
356 addBasicAttributesToBuilder(attrs, builder);
357 addPosixAttributesToBuilder(attrs, builder);
358 if (builder.match(MODE_NAME))
359 builder.add(MODE_NAME, attrs.mode());
360 if (builder.match(INO_NAME))
361 builder.add(INO_NAME, attrs.ino());
362 if (builder.match(DEV_NAME))
363 builder.add(DEV_NAME, attrs.dev());
364 if (builder.match(RDEV_NAME))
365 builder.add(RDEV_NAME, attrs.rdev());
366 if (builder.match(NLINK_NAME))
367 builder.add(NLINK_NAME, attrs.nlink());
368 if (builder.match(UID_NAME))
369 builder.add(UID_NAME, attrs.uid());
370 if (builder.match(GID_NAME))
371 builder.add(GID_NAME, attrs.gid());
|
132 if (sm != null) {
133 file.checkRead();
134 sm.checkPermission(new RuntimePermission("accessUserInformation"));
135 }
136 }
137
138 final void checkWriteExtended() {
139 SecurityManager sm = System.getSecurityManager();
140 if (sm != null) {
141 file.checkWrite();
142 sm.checkPermission(new RuntimePermission("accessUserInformation"));
143 }
144 }
145
146 @Override
147 public String name() {
148 return "posix";
149 }
150
151 @Override
152 @SuppressWarnings("unchecked")
153 public void setAttribute(String attribute, Object value)
154 throws IOException
155 {
156 if (attribute.equals(PERMISSIONS_NAME)) {
157 setPermissions((Set<PosixFilePermission>)value);
158 return;
159 }
160 if (attribute.equals(OWNER_NAME)) {
161 setOwner((UserPrincipal)value);
162 return;
163 }
164 if (attribute.equals(GROUP_NAME)) {
165 setGroup((GroupPrincipal)value);
166 return;
167 }
168 super.setAttribute(attribute, value);
169 }
170
171 /**
172 * Invoked by readAttributes or sub-classes to add all matching posix
173 * attributes to the builder
174 */
175 final void addPosixAttributesToBuilder(PosixFileAttributes attrs,
176 AttributesBuilder builder)
177 {
178 if (builder.match(PERMISSIONS_NAME))
179 builder.add(PERMISSIONS_NAME, attrs.permissions());
180 if (builder.match(OWNER_NAME))
181 builder.add(OWNER_NAME, attrs.owner());
182 if (builder.match(GROUP_NAME))
183 builder.add(GROUP_NAME, attrs.group());
184 }
185
186 @Override
187 public Map<String,Object> readAttributes(String[] attributes)
188 throws IOException
189 {
190 AttributesBuilder builder = AttributesBuilder.create(attributes);
191 PosixFileAttributes attrs = readAttributes();
192 addBasicAttributesToBuilder(attrs, builder);
193 addPosixAttributesToBuilder(attrs, builder);
194 return builder.unmodifiableMap();
195 }
196
197 @Override
198 public UnixFileAttributes readAttributes() throws IOException {
199 checkReadExtended();
200 try {
201 return UnixFileAttributes.get(file, followLinks);
202 } catch (UnixException x) {
203 x.rethrowAsIOException(file);
204 return null; // keep compiler happy
205 }
206 }
207
280 private static class Unix extends Posix {
281 private static final String MODE_NAME = "mode";
282 private static final String INO_NAME = "ino";
283 private static final String DEV_NAME = "dev";
284 private static final String RDEV_NAME = "rdev";
285 private static final String NLINK_NAME = "nlink";
286 private static final String UID_NAME = "uid";
287 private static final String GID_NAME = "gid";
288 private static final String CTIME_NAME = "ctime";
289
290 Unix(UnixPath file, boolean followLinks) {
291 super(file, followLinks);
292 }
293
294 @Override
295 public String name() {
296 return "unix";
297 }
298
299 @Override
300 public void setAttribute(String attribute, Object value)
301 throws IOException
302 {
303 if (attribute.equals(MODE_NAME)) {
304 setMode((Integer)value);
305 return;
306 }
307 if (attribute.equals(UID_NAME)) {
308 setOwners((Integer)value, -1);
309 return;
310 }
311 if (attribute.equals(GID_NAME)) {
312 setOwners(-1, (Integer)value);
313 return;
314 }
315 super.setAttribute(attribute, value);
316 }
317
318 @Override
319 public Map<String,Object> readAttributes(String[] attributes)
320 throws IOException
321 {
322 AttributesBuilder builder = AttributesBuilder.create(attributes);
323 UnixFileAttributes attrs = readAttributes();
324 addBasicAttributesToBuilder(attrs, builder);
325 addPosixAttributesToBuilder(attrs, builder);
326 if (builder.match(MODE_NAME))
327 builder.add(MODE_NAME, attrs.mode());
328 if (builder.match(INO_NAME))
329 builder.add(INO_NAME, attrs.ino());
330 if (builder.match(DEV_NAME))
331 builder.add(DEV_NAME, attrs.dev());
332 if (builder.match(RDEV_NAME))
333 builder.add(RDEV_NAME, attrs.rdev());
334 if (builder.match(NLINK_NAME))
335 builder.add(NLINK_NAME, attrs.nlink());
336 if (builder.match(UID_NAME))
337 builder.add(UID_NAME, attrs.uid());
338 if (builder.match(GID_NAME))
339 builder.add(GID_NAME, attrs.gid());
|