1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.schemagen.json.impl;
7   
8   import com.fasterxml.jackson.databind.node.ObjectNode;
9   
10  import java.util.List;
11  
12  import dev.metaschema.core.model.IFieldDefinition;
13  import dev.metaschema.core.qname.IEnhancedQName;
14  import edu.umd.cs.findbugs.annotations.NonNull;
15  import edu.umd.cs.findbugs.annotations.Nullable;
16  
17  /**
18   * Provides a means to generate a JSON schema based on a Metaschema field
19   * definition.
20   */
21  public class JsonSchemaDefinitionField
22      extends AbstractJsonSchemaModelDefinition<IFieldDefinition>
23      implements IJsonSchemaDefinitionField {
24    @NonNull
25    private final IDataTypeJsonSchema fieldValueDataType;
26  
27    /**
28     * Construct a new JSON schema definition based on a Metaschema module
29     * definition.
30     *
31     * @param definition
32     *          the Metaschema module definition
33     * @param jsonKeyFlagName
34     *          the JSON key flag to use with thsi definition or {@code null} if no
35     *          JSON key is used
36     * @param state
37     *          the JSON generation state
38     */
39    public JsonSchemaDefinitionField(
40        @NonNull IFieldDefinition definition,
41        @Nullable IEnhancedQName jsonKeyFlagName,
42        @NonNull IJsonGenerationState state) {
43      super(definition, jsonKeyFlagName, state);
44      this.fieldValueDataType = state.getDataTypeSchemaForDefinition(getDefinition());
45    }
46  
47    @Override
48    public List<? extends IJsonSchemaPropertyNamed> getNonValueProperties() {
49      return getFlagProperties();
50    }
51  
52    @Override
53    public IDataTypeJsonSchema getFieldValue() {
54      return fieldValueDataType;
55    }
56  
57    @Override
58    public void generateBody(ObjectNode node, IJsonGenerationState state) {
59      JsonSchemaHelper.generateFieldBody(this, node, state);
60    }
61  }