1
2
3
4
5
6 package gov.nist.secauto.metaschema.databind.model.impl;
7
8 import gov.nist.secauto.metaschema.core.model.ISource;
9 import gov.nist.secauto.metaschema.core.model.constraint.IModelConstrained;
10 import gov.nist.secauto.metaschema.core.model.constraint.IValueConstrained;
11 import gov.nist.secauto.metaschema.databind.model.annotations.AssemblyConstraints;
12 import gov.nist.secauto.metaschema.databind.model.annotations.ValueConstraints;
13
14 import java.util.Arrays;
15
16 import edu.umd.cs.findbugs.annotations.NonNull;
17 import edu.umd.cs.findbugs.annotations.Nullable;
18
19 public final class ConstraintSupport {
20 private ConstraintSupport() {
21
22 }
23
24
25
26
27
28
29
30
31
32
33
34
35 @SuppressWarnings("null")
36 public static void parse(
37 @Nullable ValueConstraints valueAnnotation,
38 @NonNull ISource source,
39 @NonNull IValueConstrained set) {
40 if (valueAnnotation != null) {
41 Arrays.stream(valueAnnotation.lets())
42 .map(annotation -> ConstraintFactory.newLetExpression(annotation, source))
43 .forEachOrdered(set::addLetExpression);
44 Arrays.stream(valueAnnotation.allowedValues())
45 .map(annotation -> ConstraintFactory.newAllowedValuesConstraint(annotation, source))
46 .forEachOrdered(set::addConstraint);
47 Arrays.stream(valueAnnotation.matches())
48 .map(annotation -> ConstraintFactory.newMatchesConstraint(annotation, source))
49 .forEachOrdered(set::addConstraint);
50 Arrays.stream(valueAnnotation.indexHasKey())
51 .map(annotation -> ConstraintFactory.newIndexHasKeyConstraint(annotation, source))
52 .forEachOrdered(set::addConstraint);
53 Arrays.stream(valueAnnotation.expect())
54 .map(annotation -> ConstraintFactory.newExpectConstraint(annotation, source))
55 .forEachOrdered(set::addConstraint);
56 }
57 }
58
59
60
61
62
63
64
65
66
67
68
69
70 @SuppressWarnings("null")
71 public static void parse(
72 @Nullable AssemblyConstraints assemblyAnnotation,
73 @NonNull ISource source,
74 @NonNull IModelConstrained set) {
75 if (assemblyAnnotation != null) {
76 Arrays.stream(assemblyAnnotation.index())
77 .map(annotation -> ConstraintFactory.newIndexConstraint(annotation, source))
78 .forEachOrdered(set::addConstraint);
79
80 Arrays.stream(assemblyAnnotation.unique())
81 .map(annotation -> ConstraintFactory.newUniqueConstraint(annotation, source))
82 .forEachOrdered(set::addConstraint);
83
84 Arrays.stream(assemblyAnnotation.cardinality())
85 .map(annotation -> ConstraintFactory.newCardinalityConstraint(annotation, source))
86 .forEachOrdered(set::addConstraint);
87 }
88 }
89 }