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/nio/fs/AbstractBasicFileAttributeView.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/nio/fs/AbstractBasicFileAttributeView.java+171−0
@@ -0,0 +1,171 @@
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
26package sun.nio.fs;
27
28import java.nio.file.attribute.*;
29import java.util.*;
30import java.io.IOException;
31
32/**
33 * Base implementation of BasicFileAttributeView
34 */
35
36abstract 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}