Skip to content

Move the adapter builder methods onto new AdapterBuildContext interface (in the adapter package) #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions validator/src/main/java/io/avaje/validation/Validator.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.Map;
import java.util.ServiceLoader;

import io.avaje.validation.adapter.AdapterBuildContext;
import io.avaje.validation.adapter.AnnotationValidationAdapter;
import io.avaje.validation.adapter.ValidationAdapter;
import io.avaje.validation.adapter.ValidatorComponent;
Expand All @@ -25,12 +26,6 @@ static Builder builder() {
}


<T> ValidationAdapter<T> adapter(Class<T> cls);

<T> ValidationAdapter<T> adapter(Type type);

<T> AnnotationValidationAdapter<T> adapter(Class<? extends Annotation> cls, Map<String, Object> attributes);

/** Build the Validator instance adding ValidationAdapter, Factory or AdapterBuilder. */
interface Builder {

Expand Down Expand Up @@ -63,7 +58,7 @@ interface Builder {
interface AdapterBuilder {

/** Create a ValidationAdapter given the Validator instance. */
ValidationAdapter<?> build(Validator jsonb);
ValidationAdapter<?> build(AdapterBuildContext ctx);
}

/** Components register JsonAdapters Validator.Builder */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.avaje.validation.adapter;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Map;

public interface AdapterBuildContext {

<T> ValidationAdapter<T> adapter(Class<T> cls);

<T> ValidationAdapter<T> adapter(Type type);

<T> AnnotationValidationAdapter<T> adapter(Class<? extends Annotation> cls, Map<String, Object> attributes);

}
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ default AnnotationValidationAdapter<T> andThen(ValidationAdapter<? super T> afte
}

/** Factory for creating a ValidationAdapter. */
public interface Factory {
interface Factory {

/**
* Create and return a ValidationAdapter given the type and annotations or return null.
*
* <p>Returning null means that the adapter could be created by another factory.
*/
ValidationAdapter<?> create(Type type, Validator jsonb);
ValidationAdapter<?> create(Type type, AdapterBuildContext ctx);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
import java.util.concurrent.ConcurrentHashMap;

import io.avaje.validation.Validator;
import io.avaje.validation.adapter.AdapterBuildContext;
import io.avaje.validation.adapter.AnnotationValidationAdapter;
import io.avaje.validation.adapter.ValidationAdapter;
import io.avaje.validation.adapter.ValidatorComponent;
import io.avaje.validation.adapter.AnnotationValidationAdapter.Factory;

/** Default implementation of Validator. */
final class DValidator implements Validator {
final class DValidator implements Validator, AdapterBuildContext {

private final CoreAdapterBuilder builder;
private final Map<Type, DValidationType<?>> typeCache = new ConcurrentHashMap<>();
Expand Down Expand Up @@ -162,7 +163,7 @@ static <T> ValidationAdapter.Factory newAdapterFactory(
static <T> ValidationAdapter.Factory newAdapterFactory(Type type, AdapterBuilder builder) {
requireNonNull(type);
requireNonNull(builder);
return (targetType, jsonb) -> simpleMatch(type, targetType) ? builder.build(jsonb) : null;
return (targetType, ctx) -> simpleMatch(type, targetType) ? builder.build(ctx) : null;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Map;

import io.avaje.validation.Validator;
import io.avaje.validation.adapter.AdapterBuildContext;
import io.avaje.validation.adapter.AnnotationValidationAdapter;
import io.avaje.validation.adapter.ValidationAdapter;
import io.avaje.validation.adapter.ValidationRequest;
Expand All @@ -15,7 +16,7 @@ public final class AddressValidationAdapter implements ValidationAdapter<Address
// private final AnnotationValidationAdapter<String> line2Adapter;
// private final AnnotationValidationAdapter<Long> longValueAdapter;

public AddressValidationAdapter(Validator validator) {
public AddressValidationAdapter(AdapterBuildContext validator) {
this.line1Adapter =
validator
.<String>adapter(NotNull.class, Map.of("message", "null"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Map;

import io.avaje.validation.Validator;
import io.avaje.validation.adapter.AdapterBuildContext;
import io.avaje.validation.adapter.AnnotationValidationAdapter;
import io.avaje.validation.adapter.ValidationAdapter;
import io.avaje.validation.adapter.ValidationRequest;
Expand All @@ -15,7 +16,7 @@ public final class ContactValidationAdapter implements ValidationAdapter<Contact
private final AnnotationValidationAdapter<String> lastNameAdapter;
private final ValidationAdapter<Address> addressValidator;

public ContactValidationAdapter(Validator validator) {
public ContactValidationAdapter(AdapterBuildContext validator) {
this.firstNameAdapter =
validator
.<String>adapter(NotNull.class, Map.of("message", "null"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Map;

import io.avaje.validation.Validator;
import io.avaje.validation.adapter.AdapterBuildContext;
import io.avaje.validation.adapter.ValidationAdapter;
import io.avaje.validation.adapter.ValidationRequest;
import jakarta.validation.constraints.AssertTrue;
Expand All @@ -22,7 +23,7 @@ public final class CustomerValidationAdapter implements ValidationAdapter<Custom
private final ValidationAdapter<Address> addressValidator;
private final ValidationAdapter<Contact> contactValidator;

public CustomerValidationAdapter(Validator validator) {
public CustomerValidationAdapter(AdapterBuildContext validator) {
this.activeAdapter =
validator.<Boolean>adapter(AssertTrue.class, Map.of("message", "not true"));

Expand Down