1
2
3
4
5
6 package dev.metaschema.oscal.lib.profile.resolver;
7
8 import java.nio.file.Paths;
9 import java.util.Map;
10 import java.util.UUID;
11 import java.util.concurrent.ConcurrentHashMap;
12
13 import dev.metaschema.core.metapath.item.node.IDocumentNodeItem;
14 import dev.metaschema.core.metapath.item.node.INodeItemFactory;
15 import dev.metaschema.core.util.ObjectUtils;
16 import dev.metaschema.databind.model.IBoundDefinitionModelAssembly;
17 import dev.metaschema.oscal.lib.OscalBindingContext;
18 import dev.metaschema.oscal.lib.model.Catalog;
19 import dev.metaschema.oscal.lib.model.control.AbstractParameter;
20 import dev.metaschema.oscal.lib.model.control.AbstractPart;
21 import dev.metaschema.oscal.lib.model.control.catalog.AbstractCatalogGroup;
22 import dev.metaschema.oscal.lib.model.control.catalog.AbstractControl;
23 import dev.metaschema.oscal.lib.model.metadata.AbstractProperty;
24 import dev.metaschema.oscal.lib.model.metadata.IProperty;
25 import dev.metaschema.oscal.lib.profile.resolver.support.IIdentifierMapper;
26 import edu.umd.cs.findbugs.annotations.NonNull;
27
28 public final class TestUtil {
29
30 @NonNull
31 public static final IIdentifierMapper UUID_CONCAT_ID_MAPPER = new IIdentifierMapper() {
32 private final Map<String, String> idToReassignmentMap = new ConcurrentHashMap<>();
33
34 @NonNull
35 private String reassign(@NonNull String identifier) {
36 String retval = idToReassignmentMap.get(identifier);
37 if (retval == null) {
38 retval = identifier + "-" + UUID.randomUUID().toString();
39 idToReassignmentMap.put(identifier, retval);
40 }
41 return retval;
42 }
43
44 @Override
45 public String mapRoleIdentifier(@NonNull String identifier) {
46 return reassign(identifier);
47 }
48
49 @Override
50 public String mapControlIdentifier(@NonNull String identifier) {
51 return reassign(identifier);
52 }
53
54 @Override
55 public String mapGroupIdentifier(@NonNull String identifier) {
56 return reassign(identifier);
57 }
58
59 @Override
60 public String mapParameterIdentifier(@NonNull String identifier) {
61 return reassign(identifier);
62 }
63
64 @Override
65 public @NonNull
66 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(System.getProperty("user.dir")).toUri()),
165 importedCatalog);
166 }
167 }