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