Skip to content

Commit 25686b3

Browse files
committed
Move the adapter builder methods onto new AdapterBuildContext interface (in the adapter package)
The theory is we are looking to hide these methods from the casual users of Validator
1 parent 70302d2 commit 25686b3

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)