1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.core.model.constraint;
7   
8   import gov.nist.secauto.metaschema.core.metapath.item.node.IModuleNodeItem;
9   import gov.nist.secauto.metaschema.core.model.IModelElementVisitor;
10  import gov.nist.secauto.metaschema.core.model.ISource;
11  
12  import java.util.Collection;
13  
14  import edu.umd.cs.findbugs.annotations.NonNull;
15  
16  /**
17   * A set of constraints targeted at the contents of a Metaschema module.
18   */
19  public interface IConstraintSet {
20    /**
21     * Get information about where the constraint set was sourced from.
22     *
23     * @return the source information
24     */
25    @NonNull
26    ISource getSource();
27  
28    /**
29     * Get constraint sets imported by this constraint set.
30     *
31     * @return the imported constraint sets
32     */
33    @NonNull
34    Collection<? extends IConstraintSet> getImportedConstraintSets();
35  
36    /**
37     * Apply the constraints associated with this constraint set to the provided
38     * module, if applicable.
39     * <p>
40     * Callers of this method are required to track which definitions have been
41     * previously targeted based on the result of this method and to provide these
42     * to subsequent calls of this method targeting different modules. This approach
43     * ensures that a given constraint is not applied more than once.
44     *
45     * @param moduleItem
46     *          the module node item to apply applicable constraints to
47     * @param visitor
48     *          the visitor used to apply constraints to target definitions
49     */
50    void applyConstraintsForModule(
51        @NonNull IModuleNodeItem moduleItem,
52        @NonNull IModelElementVisitor<ITargetedConstraints, Void> visitor);
53  }