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.Set;
11  import java.util.stream.Stream;
12  
13  import dev.metaschema.core.model.IFlagDefinition;
14  import dev.metaschema.core.util.ObjectUtils;
15  import edu.umd.cs.findbugs.annotations.NonNull;
16  
17  /**
18   * Provides a means to generate a JSON schema based on a Metaschema flag
19   * definition.
20   */
21  public class JsonSchemaDefinitionFlag
22      extends AbstractJsonSchemaDefinition<IFlagDefinition> {
23  
24    /**
25     * Construct a new JSON schema definition based on a Metaschema module
26     * definition.
27     *
28     * @param definition
29     *          the Metaschema module definition
30     * @param state
31     *          the JSON generation state
32     */
33    public JsonSchemaDefinitionFlag(
34        @NonNull IFlagDefinition definition,
35        @NonNull IJsonGenerationState state) {
36      super(definition, state);
37    }
38  
39    @Override
40    public Stream<IJsonSchemaDefinable> collectDefinitions(
41        Set<IJsonSchemaDefinitionAssembly> visited,
42        IJsonGenerationState state) {
43      return ObjectUtils.notNull(Stream.of(this));
44    }
45  
46    @Override
47    public String generateDefinitionName(IJsonGenerationState state) {
48      return state.generateJsonSchemaDefinitionName(getDefinition(), null, null);
49    }
50  
51    @Override
52    public void generateBody(ObjectNode node, IJsonGenerationState state) {
53      IDataTypeJsonSchema schema = state.getDataTypeSchemaForDefinition(getDefinition());
54      schema.generateJsonSchemaOrDefinitionRef(node, state);
55    }
56  }