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.IFieldInstance;
11 import gov.nist.secauto.metaschema.core.model.IFieldInstanceAbsolute;
12 import gov.nist.secauto.metaschema.core.model.IFlagInstance;
13 import gov.nist.secauto.metaschema.core.util.CollectionUtil;
14
15 import java.util.Set;
16 import java.util.stream.Stream;
17
18 import edu.umd.cs.findbugs.annotations.NonNull;
19
20
21
22
23
24
25 public class JsonSchemaPropertyField
26 extends AbstractJsonSchemaPropertyNamed<IFieldInstanceAbsolute> {
27 @NonNull
28 private final IJsonSchemaModelDefinition definitionSchema;
29 private final IFlagInstance jsonKey;
30
31
32
33
34
35
36
37
38
39 public JsonSchemaPropertyField(
40 @NonNull IFieldInstanceAbsolute instance,
41 @NonNull IJsonGenerationState state) {
42 super(instance, instance.getJsonName());
43 this.jsonKey = instance.getJsonKey();
44 this.definitionSchema = state.getFieldDefinition(
45 instance.getDefinition(),
46 jsonKey == null ? null : jsonKey.getQName());
47 }
48
49 @Override
50 public boolean isRequired() {
51 return getInstance().getMinOccurs() > 0;
52 }
53
54 @Override
55 public Stream<IJsonSchemaDefinable> collectDefinitions(
56 Set<IJsonSchemaDefinitionAssembly> visited,
57 IJsonGenerationState state) {
58 return definitionSchema.collectDefinitions(visited, state);
59 }
60
61 @Override
62 protected void generateMetadata(ObjectNode obj, IJsonGenerationState state) {
63 IFieldInstance instance = getInstance();
64 JsonSchemaHelper.generateTitle(instance, obj);
65 JsonSchemaHelper.generateDescription(instance, obj);
66
67 JsonSchemaHelper.generateDefault(instance, obj);
68 }
69
70 @Override
71 protected void generateBody(ObjectNode obj, IJsonGenerationState state) {
72 ICardinalityBehavior.behaviorFor(getInstance())
73 .generate(obj, getInstance(), CollectionUtil.singleton(definitionSchema), state);
74 assert !obj.isEmpty();
75 }
76 }