Skip to content

Commit 3a044cd

Browse files
authored
version 0.0.2 (melhorias) (#4)
1 parent a9721f0 commit 3a044cd

File tree

11 files changed

+466
-386
lines changed

11 files changed

+466
-386
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>com.bvilela.lib</groupId>
99
<artifactId>java-util-validation</artifactId>
10-
<version>0.0.1</version>
10+
<version>0.0.2</version>
1111
<name>java-util-validation</name>
1212

1313
<properties>

src/main/java/com/bvilela/utils/AnnotationUtils.java

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.bvilela.utils;
2+
3+
import java.lang.reflect.Field;
4+
import java.lang.reflect.InvocationTargetException;
5+
import java.lang.reflect.Method;
6+
import java.time.LocalDate;
7+
import java.util.Collections;
8+
import java.util.List;
9+
import java.util.Locale;
10+
import java.util.Objects;
11+
import java.util.Set;
12+
import java.util.stream.Collectors;
13+
14+
import javax.validation.ConstraintViolation;
15+
import javax.validation.Validation;
16+
17+
import com.bvilela.utils.annotation.javax.ValidParseDate;
18+
19+
public final class ValidationUtils {
20+
21+
private ValidationUtils() {
22+
}
23+
24+
public static <T> List<ConstraintViolation<Object>> validateDto(T dto) {
25+
Set<ConstraintViolation<Object>> violations = Validation.buildDefaultValidatorFactory().getValidator()
26+
.validate(dto);
27+
28+
if (violations.isEmpty()) {
29+
return Collections.emptyList();
30+
}
31+
32+
return violations.stream().map(e -> e).collect(Collectors.toList());
33+
}
34+
35+
public static <T> List<ConstraintViolation<Object>> validateParseDto(T dto) throws NoSuchMethodException,
36+
SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
37+
var violations = validateDto(dto);
38+
if (violations.isEmpty()) {
39+
parseDatesDto(dto);
40+
}
41+
return violations;
42+
}
43+
44+
private static <T> void parseDatesDto(T dto) throws NoSuchMethodException, SecurityException, IllegalAccessException,
45+
IllegalArgumentException, InvocationTargetException {
46+
String setMethodNameConverted = null;
47+
48+
for (Field field : dto.getClass().getDeclaredFields()) {
49+
ValidParseDate annotation = field.getDeclaredAnnotation(ValidParseDate.class);
50+
51+
if (Objects.nonNull(annotation) && annotation.parse()) {
52+
String fieldName = AppUtils.capitalize(field.getName());
53+
String getMethodName = "get".concat(fieldName);
54+
Method getMethod = dto.getClass().getMethod(getMethodName);
55+
56+
String value = (String) getMethod.invoke(dto);
57+
58+
if (Objects.nonNull(value)) {
59+
Locale locale = AppUtils.getLocale(annotation.locale());
60+
LocalDate valueConverted = AppUtils.parse(value, annotation.pattern(), locale);
61+
62+
setMethodNameConverted = "set".concat(fieldName).concat("Converted");
63+
Method setMethodConverted = dto.getClass().getMethod(setMethodNameConverted, LocalDate.class);
64+
setMethodConverted.invoke(dto, valueConverted);
65+
}
66+
67+
}
68+
}
69+
}
70+
71+
}

src/main/java/com/bvilela/utils/annotation/javax/ValidParseDate.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,7 @@
6363
String locale() default "pt_BR";
6464

6565
boolean parse() default false;
66-
66+
67+
boolean required() default true;
68+
6769
}

src/main/java/com/bvilela/utils/annotation/javax/impl/ValidParseDateImpl.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,48 @@ public class ValidParseDateImpl implements ConstraintValidator<ValidParseDate, O
1414

1515
private String pattern;
1616
private Locale locale;
17+
private boolean isRequired;
1718

1819
@Override
1920
public void initialize(ValidParseDate annotation) {
2021
this.pattern = annotation.pattern();
2122
this.locale = AppUtils.getLocale(annotation.locale());
23+
this.isRequired = annotation.required();
2224
}
2325

2426
@Override
2527
public boolean isValid(Object value, ConstraintValidatorContext context) {
2628
try {
27-
29+
2830
if (Objects.isNull(value)) {
29-
return false;
31+
overriteMessage(context);
32+
return !this.isRequired;
3033
}
31-
32-
boolean isString = value instanceof String;
34+
35+
boolean isString = value instanceof String;
3336
if (!isString) {
3437
throw new IllegalArgumentException("'@ValidParseDate' can use only in String field.");
3538
}
36-
39+
3740
var text = (String) value;
3841
if (text.isBlank()) {
39-
return false;
42+
overriteMessage(context);
43+
return !this.isRequired;
4044
}
4145

4246
AppUtils.parse(text, this.pattern, this.locale);
47+
4348
return true;
49+
4450
} catch (DateTimeParseException e) {
4551
return false;
4652
}
4753
}
4854

55+
private void overriteMessage(ConstraintValidatorContext context) {
56+
context.disableDefaultConstraintViolation();
57+
context.buildConstraintViolationWithTemplate(
58+
"{bvilela.lib.util.validation.ValidParseDate.messageRequired}").addConstraintViolation();
59+
}
60+
4961
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
bvilela.lib.util.validation.ValidParseDate.message=Value is a invalid date
1+
bvilela.lib.util.validation.ValidParseDate.message=Value is a invalid date
2+
bvilela.lib.util.validation.ValidParseDate.messageRequired=Field is required

src/test/java/com/bvilela/utils/TestGsonUtils.java renamed to src/test/java/com/bvilela/utils/GsonUtilsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
import org.junit.jupiter.api.Test;
66

7-
class TestGsonUtils {
7+
class GsonUtilsTest {
88

99
@Test
10-
void testGetGson() {
10+
void shouldGetGson() {
1111
assertNotNull(GsonUtils.getGson());
1212
}
1313

src/test/java/com/bvilela/utils/TestUtils.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/test/java/com/bvilela/utils/annotation/gson/TestNotSerialized.java renamed to src/test/java/com/bvilela/utils/annotation/gson/NotSerializedTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import lombok.NoArgsConstructor;
1111
import lombok.Setter;
1212

13-
class TestNotSerialized {
13+
class NotSerializedTest {
1414

1515
@Getter
1616
@Setter
@@ -24,7 +24,7 @@ private class myDTO1 {
2424
}
2525

2626
@Test
27-
void testJsonFieldNotSerialized() {
27+
void shouldJsonFieldNotSerialized() {
2828
var dto = new myDTO1();
2929
dto.setName("nameValue");
3030
dto.setNickName("nickNameValue");
@@ -46,7 +46,7 @@ private class myDTO2 {
4646
}
4747

4848
@Test
49-
void testJsonAllFieldsSerialized() {
49+
void shouldJsonAllFieldsSerialized() {
5050
var dto = new myDTO2();
5151
dto.setName("nameValue");
5252
dto.setNickName("nickNameValue");

0 commit comments

Comments
 (0)