1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.testsupport.builder;
7   
8   import dev.metaschema.core.testsupport.mocking.IMockFactory;
9   import edu.umd.cs.findbugs.annotations.NonNull;
10  
11  /**
12   * Represents a factory used to produce Metaschema module-based definitions and
13   * instances.
14   */
15  public interface IModuleMockFactory extends IMockFactory {
16    /**
17     * Get a new flag builder.
18     *
19     * @return the builder
20     */
21    @NonNull
22    default IFlagBuilder flag() {
23      return IFlagBuilder.builder();
24    }
25  
26    /**
27     * Get a new field builder.
28     *
29     * @return the builder
30     */
31    @NonNull
32    default IFieldBuilder field() {
33      return IFieldBuilder.builder();
34    }
35  
36    /**
37     * Get a new assembly builder.
38     *
39     * @return the builder
40     */
41    @NonNull
42    default IAssemblyBuilder assembly() {
43      return IAssemblyBuilder.builder();
44    }
45  
46    /**
47     * Get a new module builder.
48     *
49     * @return the builder
50     */
51    @NonNull
52    default IModuleBuilder module() {
53      return IModuleBuilder.builder();
54    }
55  
56    /**
57     * Create a reference to an assembly definition by name. The reference will be
58     * resolved when the module is built, allowing recursive assembly structures.
59     *
60     * @param name
61     *          the local name of the referenced assembly definition
62     * @return a builder that represents the reference
63     */
64    @NonNull
65    default IModelBuilder<?> assemblyRef(@NonNull String name) {
66      return new AssemblyReference(name);
67    }
68  
69    /**
70     * Create a reference to a field definition by name. The reference will be
71     * resolved when the module is built.
72     *
73     * @param name
74     *          the local name of the referenced field definition
75     * @return a builder that represents the reference
76     */
77    @NonNull
78    default IModelBuilder<?> fieldRef(@NonNull String name) {
79      return new FieldReference(name);
80    }
81  
82    /**
83     * Get a new constraint set builder.
84     *
85     * @return the builder
86     */
87    @NonNull
88    default IConstraintSetBuilder constraintSet() {
89      return IConstraintSetBuilder.builder();
90    }
91  }