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 java.util.Set;
11  import java.util.stream.Stream;
12  
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  
15  /**
16   * A JSON schema property construction for a given Metaschema instance, which is
17   * part of a larger JSON schema.
18   */
19  public interface IJsonSchemaProperty {
20    /**
21     * Used to recursively collect definitions that are used within the model graph
22     * for descendants of this node.
23     *
24     * @param visited
25     *          the ancestor assembly definitions that have been visited
26     * @param state
27     *          the generation state used to generate this JSON schema
28     * @return a stream of JSON schema definition object referenced within
29     *         descendants within this node's graph
30     */
31    @NonNull
32    Stream<IJsonSchemaDefinable> collectDefinitions(
33        @NonNull Set<IJsonSchemaDefinitionAssembly> visited,
34        @NonNull IJsonGenerationState state);
35  
36    /**
37     * Generate the property contents.
38     *
39     * @param node
40     *          the property JSON object
41     * @param state
42     *          the schema generation state used for context
43     */
44    void generate(@NonNull ObjectNode node, @NonNull IJsonGenerationState state);
45  }