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.model.ISource;
9   import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
10  
11  import java.util.List;
12  import java.util.Map;
13  
14  import edu.umd.cs.findbugs.annotations.NonNull;
15  
16  /**
17   * Represents a container of rules constraining the effective model of a
18   * Metaschema field or flag data instance.
19   */
20  public interface IValueConstrained {
21    /**
22     * Get information about the resource the constraints were loaded from.
23     *
24     * @return the source information
25     */
26    @NonNull
27    ISource getSource();
28  
29    /**
30     * Retrieve the ordered collection of constraints.
31     *
32     * @return the constraints or an empty list
33     */
34    @NonNull
35    List<? extends IConstraint> getConstraints();
36  
37    /**
38     * Get the collection of let expressions, if any.
39     *
40     * @return the constraints or an empty list
41     */
42    @NonNull
43    Map<IEnhancedQName, ILet> getLetExpressions();
44  
45    /**
46     * Get the collection of allowed value constraints, if any.
47     *
48     * @return the constraints or an empty list
49     */
50    @NonNull
51    List<? extends IAllowedValuesConstraint> getAllowedValuesConstraints();
52  
53    /**
54     * Get the collection of matches constraints, if any.
55     *
56     * @return the constraints or an empty list
57     */
58    @NonNull
59    List<? extends IMatchesConstraint> getMatchesConstraints();
60  
61    /**
62     * Get the collection of index key reference constraints, if any.
63     *
64     * @return the constraints or an empty list
65     */
66    @NonNull
67    List<? extends IIndexHasKeyConstraint> getIndexHasKeyConstraints();
68  
69    /**
70     * Get the collection of expect constraints, if any.
71     *
72     * @return the constraints or an empty list
73     */
74    @NonNull
75    List<? extends IExpectConstraint> getExpectConstraints();
76  
77    /**
78     * Add a new let expression.
79     *
80     * @param let
81     *          the let statement to add
82     * @return the original let with the same name or {@code null} if no let existed
83     *         with the same name
84     */
85    ILet addLetExpression(@NonNull ILet let);
86  
87    /**
88     * Add a new constraint.
89     *
90     * @param constraint
91     *          the constraint to add
92     */
93    void addConstraint(@NonNull IAllowedValuesConstraint constraint);
94  
95    /**
96     * Add a new constraint.
97     *
98     * @param constraint
99     *          the constraint to add
100    */
101   void addConstraint(@NonNull IMatchesConstraint constraint);
102 
103   /**
104    * Add a new constraint.
105    *
106    * @param constraint
107    *          the constraint to add
108    */
109   void addConstraint(@NonNull IIndexHasKeyConstraint constraint);
110 
111   /**
112    * Add a new constraint.
113    *
114    * @param constraint
115    *          the constraint to add
116    */
117   void addConstraint(@NonNull IExpectConstraint constraint);
118 }