1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io.filefilter;
18
19 import java.io.File;
20 import java.io.FileFilter;
21 import java.io.FilenameFilter;
22 import java.io.IOException;
23 import java.nio.file.FileVisitResult;
24 import java.nio.file.Path;
25 import java.nio.file.attribute.BasicFileAttributes;
26 import java.util.List;
27 import java.util.Objects;
28
29 import org.apache.commons.io.file.PathFilter;
30 import org.apache.commons.io.file.PathVisitor;
31 import org.apache.commons.io.function.IOSupplier;
32
33
34
35
36
37
38
39
40
41
42 public abstract class AbstractFileFilter implements IOFileFilter, PathVisitor {
43
44 static FileVisitResult toDefaultFileVisitResult(final boolean accept) {
45 return accept ? FileVisitResult.CONTINUE : FileVisitResult.TERMINATE;
46 }
47
48
49
50
51 private final FileVisitResult onAccept;
52
53
54
55
56 private final FileVisitResult onReject;
57
58
59
60
61 public AbstractFileFilter() {
62 this(FileVisitResult.CONTINUE, FileVisitResult.TERMINATE);
63 }
64
65
66
67
68
69
70
71
72 protected AbstractFileFilter(final FileVisitResult onAccept, final FileVisitResult onReject) {
73 this.onAccept = onAccept;
74 this.onReject = onReject;
75 }
76
77
78
79
80
81
82
83 @Override
84 public boolean accept(final File file) {
85 Objects.requireNonNull(file, "file");
86 return accept(file.getParentFile(), file.getName());
87 }
88
89
90
91
92
93
94
95
96 @Override
97 public boolean accept(final File dir, final String name) {
98 Objects.requireNonNull(name, "name");
99 return accept(new File(dir, name));
100 }
101
102 void append(final List<?> list, final StringBuilder buffer) {
103 for (int i = 0; i < list.size(); i++) {
104 if (i > 0) {
105 buffer.append(",");
106 }
107 buffer.append(list.get(i));
108 }
109 }
110
111 void append(final Object[] array, final StringBuilder buffer) {
112 for (int i = 0; i < array.length; i++) {
113 if (i > 0) {
114 buffer.append(",");
115 }
116 buffer.append(array[i]);
117 }
118 }
119
120 FileVisitResult get(final IOSupplier<FileVisitResult> supplier) {
121 try {
122 return supplier.get();
123 } catch (IOException e) {
124 return handle(e);
125 }
126 }
127
128
129
130
131
132
133
134
135 protected FileVisitResult handle(final Throwable t) {
136 return FileVisitResult.TERMINATE;
137 }
138
139 @Override
140 public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException {
141 return FileVisitResult.CONTINUE;
142 }
143
144 @Override
145 public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attributes) throws IOException {
146 return accept(dir, attributes);
147 }
148
149
150
151
152
153
154
155 FileVisitResult toFileVisitResult(final boolean accept) {
156 return accept ? onAccept : onReject;
157 }
158
159
160
161
162
163
164 @Override
165 public String toString() {
166 return getClass().getSimpleName();
167 }
168
169 @Override
170 public FileVisitResult visitFile(final Path file, final BasicFileAttributes attributes) throws IOException {
171 return accept(file, attributes);
172 }
173
174 @Override
175 public FileVisitResult visitFileFailed(final Path file, final IOException exc) throws IOException {
176 return FileVisitResult.CONTINUE;
177 }
178
179 }