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