1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.testsupport.builder;
7   
8   import java.util.function.Consumer;
9   
10  import dev.metaschema.core.model.ISource;
11  import dev.metaschema.core.model.constraint.IConstraintSet;
12  import edu.umd.cs.findbugs.annotations.NonNull;
13  
14  /**
15   * A builder for creating {@link IConstraintSet} instances programmatically.
16   * <p>
17   * This builder is intended for test support, allowing constraint sets to be
18   * constructed without loading XML files.
19   */
20  public interface IConstraintSetBuilder {
21  
22    /**
23     * Set the source for the constraint set.
24     *
25     * @param source
26     *          the source information
27     * @return this builder
28     */
29    @NonNull
30    IConstraintSetBuilder source(@NonNull ISource source);
31  
32    /**
33     * Add an imported constraint set.
34     *
35     * @param imports
36     *          the constraint sets to import
37     * @return this builder
38     */
39    @NonNull
40    IConstraintSetBuilder imports(@NonNull IConstraintSet... imports);
41  
42    /**
43     * Add a context to the constraint set.
44     *
45     * @param contextConfigurer
46     *          a consumer that configures the context
47     * @return this builder
48     */
49    @NonNull
50    IConstraintSetBuilder context(@NonNull Consumer<IContextBuilder> contextConfigurer);
51  
52    /**
53     * Build the constraint set.
54     *
55     * @return the constructed constraint set
56     */
57    @NonNull
58    IConstraintSet build();
59  
60    /**
61     * Create a new constraint set builder.
62     *
63     * @return the builder
64     */
65    @NonNull
66    static IConstraintSetBuilder builder() {
67      return new ConstraintSetBuilder();
68    }
69  }