1
7 package org.hibernate.validator.internal.engine;
8
9 import static org.hibernate.validator.internal.util.CollectionHelper.newHashSet;
10
11 import java.util.HashSet;
12 import java.util.Set;
13
14 import org.hibernate.validator.internal.metadata.aggregated.rule.MethodConfigurationRule;
15 import org.hibernate.validator.internal.metadata.aggregated.rule.OverridingMethodMustNotAlterParameterConstraints;
16 import org.hibernate.validator.internal.metadata.aggregated.rule.ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue;
17 import org.hibernate.validator.internal.metadata.aggregated.rule.ParallelMethodsMustNotDefineParameterConstraints;
18 import org.hibernate.validator.internal.metadata.aggregated.rule.ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine;
19 import org.hibernate.validator.internal.metadata.aggregated.rule.VoidMethodsMustNotBeReturnValueConstrained;
20 import org.hibernate.validator.internal.util.CollectionHelper;
21 import org.hibernate.validator.internal.util.stereotypes.Immutable;
22
23
39 public class MethodValidationConfiguration {
40
41 private boolean allowOverridingMethodAlterParameterConstraint = false;
42 private boolean allowMultipleCascadedValidationOnReturnValues = false;
43 private boolean allowParallelMethodsDefineParameterConstraints = false;
44
45 @Immutable
46 private Set<MethodConfigurationRule> configuredRuleSet;
47
48 private MethodValidationConfiguration(boolean allowOverridingMethodAlterParameterConstraint, boolean allowMultipleCascadedValidationOnReturnValues,
49 boolean allowParallelMethodsDefineParameterConstraints) {
50 this.allowOverridingMethodAlterParameterConstraint = allowOverridingMethodAlterParameterConstraint;
51 this.allowMultipleCascadedValidationOnReturnValues = allowMultipleCascadedValidationOnReturnValues;
52 this.allowParallelMethodsDefineParameterConstraints = allowParallelMethodsDefineParameterConstraints;
53
54 this.configuredRuleSet = buildConfiguredRuleSet( allowOverridingMethodAlterParameterConstraint, allowMultipleCascadedValidationOnReturnValues,
55 allowParallelMethodsDefineParameterConstraints );
56 }
57
58
62 public boolean isAllowOverridingMethodAlterParameterConstraint() {
63 return this.allowOverridingMethodAlterParameterConstraint;
64 }
65
66
70 public boolean isAllowMultipleCascadedValidationOnReturnValues() {
71 return this.allowMultipleCascadedValidationOnReturnValues;
72 }
73
74
77 public boolean isAllowParallelMethodsDefineParameterConstraints() {
78 return this.allowParallelMethodsDefineParameterConstraints;
79 }
80
81
87 public Set<MethodConfigurationRule> getConfiguredRuleSet() {
88 return configuredRuleSet;
89 }
90
91 private static Set<MethodConfigurationRule> buildConfiguredRuleSet(boolean allowOverridingMethodAlterParameterConstraint,
92 boolean allowMultipleCascadedValidationOnReturnValues, boolean allowParallelMethodsDefineParameterConstraints) {
93 HashSet<MethodConfigurationRule> result = newHashSet( 5 );
94
95 if ( !allowOverridingMethodAlterParameterConstraint ) {
96 result.add( new OverridingMethodMustNotAlterParameterConstraints() );
97 }
98
99 if ( !allowParallelMethodsDefineParameterConstraints ) {
100 result.add( new ParallelMethodsMustNotDefineParameterConstraints() );
101 }
102
103 result.add( new VoidMethodsMustNotBeReturnValueConstrained() );
104
105 if ( !allowMultipleCascadedValidationOnReturnValues ) {
106 result.add( new ReturnValueMayOnlyBeMarkedOnceAsCascadedPerHierarchyLine() );
107 }
108
109 result.add( new ParallelMethodsMustNotDefineGroupConversionForCascadedReturnValue() );
110
111 return CollectionHelper.toImmutableSet( result );
112 }
113
114 @Override
115 public int hashCode() {
116 final int prime = 31;
117 int result = 1;
118 result = prime * result + ( allowMultipleCascadedValidationOnReturnValues ? 1231 : 1237 );
119 result = prime * result + ( allowOverridingMethodAlterParameterConstraint ? 1231 : 1237 );
120 result = prime * result + ( allowParallelMethodsDefineParameterConstraints ? 1231 : 1237 );
121 return result;
122 }
123
124 @Override
125 public boolean equals(Object obj) {
126 if ( this == obj ) {
127 return true;
128 }
129 if ( obj == null ) {
130 return false;
131 }
132 if ( getClass() != obj.getClass() ) {
133 return false;
134 }
135 MethodValidationConfiguration other = (MethodValidationConfiguration) obj;
136 if ( allowMultipleCascadedValidationOnReturnValues != other.allowMultipleCascadedValidationOnReturnValues ) {
137 return false;
138 }
139 if ( allowOverridingMethodAlterParameterConstraint != other.allowOverridingMethodAlterParameterConstraint ) {
140 return false;
141 }
142 if ( allowParallelMethodsDefineParameterConstraints != other.allowParallelMethodsDefineParameterConstraints ) {
143 return false;
144 }
145 return true;
146 }
147
148 public static class Builder {
149
150 private boolean allowOverridingMethodAlterParameterConstraint = false;
151 private boolean allowMultipleCascadedValidationOnReturnValues = false;
152 private boolean allowParallelMethodsDefineParameterConstraints = false;
153
154 public Builder() {
155 }
156
157 public Builder(MethodValidationConfiguration template) {
158 allowOverridingMethodAlterParameterConstraint = template.allowOverridingMethodAlterParameterConstraint;
159 allowMultipleCascadedValidationOnReturnValues = template.allowMultipleCascadedValidationOnReturnValues;
160 allowParallelMethodsDefineParameterConstraints = template.allowParallelMethodsDefineParameterConstraints;
161 }
162
163
178 public Builder allowOverridingMethodAlterParameterConstraint(boolean allow) {
179 this.allowOverridingMethodAlterParameterConstraint = allow;
180 return this;
181 }
182
183
196 public Builder allowMultipleCascadedValidationOnReturnValues(boolean allow) {
197 this.allowMultipleCascadedValidationOnReturnValues = allow;
198 return this;
199 }
200
201
215 public Builder allowParallelMethodsDefineParameterConstraints(boolean allow) {
216 this.allowParallelMethodsDefineParameterConstraints = allow;
217 return this;
218 }
219
220 public boolean isAllowOverridingMethodAlterParameterConstraint() {
221 return allowOverridingMethodAlterParameterConstraint;
222 }
223
224 public boolean isAllowMultipleCascadedValidationOnReturnValues() {
225 return allowMultipleCascadedValidationOnReturnValues;
226 }
227
228 public boolean isAllowParallelMethodsDefineParameterConstraints() {
229 return allowParallelMethodsDefineParameterConstraints;
230 }
231
232 public MethodValidationConfiguration build() {
233 return new MethodValidationConfiguration(
234 allowOverridingMethodAlterParameterConstraint,
235 allowMultipleCascadedValidationOnReturnValues,
236 allowParallelMethodsDefineParameterConstraints
237 );
238 }
239 }
240 }
241