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 java.util.LinkedHashMap;
9   import java.util.LinkedList;
10  import java.util.List;
11  import java.util.Map;
12  
13  import javax.xml.namespace.QName;
14  
15  import edu.umd.cs.findbugs.annotations.NonNull;
16  
17  public class ValueConstraintSet implements IValueConstrained { // NOPMD - intentional
18    @SuppressWarnings("PMD.UseConcurrentHashMap") // need ordering
19    @NonNull
20    private final Map<QName, ILet> lets = new LinkedHashMap<>();
21    @NonNull
22    private final List<IConstraint> constraints = new LinkedList<>();
23    @NonNull
24    private final List<IAllowedValuesConstraint> allowedValuesConstraints = new LinkedList<>();
25    @NonNull
26    private final List<IMatchesConstraint> matchesConstraints = new LinkedList<>();
27    @NonNull
28    private final List<IIndexHasKeyConstraint> indexHasKeyConstraints = new LinkedList<>();
29    @NonNull
30    private final List<IExpectConstraint> expectConstraints = new LinkedList<>();
31  
32    @Override
33    public Map<QName, ILet> getLetExpressions() {
34      return lets;
35    }
36  
37    @Override
38    public ILet addLetExpression(ILet let) {
39      return lets.put(let.getName(), let);
40    }
41  
42    @Override
43    public List<IConstraint> getConstraints() {
44      synchronized (this) {
45        return constraints;
46      }
47    }
48  
49    @Override
50    public List<IAllowedValuesConstraint> getAllowedValuesConstraints() {
51      synchronized (this) {
52        return allowedValuesConstraints;
53      }
54    }
55  
56    @Override
57    public List<IMatchesConstraint> getMatchesConstraints() {
58      synchronized (this) {
59        return matchesConstraints;
60      }
61    }
62  
63    @Override
64    public List<IIndexHasKeyConstraint> getIndexHasKeyConstraints() {
65      synchronized (this) {
66        return indexHasKeyConstraints;
67      }
68    }
69  
70    @Override
71    public List<IExpectConstraint> getExpectConstraints() {
72      synchronized (this) {
73        return expectConstraints;
74      }
75    }
76  
77    @Override
78    public final void addConstraint(@NonNull IAllowedValuesConstraint constraint) {
79      synchronized (this) {
80        constraints.add(constraint);
81        allowedValuesConstraints.add(constraint);
82      }
83    }
84  
85    @Override
86    public final void addConstraint(@NonNull IMatchesConstraint constraint) {
87      synchronized (this) {
88        constraints.add(constraint);
89        matchesConstraints.add(constraint);
90      }
91    }
92  
93    @Override
94    public final void addConstraint(@NonNull IIndexHasKeyConstraint constraint) {
95      synchronized (this) {
96        constraints.add(constraint);
97        indexHasKeyConstraints.add(constraint);
98      }
99    }
100 
101   @Override
102   public final void addConstraint(@NonNull IExpectConstraint constraint) {
103     synchronized (this) {
104       constraints.add(constraint);
105       expectConstraints.add(constraint);
106     }
107   }
108 }