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