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.LinkedList;
9   import java.util.List;
10  
11  import edu.umd.cs.findbugs.annotations.NonNull;
12  
13  /**
14   * Provides support for maintaining a set of Metaschema constraints.
15   */
16  @SuppressWarnings("PMD.CouplingBetweenObjects")
17  public class AssemblyConstraintSet
18      extends ValueConstraintSet
19      implements IModelConstrained {
20  
21    @NonNull
22    private final List<IIndexConstraint> indexConstraints = new LinkedList<>();
23    @NonNull
24    private final List<IUniqueConstraint> uniqueConstraints = new LinkedList<>();
25    @NonNull
26    private final List<ICardinalityConstraint> cardinalityConstraints = new LinkedList<>();
27  
28    @Override
29    public List<IIndexConstraint> getIndexConstraints() {
30      synchronized (this) {
31        return indexConstraints;
32      }
33    }
34  
35    @Override
36    public List<IUniqueConstraint> getUniqueConstraints() {
37      synchronized (this) {
38        return uniqueConstraints;
39      }
40    }
41  
42    @Override
43    public List<ICardinalityConstraint> getHasCardinalityConstraints() {
44      synchronized (this) {
45        return cardinalityConstraints;
46      }
47    }
48  
49    @Override
50    public final void addConstraint(@NonNull IIndexConstraint constraint) {
51      synchronized (this) {
52        getConstraints().add(constraint);
53        indexConstraints.add(constraint);
54      }
55    }
56  
57    @Override
58    public final void addConstraint(@NonNull IUniqueConstraint constraint) {
59      synchronized (this) {
60        getConstraints().add(constraint);
61        uniqueConstraints.add(constraint);
62      }
63    }
64  
65    @Override
66    public final void addConstraint(@NonNull ICardinalityConstraint constraint) {
67      synchronized (this) {
68        getConstraints().add(constraint);
69        cardinalityConstraints.add(constraint);
70      }
71    }
72  
73  }