@@ -24,7 +24,7 @@ private NumberAdapters() {}
24
24
case "Negative" -> new NegativeAdapter (request , false );
25
25
case "NegativeOrZero" -> new NegativeAdapter (request , true );
26
26
case "Max" -> forMax (request );
27
- case "Min" -> new MinAdapter (request );
27
+ case "Min" -> forMin (request );
28
28
case "DecimalMax" -> new DecimalMaxAdapter (request );
29
29
case "DecimalMin" -> new DecimalMinAdapter (request );
30
30
case "Range" -> new RangeAdapter (request );
@@ -41,13 +41,12 @@ private static AbstractConstraintAdapter<? extends Number> forMax(AdapterCreateR
41
41
}
42
42
43
43
private static AbstractConstraintAdapter <? extends Number > forMin (AdapterCreateRequest request ) {
44
- // final String targetType = request.targetType();
45
- // return switch (targetType) {
46
- // case "BigDecimal" -> new MinBigDecimal(request);
47
- // case "BigInteger" -> new MinBigInteger(request);
48
- // default -> new MinAdapter(request);
49
- // };
50
- return new MinAdapter (request );
44
+ final String targetType = request .targetType ();
45
+ return switch (targetType ) {
46
+ case "BigDecimal" -> new MinBigDecimal (request );
47
+ case "BigInteger" -> new MinBigInteger (request );
48
+ default -> new MinAdapter (request );
49
+ };
51
50
}
52
51
53
52
@@ -162,16 +161,55 @@ public boolean isValid(BigInteger number) {
162
161
private static final class MinAdapter extends AbstractConstraintAdapter <Number > implements NumberAdapter <Number > {
163
162
164
163
private final long value ;
164
+ private final String targetType ;
165
165
166
166
MinAdapter (AdapterCreateRequest request ) {
167
167
super (request );
168
+ this .targetType = request .targetType ();
168
169
this .value = (long ) request .attribute ("value" );
169
170
}
170
171
171
172
@ Override
172
173
public boolean isValid (Number number ) {
173
- // null values are valid
174
- return number == null || NumberComparatorHelper .compare (number , value , LESS_THAN ) >= 0 ;
174
+ if (number == null ) {
175
+ return true ;
176
+ }
177
+ return switch (targetType ) {
178
+ case "Integer" , "Long" , "Short" , "Byte" -> number .longValue () >= value ;
179
+ case "Double" -> compareDouble (number .doubleValue (), value , LESS_THAN ) >= 0 ;
180
+ case "Float" -> compareFloat ((Float )number , value , LESS_THAN ) >= 0 ;
181
+ default -> throw new IllegalStateException ();
182
+ };
183
+ }
184
+ }
185
+
186
+ static final class MinBigDecimal extends AbstractConstraintAdapter <BigDecimal > implements NumberAdapter <BigDecimal > {
187
+
188
+ private final BigDecimal min ;
189
+
190
+ MinBigDecimal (AdapterCreateRequest request ) {
191
+ super (request );
192
+ this .min = new BigDecimal (String .valueOf (request .attribute ("value" )));
193
+ }
194
+
195
+ @ Override
196
+ public boolean isValid (BigDecimal number ) {
197
+ return number == null || number .compareTo (min ) >= 0 ;
198
+ }
199
+ }
200
+
201
+ static final class MinBigInteger extends AbstractConstraintAdapter <BigInteger > implements NumberAdapter <BigInteger > {
202
+
203
+ private final BigInteger min ;
204
+
205
+ MinBigInteger (AdapterCreateRequest request ) {
206
+ super (request );
207
+ this .min = new BigInteger (String .valueOf (request .attribute ("value" )));
208
+ }
209
+
210
+ @ Override
211
+ public boolean isValid (BigInteger number ) {
212
+ return number == null || number .compareTo (min ) >= 0 ;
175
213
}
176
214
}
177
215
0 commit comments