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  }