1
2
3
4
5
6 package gov.nist.secauto.metaschema.schemagen.json.impl;
7
8 import gov.nist.secauto.metaschema.core.model.IFlagInstance;
9 import gov.nist.secauto.metaschema.core.model.IModelDefinition;
10 import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
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.Stream;
16
17 import edu.umd.cs.findbugs.annotations.NonNull;
18 import edu.umd.cs.findbugs.annotations.Nullable;
19
20
21
22
23
24
25
26
27 public abstract class AbstractJsonSchemaModelDefinition<D extends IModelDefinition>
28 extends AbstractJsonSchemaDefinition<D>
29 implements IJsonSchemaModelDefinition {
30 @Nullable
31 private final IEnhancedQName jsonKeyFlagName;
32 @NonNull
33 private final List<IJsonSchemaPropertyFlag> flagProperties;
34
35
36
37
38
39
40
41
42
43
44
45
46 public AbstractJsonSchemaModelDefinition(
47 @NonNull D definition,
48 @Nullable IEnhancedQName jsonKeyFlagName,
49 @NonNull IJsonGenerationState state) {
50 super(definition, state);
51 this.jsonKeyFlagName = jsonKeyFlagName;
52 this.flagProperties = JsonSchemaHelper.buildFlagProperties(definition, jsonKeyFlagName, state);
53 }
54
55 @Override
56 public String generateDefinitionName(IJsonGenerationState state) {
57 return state.generateJsonSchemaDefinitionName(
58 getDefinition(),
59 jsonKeyFlagName == null ? null : state.toFlagName(jsonKeyFlagName),
60 null);
61 }
62
63 @Override
64 public IFlagInstance getJsonKeyFlag() {
65 return getDefinition().getJsonKey();
66 }
67
68 @Override
69 @Nullable
70 public IEnhancedQName getJsonKeyFlagName() {
71 return jsonKeyFlagName;
72 }
73
74 @Override
75 public List<IJsonSchemaPropertyFlag> getFlagProperties() {
76 return flagProperties;
77 }
78
79 @Override
80 public Stream<IJsonSchemaDefinable> collectDefinitions(
81 Set<IJsonSchemaDefinitionAssembly> visited,
82 IJsonGenerationState state) {
83 Stream<IJsonSchemaDefinable> retval = Stream.concat(
84 Stream.of(this),
85 getFlagProperties().stream()
86 .flatMap(property -> property.collectDefinitions(visited, state)));
87
88 IFlagInstance jsonKeyFlag = getJsonKeyFlag();
89 if (jsonKeyFlag != null) {
90 retval = Stream.concat(retval, Stream.of(state.getFlagDefinition(jsonKeyFlag.getDefinition())));
91 }
92
93 return ObjectUtils.notNull(retval);
94 }
95 }