Skip to content

Commit b34b991

Browse files
committed
refactor: value converter
- make bean converter extends value converter (will be a single-value converter) - cleanup and remove some static methods
1 parent b2d2cee commit b34b991

File tree

8 files changed

+36
-65
lines changed

8 files changed

+36
-65
lines changed

jooby/src/main/java/io/jooby/BeanConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
* <p>It is an extension point for {@link ValueNode#to(Class)} calls.
1515
*/
16-
public interface BeanConverter {
16+
public interface BeanConverter extends ValueConverter<ValueNode> {
1717

1818
/**
1919
* True if the converter applies for the given type.

jooby/src/main/java/io/jooby/Jooby.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -805,12 +805,6 @@ public Jooby converter(@NonNull ValueConverter converter) {
805805
return this;
806806
}
807807

808-
@NonNull @Override
809-
public Jooby converter(@NonNull BeanConverter converter) {
810-
router.converter(converter);
811-
return this;
812-
}
813-
814808
@NonNull @Override
815809
public List<ValueConverter> getConverters() {
816810
return router.getConverters();

jooby/src/main/java/io/jooby/Router.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -930,14 +930,6 @@ default Object execute(@NonNull Context context) {
930930
*/
931931
@NonNull Router converter(@NonNull ValueConverter converter);
932932

933-
/**
934-
* Add a custom bean value converter.
935-
*
936-
* @param converter Custom value converter.
937-
* @return This router.
938-
*/
939-
@NonNull Router converter(@NonNull BeanConverter converter);
940-
941933
/**
942934
* Get all simple/string value converters.
943935
*

jooby/src/main/java/io/jooby/ValueConverter.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,14 @@
99

1010
import edu.umd.cs.findbugs.annotations.NonNull;
1111
import io.jooby.internal.ValueConverters;
12-
import io.jooby.internal.converter.StringConstructorConverter;
13-
import io.jooby.internal.converter.ValueOfConverter;
1412

1513
/**
1614
* Value converter for simple values that come from query, path, form, etc... parameters into more
1715
* specific type.
1816
*
1917
* <p>It is an extension point for {@link Value#to(Class)} calls.
2018
*/
21-
public interface ValueConverter {
19+
public interface ValueConverter<V extends Value> {
2220
/**
2321
* True if the converter applies for the given type.
2422
*
@@ -34,14 +32,14 @@ public interface ValueConverter {
3432
* @param type Requested type.
3533
* @return Converted value.
3634
*/
37-
Object convert(@NonNull Value value, @NonNull Class type);
35+
Object convert(@NonNull V value, @NonNull Class type);
3836

37+
/**
38+
* Immutable list of defaults/built-in {@link ValueConverter}.
39+
*
40+
* @return Immutable list of defaults/built-in {@link ValueConverter}.
41+
*/
3942
static List<ValueConverter> defaults() {
4043
return ValueConverters.defaultConverters();
4144
}
42-
43-
static void addFallbackConverters(List<ValueConverter> input) {
44-
input.add(new ValueOfConverter());
45-
input.add(new StringConstructorConverter());
46-
}
4745
}

jooby/src/main/java/io/jooby/internal/RouterImpl.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public Stack executor(Executor executor) {
174174

175175
private Cookie flashCookie = new Cookie("jooby.flash").setHttpOnly(true);
176176

177-
private List<ValueConverter> converters;
177+
private LinkedList<ValueConverter> converters;
178178

179179
private List<BeanConverter> beanConverters;
180180

@@ -195,7 +195,7 @@ public Stack executor(Executor executor) {
195195
public RouterImpl() {
196196
stack.addLast(new Stack(chi, null));
197197

198-
converters = ValueConverters.defaultConverters();
198+
converters = new LinkedList<>(ValueConverters.defaultConverters());
199199
beanConverters = new ArrayList<>(3);
200200
}
201201

@@ -449,13 +449,11 @@ public Router setSessionStore(SessionStore sessionStore) {
449449

450450
@NonNull @Override
451451
public Router converter(ValueConverter converter) {
452-
converters.add(converter);
453-
return this;
454-
}
455-
456-
@NonNull @Override
457-
public Router converter(@NonNull BeanConverter converter) {
458-
beanConverters.add(converter);
452+
if (converter instanceof BeanConverter) {
453+
beanConverters.add((BeanConverter) converter);
454+
} else {
455+
converters.addFirst(converter);
456+
}
459457
return this;
460458
}
461459

@@ -562,9 +560,6 @@ private Route newRoute(
562560
err = err.then(ErrorHandler.create());
563561
}
564562

565-
// Must be last, as fallback
566-
ValueConverter.addFallbackConverters(converters);
567-
568563
ExecutionMode mode = app.getExecutionMode();
569564
for (Route route : routes) {
570565
String executorKey = route.getExecutorKey();

jooby/src/main/java/io/jooby/internal/ValueConverters.java

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.jooby.internal;
77

88
import java.lang.reflect.Type;
9-
import java.util.ArrayList;
109
import java.util.Collections;
1110
import java.util.EnumSet;
1211
import java.util.List;
@@ -28,39 +27,34 @@
2827
import io.jooby.internal.converter.PeriodConverter;
2928
import io.jooby.internal.converter.ReflectiveBeanConverter;
3029
import io.jooby.internal.converter.StatusCodeConverter;
30+
import io.jooby.internal.converter.StringConstructorConverter;
3131
import io.jooby.internal.converter.TimeZoneConverter;
3232
import io.jooby.internal.converter.URIConverter;
3333
import io.jooby.internal.converter.UUIDConverter;
34+
import io.jooby.internal.converter.ValueOfConverter;
3435
import io.jooby.internal.converter.ZoneIdConverter;
3536
import io.jooby.internal.reflect.$Types;
3637

3738
public class ValueConverters {
3839

3940
public static List<ValueConverter> defaultConverters() {
40-
List<ValueConverter> result = new ArrayList<>();
41-
result.add(new UUIDConverter());
42-
43-
result.add(new InstantConverter());
44-
result.add(new DateConverter());
45-
result.add(new LocalDateConverter());
46-
result.add(new LocalDateTimeConverter());
47-
48-
result.add(new BigDecimalConverter());
49-
result.add(new BigIntegerConverter());
50-
51-
result.add(new DurationConverter());
52-
result.add(new PeriodConverter());
53-
54-
result.add(new CharsetConverter());
55-
56-
result.add(new StatusCodeConverter());
57-
58-
result.add(new TimeZoneConverter());
59-
result.add(new ZoneIdConverter());
60-
61-
result.add(new URIConverter());
62-
63-
return result;
41+
return List.of(
42+
new UUIDConverter(),
43+
new InstantConverter(),
44+
new DateConverter(),
45+
new LocalDateConverter(),
46+
new LocalDateTimeConverter(),
47+
new BigDecimalConverter(),
48+
new BigIntegerConverter(),
49+
new DurationConverter(),
50+
new PeriodConverter(),
51+
new CharsetConverter(),
52+
new StatusCodeConverter(),
53+
new TimeZoneConverter(),
54+
new ZoneIdConverter(),
55+
new URIConverter(),
56+
new ValueOfConverter(),
57+
new StringConstructorConverter());
6458
}
6559

6660
public static <T> T convert(ValueNode value, Type type, Router router) {

jooby/src/test/java/io/jooby/internal/ValueConverterHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@ public class ValueConverterHelper {
2626

2727
public static Context testContext(ValueConverter... converters) {
2828
List<BeanConverter> beans = new ArrayList<>();
29-
List<ValueConverter> simple = ValueConverters.defaultConverters();
29+
List<ValueConverter> simple = new ArrayList<>(ValueConverters.defaultConverters());
3030
Stream.of(converters).filter(it -> (!(it instanceof BeanConverter))).forEach(simple::add);
3131
Stream.of(converters)
3232
.filter(it -> (it instanceof BeanConverter))
3333
.forEach(it -> beans.add((BeanConverter) it));
34-
ValueConverter.addFallbackConverters(simple);
3534

3635
Context ctx = mock(Context.class);
3736
Router router = mock(Router.class);

modules/jooby-apt/src/test/java/io/jooby/internal/apt/MockContextHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ public class MockContextHelper {
2121

2222
public static MockContext mockContext(ValueConverter... converters) {
2323
List<BeanConverter> beans = new ArrayList<>();
24-
List<ValueConverter> simple = ValueConverter.defaults();
24+
List<ValueConverter> simple = new ArrayList<>(ValueConverter.defaults());
2525
Stream.of(converters).filter(it -> (!(it instanceof BeanConverter))).forEach(simple::add);
2626
Stream.of(converters)
2727
.filter(it -> (it instanceof BeanConverter))
2828
.forEach(it -> beans.add((BeanConverter) it));
29-
ValueConverter.addFallbackConverters(simple);
3029

3130
Router router = mock(Router.class);
3231
when(router.getConverters()).thenReturn(simple);

0 commit comments

Comments
 (0)