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.Serializable;
22 import java.nio.file.FileVisitResult;
23 import java.nio.file.Path;
24 import java.nio.file.attribute.BasicFileAttributes;
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Objects;
29 import java.util.stream.Stream;
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class OrFileFilter extends AbstractFileFilter implements ConditionalFileFilter, Serializable {
44
45 private static final long serialVersionUID = 5767770777065432721L;
46
47
48 private final List<IOFileFilter> fileFilters;
49
50
51
52
53
54
55 public OrFileFilter() {
56 this(0);
57 }
58
59
60
61
62
63
64 private OrFileFilter(final ArrayList<IOFileFilter> initialList) {
65 this.fileFilters = Objects.requireNonNull(initialList, "initialList");
66 }
67
68
69
70
71
72
73 private OrFileFilter(final int initialCapacity) {
74 this(new ArrayList<>(initialCapacity));
75 }
76
77
78
79
80
81
82
83 public OrFileFilter(final IOFileFilter... fileFilters) {
84 this(Objects.requireNonNull(fileFilters, "fileFilters").length);
85 addFileFilter(fileFilters);
86 }
87
88
89
90
91
92
93
94
95 public OrFileFilter(final IOFileFilter filter1, final IOFileFilter filter2) {
96 this(2);
97 addFileFilter(filter1);
98 addFileFilter(filter2);
99 }
100
101
102
103
104
105
106
107 public OrFileFilter(final List<IOFileFilter> fileFilters) {
108 this(new ArrayList<>(Objects.requireNonNull(fileFilters, "fileFilters")));
109 }
110
111
112
113
114 @Override
115 public boolean accept(final File file) {
116 return fileFilters.stream().anyMatch(fileFilter -> fileFilter.accept(file));
117 }
118
119
120
121
122 @Override
123 public boolean accept(final File file, final String name) {
124 return fileFilters.stream().anyMatch(fileFilter -> fileFilter.accept(file, name));
125 }
126
127
128
129
130 @Override
131 public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
132 return toDefaultFileVisitResult(fileFilters.stream().anyMatch(fileFilter -> fileFilter.accept(file, attributes) == FileVisitResult.CONTINUE));
133 }
134
135
136
137
138 @Override
139 public void addFileFilter(final IOFileFilter fileFilter) {
140 this.fileFilters.add(Objects.requireNonNull(fileFilter, "fileFilter"));
141 }
142
143
144
145
146
147
148
149 public void addFileFilter(final IOFileFilter... fileFilters) {
150 Stream.of(Objects.requireNonNull(fileFilters, "fileFilters")).forEach(this::addFileFilter);
151 }
152
153
154
155
156 @Override
157 public List<IOFileFilter> getFileFilters() {
158 return Collections.unmodifiableList(this.fileFilters);
159 }
160
161
162
163
164 @Override
165 public boolean removeFileFilter(final IOFileFilter fileFilter) {
166 return this.fileFilters.remove(fileFilter);
167 }
168
169
170
171
172 @Override
173 public void setFileFilters(final List<IOFileFilter> fileFilters) {
174 this.fileFilters.clear();
175 this.fileFilters.addAll(Objects.requireNonNull(fileFilters, "fileFilters"));
176 }
177
178
179
180
181
182
183 @Override
184 public String toString() {
185 final StringBuilder buffer = new StringBuilder();
186 buffer.append(super.toString());
187 buffer.append("(");
188 append(fileFilters, buffer);
189 buffer.append(")");
190 return buffer.toString();
191 }
192
193 }