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 }