1
2
3
4
5
6 package gov.nist.secauto.metaschema.schemagen.json.impl;
7
8 import com.fasterxml.jackson.databind.node.ObjectNode;
9
10 import gov.nist.secauto.metaschema.core.model.IChoiceGroupInstance;
11 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
12
13 import java.util.List;
14 import java.util.Set;
15 import java.util.stream.Collectors;
16 import java.util.stream.Stream;
17
18 import edu.umd.cs.findbugs.annotations.NonNull;
19
20
21
22
23
24
25 public class JsonSchemaPropertyChoiceGroup
26 extends AbstractJsonSchemaPropertyNamed<IChoiceGroupInstance> {
27 @NonNull
28 private final List<IJsonSchemaPropertyGrouped> choiceInstances;
29
30
31
32
33
34
35
36
37
38 public JsonSchemaPropertyChoiceGroup(
39 @NonNull IChoiceGroupInstance instance,
40 @NonNull IJsonGenerationState state) {
41 super(instance, instance.getGroupAsName() == null ? "[unknown]" : ObjectUtils.notNull(instance.getGroupAsName()));
42 this.choiceInstances = ObjectUtils.notNull(instance.getNamedModelInstances().stream()
43 .map(state::getJsonSchemaPropertyGrouped)
44 .collect(Collectors.toUnmodifiableList()));
45 }
46
47 @Override
48 public boolean isRequired() {
49 return getInstance().getMinOccurs() > 0;
50 }
51
52 @Override
53 public Stream<IJsonSchemaDefinable> collectDefinitions(
54 Set<IJsonSchemaDefinitionAssembly> visited,
55 IJsonGenerationState state) {
56 return ObjectUtils.notNull(choiceInstances.stream()
57 .flatMap(choice -> choice.collectDefinitions(visited, state)));
58 }
59
60 @Override
61 protected void generateMetadata(ObjectNode obj, IJsonGenerationState state) {
62
63 }
64
65 @Override
66 protected void generateBody(ObjectNode obj, IJsonGenerationState state) {
67 ICardinalityBehavior.behaviorFor(getInstance())
68 .generate(obj, getInstance(), choiceInstances, state);
69 assert !obj.isEmpty();
70 }
71 }