1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.swid.builder.resource.firmware;
28
29 import gov.nist.secauto.swid.builder.ValidationException;
30 import gov.nist.secauto.swid.builder.resource.AbstractResourceBuilder;
31 import gov.nist.secauto.swid.builder.resource.ResourceCollectionEntryGenerator;
32 import gov.nist.secauto.swid.builder.util.Util;
33
34 import java.math.BigInteger;
35 import java.time.ZonedDateTime;
36 import java.util.LinkedHashMap;
37 import java.util.LinkedList;
38 import java.util.List;
39 import java.util.Map;
40 import java.util.Objects;
41 import java.util.Random;
42
43 public class FirmwareBuilder extends AbstractResourceBuilder<FirmwareBuilder> {
44 private FirmwareIdentifier id;
45 private ZonedDateTime creationTimestamp = ZonedDateTime.now();
46 private BigInteger version;
47 private String description;
48 private byte[] nonce;
49 private List<ResourceReference> aliases = new LinkedList<>();
50 private List<ResourceReference> dependencies = new LinkedList<>();
51 private String blockDeviceIdentifier;
52 private DeviceIdentifier targetDeviceIdentifier;
53 private List<FirmwarePayloadBuilder> payloads = new LinkedList<>();
54 private Map<Integer, byte[]> extensions = new LinkedHashMap<>();
55
56 public FirmwareBuilder() {
57 super();
58 byte[] nonceData = new byte[8];
59 new Random().nextBytes(nonceData);
60 this.nonce = nonceData;
61 }
62
63 @Override
64 public <T> void accept(T parentContext, ResourceCollectionEntryGenerator<T> creator) {
65 creator.generate(parentContext, this);
66 }
67
68
69
70
71
72
73 public FirmwareIdentifier getId() {
74 return id;
75 }
76
77
78
79
80
81
82
83
84 public FirmwareBuilder id(FirmwareIdentifier id) {
85 Objects.requireNonNull(id, "id");
86 this.id = id;
87 return this;
88 }
89
90
91
92
93
94
95 public ZonedDateTime getCreationTimestamp() {
96 return creationTimestamp;
97 }
98
99
100
101
102
103
104
105
106 public FirmwareBuilder creationTimestamp(ZonedDateTime dateTime) {
107 Objects.requireNonNull(dateTime, "dateTime");
108 this.creationTimestamp = dateTime;
109 return this;
110 }
111
112
113
114
115
116
117 public BigInteger getVersion() {
118 return version;
119 }
120
121
122
123
124
125
126
127
128 public FirmwareBuilder version(BigInteger version) {
129 Objects.requireNonNull(version, "version");
130 this.version = version;
131 return this;
132 }
133
134
135
136
137
138
139 public String getDescription() {
140 return description;
141 }
142
143
144
145
146
147
148
149
150 public FirmwareBuilder description(String description) {
151 Util.requireNonEmpty(description, "description");
152 this.description = description;
153 return this;
154 }
155
156
157
158
159
160
161 public byte[] getNonce() {
162 return nonce;
163 }
164
165
166
167
168
169
170
171
172 public FirmwareBuilder nonce(byte[] nonce) {
173 Objects.requireNonNull(nonce, "nonce");
174 this.nonce = nonce;
175 return this;
176 }
177
178
179
180
181
182
183 public List<ResourceReference> getAliases() {
184 return aliases;
185 }
186
187
188
189
190
191
192
193
194 public FirmwareBuilder addAlias(ResourceReference alias) {
195 Objects.requireNonNull(alias, "alias");
196 this.aliases.add(alias);
197 return this;
198 }
199
200
201
202
203
204
205 public List<ResourceReference> getDependencies() {
206 return dependencies;
207 }
208
209
210
211
212
213
214
215
216 public FirmwareBuilder addDependency(ResourceReference dependency) {
217 Objects.requireNonNull(dependency, "dependency");
218 this.dependencies.add(dependency);
219 return this;
220 }
221
222
223
224
225
226
227 public String getBlockDeviceIdentifier() {
228 return blockDeviceIdentifier;
229 }
230
231
232
233
234
235
236
237
238 public FirmwareBuilder blockDeviceIdentifier(String blockDeviceIdentifier) {
239 Util.requireNonEmpty(blockDeviceIdentifier, "blockDeviceIdentifier");
240 this.blockDeviceIdentifier = blockDeviceIdentifier;
241 return this;
242 }
243
244
245
246
247
248
249 public DeviceIdentifier getTargetDeviceIdentifier() {
250 return targetDeviceIdentifier;
251 }
252
253
254
255
256
257
258
259
260 public FirmwareBuilder targetDeviceIdentifier(DeviceIdentifier targetDeviceIdentifier) {
261 Objects.requireNonNull(targetDeviceIdentifier, "targetDeviceIdentifier");
262 this.targetDeviceIdentifier = targetDeviceIdentifier;
263 return this;
264 }
265
266
267
268
269
270
271 public List<FirmwarePayloadBuilder> getPayloads() {
272 return payloads;
273 }
274
275
276
277
278
279
280
281
282 public FirmwareBuilder addPayload(FirmwarePayloadBuilder payload) {
283 Objects.requireNonNull(payload, "payload");
284 this.payloads.add(payload);
285 return this;
286 }
287
288
289
290
291
292
293 public Map<Integer, byte[]> getExtensions() {
294 return extensions;
295 }
296
297
298
299
300
301
302
303
304
305
306 public FirmwareBuilder addExtension(int extenstionType, byte[] extension) {
307 this.extensions.put(extenstionType, extension);
308 return this;
309 }
310
311 @Override
312 public void validate() throws ValidationException {
313 validateNonNull("id", id);
314 validateNonNull("creationTimestamp", creationTimestamp);
315 validateNonNull("version", version);
316 validateNonEmpty("nonce", nonce);
317 validateNonNull("targetDeviceIdentifier", nonce);
318 }
319
320 public static FirmwareBuilder create() {
321 return new FirmwareBuilder();
322 }
323
324 }