1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat;
20
21 import java.io.File;
22 import java.io.FilenameFilter;
23 import java.io.InputStream;
24 import java.net.MalformedURLException;
25 import java.net.URL;
26 import java.util.Collection;
27 import java.util.Comparator;
28 import java.util.Set;
29 import java.util.SortedSet;
30 import java.util.TreeSet;
31
32 import org.apache.commons.io.filefilter.FalseFileFilter;
33 import org.apache.commons.io.filefilter.IOFileFilter;
34 import org.apache.commons.io.function.IOSupplier;
35 import org.apache.rat.configuration.Format;
36 import org.apache.rat.configuration.LicenseReader;
37 import org.apache.rat.configuration.MatcherReader;
38 import org.apache.rat.license.ILicense;
39 import org.apache.rat.license.ILicenseFamily;
40 import org.apache.rat.license.LicenseSetFactory;
41 import org.apache.rat.license.LicenseSetFactory.LicenseFilter;
42 import org.apache.rat.utils.Log;
43 import org.apache.rat.walker.NameBasedHiddenFileFilter;
44
45
46
47
48
49
50 public final class Defaults {
51
52
53
54
55 private static final URL DEFAULT_CONFIG_URL = Defaults.class.getResource("/org/apache/rat/default.xml");
56
57
58
59 public static final String PLAIN_STYLESHEET = "org/apache/rat/plain-rat.xsl";
60
61
62
63 public static final String UNAPPROVED_LICENSES_STYLESHEET = "org/apache/rat/unapproved-licenses.xsl";
64
65 public static final FilenameFilter FILES_TO_IGNORE = FalseFileFilter.FALSE;
66
67 public static final IOFileFilter DIRECTORIES_TO_IGNORE = NameBasedHiddenFileFilter.HIDDEN;
68
69 public static final ReportConfiguration.Processing ARCHIVE_PROCESSING = ReportConfiguration.Processing.NOTIFICATION;
70
71 public static final ReportConfiguration.Processing STANDARD_PROCESSING = ReportConfiguration.Processing.ABSENCE;
72
73 public static final LicenseFilter LIST_FAMILIES = LicenseFilter.NONE;
74
75 public static final LicenseFilter LIST_LICENSES = LicenseFilter.NONE;
76
77 private final LicenseSetFactory setFactory;
78
79
80
81
82
83 public static void init() {
84 Format fmt = Format.fromURL(DEFAULT_CONFIG_URL);
85 MatcherReader mReader = fmt.matcherReader();
86 mReader.addMatchers(DEFAULT_CONFIG_URL);
87 mReader.readMatcherBuilders();
88 }
89
90
91
92
93 private Defaults(final Log log, final Set<URL> urls) {
94 this.setFactory = Defaults.readConfigFiles(log, urls);
95 }
96
97
98
99
100
101 public static Builder builder() {
102 return new Builder();
103 }
104
105
106
107
108
109 private static LicenseSetFactory readConfigFiles(final Log log, final Collection<URL> urls) {
110
111 SortedSet<ILicense> licenses = LicenseSetFactory.emptyLicenseSet();
112
113 SortedSet<String> approvedLicenseIds = new TreeSet<>();
114
115 for (URL url : urls) {
116 Format fmt = Format.fromURL(url);
117 MatcherReader mReader = fmt.matcherReader();
118 if (mReader != null) {
119 mReader.addMatchers(url);
120 mReader.readMatcherBuilders();
121 }
122
123 LicenseReader lReader = fmt.licenseReader();
124 if (lReader != null) {
125 lReader.setLog(log);
126 lReader.addLicenses(url);
127 licenses.addAll(lReader.readLicenses());
128 lReader.approvedLicenseId().stream().map(ILicenseFamily::makeCategory).forEach(approvedLicenseIds::add);
129 }
130 }
131 return new LicenseSetFactory(licenses, approvedLicenseIds);
132 }
133
134
135
136
137
138 public static IOSupplier<InputStream> getPlainStyleSheet() {
139 return () -> Defaults.class.getClassLoader().getResourceAsStream(Defaults.PLAIN_STYLESHEET);
140 }
141
142
143
144
145
146 public static IOSupplier<InputStream> getUnapprovedLicensesStyleSheet() {
147 return () -> Defaults.class.getClassLoader().getResourceAsStream(Defaults.UNAPPROVED_LICENSES_STYLESHEET);
148 }
149
150
151
152
153
154
155 public SortedSet<ILicense> getLicenses(final LicenseFilter filter) {
156 return setFactory.getLicenses(filter);
157 }
158
159
160
161
162
163
164 public SortedSet<ILicenseFamily> getLicenseFamilies(final LicenseFilter filter) {
165 return setFactory.getLicenseFamilies(filter);
166 }
167
168
169
170
171
172
173
174 public SortedSet<String> getLicenseIds(final LicenseFilter filter) {
175 return setFactory.getLicenseFamilyIds(filter);
176 }
177
178
179
180
181 public final static class Builder {
182 private final Set<URL> fileNames = new TreeSet<>(Comparator.comparing(URL::toString));
183
184 private Builder() {
185 fileNames.add(DEFAULT_CONFIG_URL);
186 }
187
188
189
190
191
192
193
194 public Builder add(final URL url) {
195 fileNames.add(url);
196 return this;
197 }
198
199
200
201
202
203
204
205
206 public Builder add(final String fileName) throws MalformedURLException {
207 return add(new File(fileName));
208 }
209
210
211
212
213
214
215
216
217 public Builder add(final File file) throws MalformedURLException {
218 return add(file.toURI().toURL());
219 }
220
221
222
223
224
225
226
227 public Builder remove(final URL url) {
228 fileNames.remove(url);
229 return this;
230 }
231
232
233
234
235
236
237
238
239 public Builder remove(final String fileName) throws MalformedURLException {
240 return remove(new File(fileName));
241 }
242
243
244
245
246
247
248
249
250 public Builder remove(final File file) throws MalformedURLException {
251 return remove(file.toURI().toURL());
252 }
253
254
255
256
257
258
259 public Builder noDefault() {
260 return remove(DEFAULT_CONFIG_URL);
261 }
262
263
264
265
266
267
268 public Defaults build(final Log log) {
269 return new Defaults(log, fileNames);
270 }
271 }
272 }