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.decima.core.requirement;
28
29 import java.net.URI;
30 import java.net.URISyntaxException;
31 import java.net.URL;
32 import java.util.Collection;
33 import java.util.Collections;
34 import java.util.LinkedHashMap;
35 import java.util.LinkedList;
36 import java.util.List;
37 import java.util.Map;
38
39 public class DefaultRequirementsManager implements MutableRequirementsManager, RequirementAppender {
40
41 private List<URI> requirementDefinitions = new LinkedList<>();
42 private Map<String, BaseRequirement> baseRequirements = new LinkedHashMap<>();
43 private Map<String, DerivedRequirement> derivedRequirements = new LinkedHashMap<>();
44
45 public DefaultRequirementsManager() {
46 }
47
48 public List<URI> getRequirementDefinitions() {
49 return Collections.unmodifiableList(requirementDefinitions);
50 }
51
52 @Override
53 public DefaultRequirementsManager addRequirementDefinition(URI definition) {
54 requirementDefinitions.add(definition);
55 return this;
56 }
57
58 @Override
59 public BaseRequirement getBaseRequirementById(String id) {
60 return baseRequirements.get(id);
61 }
62
63 @Override
64 public Collection<BaseRequirement> getBaseRequirements() {
65 return baseRequirements.values();
66 }
67
68 @Override
69 public DerivedRequirement getDerivedRequirementById(String id) {
70 return derivedRequirements.get(id);
71 }
72
73 @Override
74 public DefaultRequirementsManager addBaseRequirement(BaseRequirement baseRequirement) {
75 if (baseRequirements.containsKey(baseRequirement.getId())) {
76 throw new IllegalArgumentException("A base requirement already exists with the id: " + baseRequirement.getId());
77 }
78 baseRequirements.put(baseRequirement.getId(), baseRequirement);
79
80 for (DerivedRequirement derivedRequirement : baseRequirement.getDerivedRequirements()) {
81 if (derivedRequirements.containsKey(derivedRequirement.getId())) {
82 throw new IllegalArgumentException(
83 "A derived requirement already exists with the id: " + derivedRequirement.getId());
84 }
85 derivedRequirements.put(derivedRequirement.getId(), derivedRequirement);
86 }
87 return this;
88 }
89
90 @Override
91 public DefaultRequirementsManager load(URL url, RequirementsParser parser)
92 throws RequirementsParserException, URISyntaxException {
93 parser.parse(url, this);
94
95 return this;
96 }
97 }