Skip to content

Commit 2956b6c

Browse files
committed
refactor: mark validations annotations as @repeatable.
1 parent 7c86e70 commit 2956b6c

File tree

6 files changed

+40
-18
lines changed

6 files changed

+40
-18
lines changed

src/main/java/ru/mystamps/web/feature/series/AddSeriesForm.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,14 @@
5757
imageUrlFieldName = DownloadImageInterceptor.IMAGE_URL_FIELD_NAME,
5858
groups = AddSeriesForm.ImageUrl1Checks.class
5959
)
60-
@NotNullIfFirstField.List({
61-
@NotNullIfFirstField(
62-
first = "month", second = "year", message = "{month.requires.year}",
63-
groups = AddSeriesForm.ReleaseDate1Checks.class
64-
),
65-
@NotNullIfFirstField(
66-
first = "day", second = "month", message = "{day.requires.month}",
67-
groups = AddSeriesForm.ReleaseDate1Checks.class
68-
)
69-
})
60+
@NotNullIfFirstField(
61+
first = "month", second = "year", message = "{month.requires.year}",
62+
groups = AddSeriesForm.ReleaseDate1Checks.class
63+
)
64+
@NotNullIfFirstField(
65+
first = "day", second = "month", message = "{day.requires.month}",
66+
groups = AddSeriesForm.ReleaseDate1Checks.class
67+
)
7068
@ReleaseDateIsNotInFuture(groups = AddSeriesForm.ReleaseDate3Checks.class)
7169
public class AddSeriesForm implements AddSeriesDto, HasImageOrImageUrl, NullableImageUrl {
7270

src/main/java/ru/mystamps/web/feature/series/sale/AddSeriesSalesForm.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,8 @@
3535
// @todo #678 Add integration tests for price and alternative price: both or none are required
3636
@Getter
3737
@Setter
38-
@FieldsMismatch.List({
39-
@FieldsMismatch(
40-
first = "sellerId", second = "buyerId", message = "{seller.buyer.match}"
41-
),
42-
@FieldsMismatch(
43-
first = "currency", second = "altCurrency", message = "{currencies.prices.match}"
44-
)
45-
})
38+
@FieldsMismatch(first = "sellerId", second = "buyerId", message = "{seller.buyer.match}")
39+
@FieldsMismatch(first = "currency", second = "altCurrency", message = "{currencies.prices.match}")
4640
@BothOrNoneRequired(
4741
first = "altPrice",
4842
second = "altCurrency",

src/main/java/ru/mystamps/web/support/beanvalidation/BothOrNoneRequired.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javax.validation.Constraint;
2121
import javax.validation.Payload;
2222
import java.lang.annotation.Documented;
23+
import java.lang.annotation.Repeatable;
2324
import java.lang.annotation.Retention;
2425
import java.lang.annotation.Target;
2526

@@ -29,6 +30,7 @@
2930

3031
@Target({ TYPE, ANNOTATION_TYPE })
3132
@Retention(RUNTIME)
33+
@Repeatable(BothOrNoneRequired.List.class)
3234
@Constraint(validatedBy = BothOrNoneRequiredValidator.class)
3335
@Documented
3436
public @interface BothOrNoneRequired {
@@ -38,4 +40,15 @@
3840

3941
String first();
4042
String second();
43+
44+
/**
45+
* Allow to place several {@code @BothOrNoneRequired} annotations on the same element.
46+
*/
47+
@Target({ ANNOTATION_TYPE, TYPE })
48+
@Retention(RUNTIME)
49+
@Documented
50+
@interface List {
51+
BothOrNoneRequired[] value();
52+
}
53+
4154
}

src/main/java/ru/mystamps/web/support/beanvalidation/FieldsMatch.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javax.validation.Constraint;
2121
import javax.validation.Payload;
2222
import java.lang.annotation.Documented;
23+
import java.lang.annotation.Repeatable;
2324
import java.lang.annotation.Retention;
2425
import java.lang.annotation.Target;
2526

@@ -29,6 +30,7 @@
2930

3031
@Target({ TYPE, ANNOTATION_TYPE })
3132
@Retention(RUNTIME)
33+
@Repeatable(FieldsMatch.List.class)
3234
@Constraint(validatedBy = FieldsMatchValidator.class)
3335
@Documented
3436
public @interface FieldsMatch {
@@ -38,4 +40,15 @@
3840

3941
String first();
4042
String second();
43+
44+
/**
45+
* Allow to place several {@code @FieldsMatch} annotations on the same element.
46+
*/
47+
@Target({ ANNOTATION_TYPE, TYPE })
48+
@Retention(RUNTIME)
49+
@Documented
50+
@interface List {
51+
FieldsMatch[] value();
52+
}
53+
4154
}

src/main/java/ru/mystamps/web/support/beanvalidation/FieldsMismatch.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javax.validation.Constraint;
2121
import javax.validation.Payload;
2222
import java.lang.annotation.Documented;
23+
import java.lang.annotation.Repeatable;
2324
import java.lang.annotation.Retention;
2425
import java.lang.annotation.Target;
2526

@@ -28,6 +29,7 @@
2829
import static java.lang.annotation.RetentionPolicy.RUNTIME;
2930

3031
@Target({ TYPE, ANNOTATION_TYPE })
32+
@Repeatable(FieldsMismatch.List.class)
3133
@Retention(RUNTIME)
3234
@Constraint(validatedBy = FieldsMismatchValidator.class)
3335
@Documented

src/main/java/ru/mystamps/web/support/beanvalidation/NotNullIfFirstField.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javax.validation.Constraint;
2121
import javax.validation.Payload;
2222
import java.lang.annotation.Documented;
23+
import java.lang.annotation.Repeatable;
2324
import java.lang.annotation.Retention;
2425
import java.lang.annotation.Target;
2526

@@ -28,6 +29,7 @@
2829
import static java.lang.annotation.RetentionPolicy.RUNTIME;
2930

3031
@Target({ TYPE, ANNOTATION_TYPE })
32+
@Repeatable(NotNullIfFirstField.List.class)
3133
@Retention(RUNTIME)
3234
@Constraint(validatedBy = NotNullIfFirstFieldValidator.class)
3335
@Documented

0 commit comments

Comments
 (0)