1
2
3
4
5
6 package gov.nist.secauto.oscal.lib.profile.resolver;
7
8 import gov.nist.secauto.metaschema.core.metapath.item.node.IDocumentNodeItem;
9 import gov.nist.secauto.metaschema.core.metapath.item.node.INodeItemFactory;
10 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
11 import gov.nist.secauto.metaschema.databind.model.IBoundDefinitionModelAssembly;
12 import gov.nist.secauto.oscal.lib.OscalBindingContext;
13 import gov.nist.secauto.oscal.lib.model.Catalog;
14 import gov.nist.secauto.oscal.lib.model.control.AbstractParameter;
15 import gov.nist.secauto.oscal.lib.model.control.AbstractPart;
16 import gov.nist.secauto.oscal.lib.model.control.catalog.AbstractCatalogGroup;
17 import gov.nist.secauto.oscal.lib.model.control.catalog.AbstractControl;
18 import gov.nist.secauto.oscal.lib.model.metadata.AbstractProperty;
19 import gov.nist.secauto.oscal.lib.model.metadata.IProperty;
20 import gov.nist.secauto.oscal.lib.profile.resolver.support.IIdentifierMapper;
21
22 import java.nio.file.Paths;
23 import java.util.Map;
24 import java.util.UUID;
25 import java.util.concurrent.ConcurrentHashMap;
26
27 import edu.umd.cs.findbugs.annotations.NonNull;
28
29 public final class TestUtil {
30
31 @NonNull
32 public static final IIdentifierMapper UUID_CONCAT_ID_MAPPER = new IIdentifierMapper() {
33 private final Map<String, String> idToReassignmentMap = new ConcurrentHashMap<>();
34
35 @NonNull
36 private String reassign(@NonNull String identifier) {
37 String retval = idToReassignmentMap.get(identifier);
38 if (retval == null) {
39 retval = identifier + "-" + UUID.randomUUID().toString();
40 idToReassignmentMap.put(identifier, retval);
41 }
42 return retval;
43 }
44
45 @Override
46 public String mapRoleIdentifier(@NonNull String identifier) {
47 return reassign(identifier);
48 }
49
50 @Override
51 public String mapControlIdentifier(@NonNull String identifier) {
52 return reassign(identifier);
53 }
54
55 @Override
56 public String mapGroupIdentifier(@NonNull String identifier) {
57 return reassign(identifier);
58 }
59
60 @Override
61 public String mapParameterIdentifier(@NonNull String identifier) {
62 return reassign(identifier);
63 }
64
65 @Override
66 public @NonNull String mapPartIdentifier(@NonNull String identifier) {
67 return reassign(identifier);
68 }
69 };
70
71 private TestUtil() {
72
73 }
74
75 @NonNull
76 public static IDocumentNodeItem newImportedCatalog() {
77
78
79 Catalog importedCatalog = new Catalog();
80 importedCatalog.setUuid(UUID.randomUUID());
81
82 importedCatalog.addParam(AbstractParameter.builder("param1")
83 .build());
84
85 importedCatalog.addGroup(AbstractCatalogGroup.builder("group1")
86 .title("Group 1")
87 .part(AbstractPart.builder("statement")
88 .prose("group 1 part 1")
89 .build())
90 .param(AbstractParameter.builder("param2")
91 .build())
92 .control(AbstractControl.builder("control1")
93 .title("Control 1")
94 .param(AbstractParameter.builder("param3")
95 .build())
96 .part(AbstractPart.builder("statement")
97 .prose("A {{ insert: param, param1}} reference.")
98 .build())
99 .part(AbstractPart.builder("statement")
100 .prose("group 1 control 1 part 1")
101 .part(AbstractPart.builder("statement")
102 .prose("group 1 control 1 part 1.a")
103 .build())
104 .part(AbstractPart.builder("statement")
105 .prose("group 1 control 1 part 1.b")
106 .build())
107 .build())
108 .part(AbstractPart.builder("statement")
109 .prose("group 1 control 1 part 2")
110 .build())
111 .build())
112
113 .control(AbstractControl.builder("control2")
114 .title("Control 2")
115 .part(AbstractPart.builder("statement")
116 .prose("A {{ insert: param, param2}} reference.")
117 .build())
118 .build())
119 .build());
120 importedCatalog.addGroup(AbstractCatalogGroup.builder("group2")
121 .title("Group 2")
122 .param(AbstractParameter.builder("param4")
123 .prop(AbstractProperty.builder("aggregates")
124 .namespace(IProperty.RMF_NAMESPACE)
125 .value("param2")
126 .build())
127 .build())
128 .control(AbstractControl.builder("control3")
129 .title("Control 3")
130 .build())
131 .control(AbstractControl.builder("control4")
132 .title("Control 4")
133 .build())
134 .group(AbstractCatalogGroup.builder("group3")
135 .title("Group 3")
136
137 .control(AbstractControl.builder("control5")
138 .title("Control 5")
139 .build())
140 .build())
141 .control(AbstractControl.builder("control6")
142 .title("Control 6")
143 .part(AbstractPart.builder("statement")
144 .prose("A {{ insert: param, param4}} reference.")
145 .build())
146 .build())
147
148 .control(AbstractControl.builder("control7")
149 .title("Control 7")
150 .param(AbstractParameter.builder("param5")
151 .build())
152 .control(AbstractControl.builder("control8")
153 .title("Control 8")
154 .part(AbstractPart.builder("statement")
155 .prose("A {{ insert: param, param5}} reference.")
156 .build())
157 .build())
158 .build())
159 .build());
160
161 return INodeItemFactory.instance().newDocumentNodeItem(
162 ObjectUtils.requireNonNull(
163 (IBoundDefinitionModelAssembly) OscalBindingContext.instance().getBoundDefinitionForClass(Catalog.class)),
164 ObjectUtils.notNull(Paths.get("").toUri()),
165 importedCatalog);
166 }
167 }