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