1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.creadur.whisker.app;
20
21 import static org.apache.creadur.whisker.app.LicenseConfiguration.*;
22 import static org.apache.creadur.whisker.app.ConfigurationBuilder.*;
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.util.Collection;
27
28 import org.apache.creadur.whisker.app.analysis.LicenseAnalyst;
29 import org.apache.creadur.whisker.fromxml.JDomBuilder;
30 import org.apache.creadur.whisker.model.Descriptor;
31 import org.apache.creadur.whisker.scan.Directory;
32 import org.apache.creadur.whisker.scan.FromFileSystem;
33
34
35
36
37
38 public class Whisker {
39
40
41 private Act act;
42
43 private String source;
44
45 private StreamableResource licenseDescriptor;
46
47 private ResultWriterFactory writerFactory;
48
49 private AbstractEngine engine;
50
51 private LicenseConfiguration licenseConfiguration = DEFAULT_LICENSE_CONFIGURATION;
52
53
54
55
56
57 public LicenseConfiguration getLicenseConfiguration() {
58 return licenseConfiguration;
59 }
60
61
62
63
64
65
66 public Whisker setLicenseConfiguration(final LicenseConfiguration licenseConfiguration) {
67 this.licenseConfiguration = notNull(licenseConfiguration);
68 return this;
69 }
70
71
72
73
74
75 public final ResultWriterFactory getWriterFactory() {
76 return writerFactory;
77 }
78
79
80
81
82
83
84 public final Whisker setWriterFactory(final ResultWriterFactory writerFactory) {
85 this.writerFactory = writerFactory;
86 return this;
87 }
88
89
90
91
92
93 public final AbstractEngine getEngine() {
94 return engine;
95 }
96
97
98
99
100
101
102 public final Whisker setEngine(final AbstractEngine engine) {
103 this.engine = engine;
104 return this;
105 }
106
107
108
109
110
111 public final String getSource() {
112 return source;
113 }
114
115
116
117
118
119
120 public final Whisker setSource(final String source) {
121 this.source = source;
122 return this;
123 }
124
125
126
127
128 public final StreamableResource getLicenseDescriptor() {
129 return licenseDescriptor;
130 }
131
132
133
134
135
136
137 public final Whisker setLicenseDescriptor(StreamableResource licenseDescriptor) {
138 this.licenseDescriptor = licenseDescriptor;
139 return this;
140 }
141
142
143
144
145
146 public final Act getAct() {
147 return act;
148 }
149
150
151
152
153
154
155 public final Whisker setAct(Act act) {
156 this.act = act;
157 return this;
158 }
159
160
161
162
163
164
165 public Whisker act() throws Exception {
166 switch (act) {
167 case REPORT:
168 return report();
169 case AUDIT:
170 return validate();
171 case SKELETON:
172 return skeleton();
173 case GENERATE:
174 default:
175 return generate();
176 }
177 }
178
179
180
181
182
183
184 private Whisker skeleton() throws Exception {
185 engine.skeleton(directories(), getWriterFactory(), configuration());
186 return this;
187 }
188
189
190
191
192
193 public Configuration configuration() {
194 return aConfiguration().with(licenseConfiguration).build();
195 }
196
197
198
199
200
201
202 private Whisker report() throws Exception {
203 engine.report(directories(), getWriterFactory(), configuration());
204 return this;
205 }
206
207
208
209
210
211
212 private Whisker generate() throws Exception {
213 engine.generate(new LicenseAnalyst().validate(load(getLicenseDescriptor())), getWriterFactory(), configuration());
214 return this;
215 }
216
217
218
219
220
221
222 private Whisker validate() throws Exception {
223 engine.validate(new LicenseAnalyst(directories()).analyse(load(getLicenseDescriptor())), getWriterFactory(), configuration());
224 return this;
225 }
226
227
228
229
230
231
232 private Collection<Directory> directories() throws IOException {
233 return new FromFileSystem().withBase(getSource());
234 }
235
236
237
238
239
240 @Override
241 public String toString() {
242 return "Whisker [act=" + act + ", base=" + source
243 + ", licenseDescriptor=" + licenseDescriptor + "]";
244 }
245
246
247
248
249
250
251
252
253 private InputStream resourceAsStream(final StreamableResource resource) throws IOException {
254 return resource.open();
255 }
256
257
258
259
260
261
262
263
264 private Descriptor load(final StreamableResource resource) throws Exception {
265 final InputStream resourceAsStream = resourceAsStream(resource);
266 if (resourceAsStream == null) {
267 throw new IllegalArgumentException("Cannot load " + resource);
268 }
269 return new JDomBuilder().build(resourceAsStream);
270 }
271 }