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;
28
29 import gov.nist.secauto.swid.builder.AbstractLanguageSpecificBuilder;
30 import gov.nist.secauto.swid.builder.ValidationException;
31 import gov.nist.secauto.swid.builder.resource.file.DirectoryBuilder;
32 import gov.nist.secauto.swid.builder.resource.file.FileBuilder;
33 import gov.nist.secauto.swid.builder.resource.firmware.FirmwareBuilder;
34
35 import java.util.Collections;
36 import java.util.LinkedHashMap;
37 import java.util.LinkedList;
38 import java.util.List;
39 import java.util.Map;
40 import java.util.stream.Collectors;
41
42 public abstract class AbstractResourceCollectionBuilder<E extends AbstractResourceCollectionBuilder<E>>
43 extends AbstractLanguageSpecificBuilder<E> {
44 private Map<String, DirectoryBuilder> directoryMap;
45 private List<ResourceBuilder> resources;
46
47 public AbstractResourceCollectionBuilder() {
48 super();
49 }
50
51 @Override
52 public void reset() {
53 super.reset();
54 directoryMap = new LinkedHashMap<>();
55 resources = new LinkedList<>();
56 }
57
58
59
60
61
62
63
64
65 public FileBuilder newFileResource(List<String> pathSegments) {
66 FileBuilder retval;
67 String filename;
68 if (pathSegments.size() > 1) {
69 List<String> directoryPath = pathSegments.subList(0, pathSegments.size() - 1);
70 DirectoryBuilder directoryBuilder = getDirectoryBuilder(directoryPath);
71 filename = pathSegments.get(pathSegments.size() - 1);
72 retval = directoryBuilder.newFileResource(filename);
73 } else {
74 filename = pathSegments.get(0);
75 retval = FileBuilder.create();
76 retval.name(filename);
77 resources.add(retval);
78 }
79 return retval;
80 }
81
82
83
84
85
86
87 public FirmwareBuilder newFirmwareResource() {
88 FirmwareBuilder retval = FirmwareBuilder.create();
89 resources.add(retval);
90 return retval;
91 }
92
93 private DirectoryBuilder getDirectoryBuilder(List<String> directoryPath) {
94 DirectoryBuilder retval = null;
95 for (String name : directoryPath) {
96 if (retval == null) {
97 DirectoryBuilder dir = directoryMap.get(name);
98 if (dir == null) {
99 dir = DirectoryBuilder.create();
100 dir.name(name);
101 directoryMap.put(name, dir);
102 resources.add(dir);
103 }
104 retval = dir;
105 } else {
106 retval = retval.getDirectoryResource(name);
107 }
108 }
109 return retval;
110 }
111
112
113
114
115
116
117
118
119
120
121 public <T extends ResourceBuilder> List<T> getResources(Class<T> clazz) {
122
123
124
125
126
127
128 @SuppressWarnings("unchecked")
129 List<? extends T> retval
130 = resources.stream().filter(e -> clazz.isInstance(e)).map(e -> (T) e).collect(Collectors.toList());
131 return Collections.unmodifiableList(retval);
132 }
133
134 public List<ResourceBuilder> getResources() {
135 return Collections.unmodifiableList(resources);
136 }
137
138 @Override
139 public void validate() throws ValidationException {
140 super.validate();
141 }
142
143 }