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