1
2
3
4
5
6 package dev.metaschema.core.model.constraint;
7
8 import dev.metaschema.core.metapath.IMetapathExpression;
9 import dev.metaschema.core.model.constraint.impl.DefaultReportConstraint;
10 import dev.metaschema.core.util.ObjectUtils;
11 import edu.umd.cs.findbugs.annotations.NonNull;
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 public interface IReportConstraint extends IConfigurableMessageConstraint {
32
33
34
35 @NonNull
36 Level DEFAULT_LEVEL = Level.INFORMATIONAL;
37
38 @Override
39 default Type getType() {
40 return Type.REPORT;
41 }
42
43
44
45
46
47
48
49
50 @NonNull
51 IMetapathExpression getTest();
52
53 @Override
54 default <T, R> R accept(IConstraintVisitor<T, R> visitor, T state) {
55 return visitor.visitReportConstraint(this, state);
56 }
57
58
59
60
61
62
63 @NonNull
64 static Builder builder() {
65 return new Builder();
66 }
67
68
69
70
71 final class Builder
72 extends AbstractConfigurableMessageConstraintBuilder<Builder, IReportConstraint> {
73 private IMetapathExpression test;
74 private boolean levelSet;
75
76 private Builder() {
77
78 }
79
80
81
82
83
84
85
86
87
88
89 @NonNull
90 public Builder test(@NonNull IMetapathExpression test) {
91 this.test = test;
92 return this;
93 }
94
95 @Override
96 protected Builder getThis() {
97 return this;
98 }
99
100
101
102
103
104
105
106 @Override
107 @NonNull
108 public Builder level(@NonNull Level level) {
109 this.levelSet = true;
110 return super.level(level);
111 }
112
113 @Override
114 @NonNull
115 protected Level getLevel() {
116 return levelSet ? super.getLevel() : DEFAULT_LEVEL;
117 }
118
119 @Override
120 protected void validate() {
121 super.validate();
122
123 ObjectUtils.requireNonNull(getTest());
124 }
125
126 private IMetapathExpression getTest() {
127 return test;
128 }
129
130 @Override
131 protected IReportConstraint newInstance() {
132 return new DefaultReportConstraint(
133 getId(),
134 getFormalName(),
135 getDescription(),
136 ObjectUtils.notNull(getSource()),
137 getLevel(),
138 getTarget(),
139 getProperties(),
140 ObjectUtils.requireNonNull(getTest()),
141 getMessage(),
142 getRemarks());
143 }
144 }
145 }