Skip to content

Commit 6698b83

Browse files
authored
Merge pull request #17 from avaje/feature/AdapterBuildContext
Move the adapter builder methods onto new AdapterBuildContext interface (in the adapter package)
2 parents 70302d2 + 25686b3 commit 6698b83

File tree

7 files changed

+28
-14
lines changed

7 files changed

+28
-14
lines changed

validator/src/main/java/io/avaje/validation/Validator.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Map;
77
import java.util.ServiceLoader;
88

9+
import io.avaje.validation.adapter.AdapterBuildContext;
910
import io.avaje.validation.adapter.AnnotationValidationAdapter;
1011
import io.avaje.validation.adapter.ValidationAdapter;
1112
import io.avaje.validation.adapter.ValidatorComponent;
@@ -25,12 +26,6 @@ static Builder builder() {
2526
}
2627

2728

28-
<T> ValidationAdapter<T> adapter(Class<T> cls);
29-
30-
<T> ValidationAdapter<T> adapter(Type type);
31-
32-
<T> AnnotationValidationAdapter<T> adapter(Class<? extends Annotation> cls, Map<String, Object> attributes);
33-
3429
/** Build the Validator instance adding ValidationAdapter, Factory or AdapterBuilder. */
3530
interface Builder {
3631

@@ -63,7 +58,7 @@ interface Builder {
6358
interface AdapterBuilder {
6459

6560
/** Create a ValidationAdapter given the Validator instance. */
66-
ValidationAdapter<?> build(Validator jsonb);
61+
ValidationAdapter<?> build(AdapterBuildContext ctx);
6762
}
6863

6964
/** Components register JsonAdapters Validator.Builder */
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.avaje.validation.adapter;
2+
3+
import java.lang.annotation.Annotation;
4+
import java.lang.reflect.Type;
5+
import java.util.Map;
6+
7+
public interface AdapterBuildContext {
8+
9+
<T> ValidationAdapter<T> adapter(Class<T> cls);
10+
11+
<T> ValidationAdapter<T> adapter(Type type);
12+
13+
<T> AnnotationValidationAdapter<T> adapter(Class<? extends Annotation> cls, Map<String, Object> attributes);
14+
15+
}

validator/src/main/java/io/avaje/validation/adapter/ValidationAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ default AnnotationValidationAdapter<T> andThen(ValidationAdapter<? super T> afte
5656
}
5757

5858
/** Factory for creating a ValidationAdapter. */
59-
public interface Factory {
59+
interface Factory {
6060

6161
/**
6262
* Create and return a ValidationAdapter given the type and annotations or return null.
6363
*
6464
* <p>Returning null means that the adapter could be created by another factory.
6565
*/
66-
ValidationAdapter<?> create(Type type, Validator jsonb);
66+
ValidationAdapter<?> create(Type type, AdapterBuildContext ctx);
6767
}
6868
}

validator/src/main/java/io/avaje/validation/core/DValidator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
import java.util.concurrent.ConcurrentHashMap;
1515

1616
import io.avaje.validation.Validator;
17+
import io.avaje.validation.adapter.AdapterBuildContext;
1718
import io.avaje.validation.adapter.AnnotationValidationAdapter;
1819
import io.avaje.validation.adapter.ValidationAdapter;
1920
import io.avaje.validation.adapter.ValidatorComponent;
2021
import io.avaje.validation.adapter.AnnotationValidationAdapter.Factory;
2122

2223
/** Default implementation of Validator. */
23-
final class DValidator implements Validator {
24+
final class DValidator implements Validator, AdapterBuildContext {
2425

2526
private final CoreAdapterBuilder builder;
2627
private final Map<Type, DValidationType<?>> typeCache = new ConcurrentHashMap<>();
@@ -162,7 +163,7 @@ static <T> ValidationAdapter.Factory newAdapterFactory(
162163
static <T> ValidationAdapter.Factory newAdapterFactory(Type type, AdapterBuilder builder) {
163164
requireNonNull(type);
164165
requireNonNull(builder);
165-
return (targetType, jsonb) -> simpleMatch(type, targetType) ? builder.build(jsonb) : null;
166+
return (targetType, ctx) -> simpleMatch(type, targetType) ? builder.build(ctx) : null;
166167
}
167168
}
168169

validator/src/test/java/io/avaje/validation/core/AddressValidationAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Map;
44

55
import io.avaje.validation.Validator;
6+
import io.avaje.validation.adapter.AdapterBuildContext;
67
import io.avaje.validation.adapter.AnnotationValidationAdapter;
78
import io.avaje.validation.adapter.ValidationAdapter;
89
import io.avaje.validation.adapter.ValidationRequest;
@@ -15,7 +16,7 @@ public final class AddressValidationAdapter implements ValidationAdapter<Address
1516
// private final AnnotationValidationAdapter<String> line2Adapter;
1617
// private final AnnotationValidationAdapter<Long> longValueAdapter;
1718

18-
public AddressValidationAdapter(Validator validator) {
19+
public AddressValidationAdapter(AdapterBuildContext validator) {
1920
this.line1Adapter =
2021
validator
2122
.<String>adapter(NotNull.class, Map.of("message", "null"))

validator/src/test/java/io/avaje/validation/core/ContactValidationAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Map;
44

55
import io.avaje.validation.Validator;
6+
import io.avaje.validation.adapter.AdapterBuildContext;
67
import io.avaje.validation.adapter.AnnotationValidationAdapter;
78
import io.avaje.validation.adapter.ValidationAdapter;
89
import io.avaje.validation.adapter.ValidationRequest;
@@ -15,7 +16,7 @@ public final class ContactValidationAdapter implements ValidationAdapter<Contact
1516
private final AnnotationValidationAdapter<String> lastNameAdapter;
1617
private final ValidationAdapter<Address> addressValidator;
1718

18-
public ContactValidationAdapter(Validator validator) {
19+
public ContactValidationAdapter(AdapterBuildContext validator) {
1920
this.firstNameAdapter =
2021
validator
2122
.<String>adapter(NotNull.class, Map.of("message", "null"))

validator/src/test/java/io/avaje/validation/core/CustomerValidationAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Map;
55

66
import io.avaje.validation.Validator;
7+
import io.avaje.validation.adapter.AdapterBuildContext;
78
import io.avaje.validation.adapter.ValidationAdapter;
89
import io.avaje.validation.adapter.ValidationRequest;
910
import jakarta.validation.constraints.AssertTrue;
@@ -22,7 +23,7 @@ public final class CustomerValidationAdapter implements ValidationAdapter<Custom
2223
private final ValidationAdapter<Address> addressValidator;
2324
private final ValidationAdapter<Contact> contactValidator;
2425

25-
public CustomerValidationAdapter(Validator validator) {
26+
public CustomerValidationAdapter(AdapterBuildContext validator) {
2627
this.activeAdapter =
2728
validator.<Boolean>adapter(AssertTrue.class, Map.of("message", "not true"));
2829

0 commit comments

Comments
 (0)