Skip to content

Commit dee735c

Browse files
committed
Add registerValueConverterWithoutTargetClass
Needed for #301
1 parent 9ad334f commit dee735c

15 files changed

+169
-144
lines changed

src/main/java/io/tarantool/driver/mappers/AbstractResultMapper.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public AbstractResultMapper(MessagePackValueMapper valueMapper,
3333
valueMapper.registerValueConverter(ValueType.ARRAY, resultClass, resultConverter);
3434
}
3535

36+
public AbstractResultMapper(MessagePackValueMapper valueMapper,
37+
ValueConverter<? extends Value, ? extends T> resultConverter) {
38+
this.valueMapper = valueMapper;
39+
valueMapper.registerValueConverterWithoutTargetClass(ValueType.ARRAY, resultConverter);
40+
}
41+
3642
public AbstractResultMapper(MessagePackValueMapper valueMapper,
3743
ValueType valueType,
3844
ValueConverter<? extends Value, ? extends T> resultConverter,
@@ -41,6 +47,13 @@ public AbstractResultMapper(MessagePackValueMapper valueMapper,
4147
valueMapper.registerValueConverter(valueType, resultClass, resultConverter);
4248
}
4349

50+
public AbstractResultMapper(MessagePackValueMapper valueMapper,
51+
ValueType valueType,
52+
ValueConverter<? extends Value, ? extends T> resultConverter) {
53+
this.valueMapper = valueMapper;
54+
valueMapper.registerValueConverterWithoutTargetClass(valueType, resultConverter);
55+
}
56+
4457
public AbstractResultMapper(MessagePackValueMapper valueMapper,
4558
List<ValueConverterWithInputTypeWrapper<T>> converters,
4659
Class<? extends T> resultClass) {
@@ -54,6 +67,17 @@ public AbstractResultMapper(MessagePackValueMapper valueMapper,
5467
}
5568
}
5669

70+
public AbstractResultMapper(MessagePackValueMapper valueMapper,
71+
List<ValueConverterWithInputTypeWrapper<T>> converters) {
72+
this.valueMapper = valueMapper;
73+
for (ValueConverterWithInputTypeWrapper<T> converter :
74+
converters) {
75+
valueMapper.registerValueConverterWithoutTargetClass(
76+
converter.getValueType(),
77+
converter.getValueConverter());
78+
}
79+
}
80+
5781
@Override
5882
public <V extends Value, O> O fromValue(V v) throws MessagePackValueMapperException {
5983
return valueMapper.fromValue(v);
@@ -71,6 +95,12 @@ public <V extends Value, O> void registerValueConverter(ValueType valueType,
7195
valueMapper.registerValueConverter(valueType, objectClass, converter);
7296
}
7397

98+
@Override
99+
public <V extends Value, O> void registerValueConverterWithoutTargetClass(
100+
ValueType valueType, ValueConverter<V, ? extends O> converter) {
101+
valueMapper.registerValueConverterWithoutTargetClass(valueType, converter);
102+
}
103+
74104
@Override
75105
public <V extends Value, O> Optional<ValueConverter<V, O>> getValueConverter(ValueType valueType,
76106
Class<O> objectClass) {

src/main/java/io/tarantool/driver/mappers/CallResultMapper.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.tarantool.driver.mappers.converters.ValueConverter;
55
import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper;
66
import org.msgpack.value.Value;
7+
import org.msgpack.value.ValueType;
78

89
import java.util.List;
910

@@ -27,15 +28,37 @@ public class CallResultMapper<T, R extends CallResult<T>> extends AbstractResult
2728
* @param resultConverter MessagePack result array to call result converter
2829
* @param resultClass tuple result class
2930
*/
30-
public CallResultMapper(MessagePackValueMapper valueMapper,
31-
ValueConverter<? extends Value, ? extends R> resultConverter,
31+
public CallResultMapper(
32+
MessagePackValueMapper valueMapper, ValueConverter<? extends Value, ? extends R> resultConverter,
3233
Class<? extends R> resultClass) {
3334
super(valueMapper, resultConverter, resultClass);
3435
}
3536

36-
public CallResultMapper(MessagePackValueMapper valueMapper,
37-
List<ValueConverterWithInputTypeWrapper<R>> converters,
37+
public CallResultMapper(
38+
MessagePackValueMapper valueMapper, ValueConverter<? extends Value, ? extends R> resultConverter) {
39+
super(valueMapper, resultConverter);
40+
}
41+
42+
public CallResultMapper(
43+
MessagePackValueMapper valueMapper, ValueType valueType,
44+
ValueConverter<? extends Value, ? extends R> resultConverter, Class<? extends R> resultClass) {
45+
super(valueMapper, valueType, resultConverter, resultClass);
46+
}
47+
48+
public CallResultMapper(
49+
MessagePackValueMapper valueMapper, ValueType valueType,
50+
ValueConverter<? extends Value, ? extends R> resultConverter) {
51+
super(valueMapper, valueType, resultConverter);
52+
}
53+
54+
public CallResultMapper(
55+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<R>> converters,
3856
Class<? extends R> resultClass) {
3957
super(valueMapper, converters, resultClass);
4058
}
59+
60+
public CallResultMapper(
61+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<R>> converters) {
62+
super(valueMapper, converters);
63+
}
4164
}

src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ public <V extends Value, O> void registerValueConverter(ValueType valueType,
167167
converters.add(0, new ConverterWrapper<>(converter, objectClass));
168168
}
169169

170+
public <V extends Value, O> void registerValueConverterWithoutTargetClass(ValueType valueType,
171+
ValueConverter<V, ? extends O> converter) {
172+
List<ConverterWrapper<ValueConverter<? extends Value, ?>>> converters =
173+
valueConverters.computeIfAbsent(valueType, k -> new LinkedList<>());
174+
converters.add(0, new ConverterWrapper<>(converter, Object.class));
175+
}
176+
170177
/**
171178
* Check if the specified converter can convert to the specified object type
172179
*/

src/main/java/io/tarantool/driver/mappers/MessagePackValueMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public interface MessagePackValueMapper {
4848
<V extends Value, O> void registerValueConverter(ValueType valueType, Class<? extends O> objectClass,
4949
ValueConverter<V, ? extends O> converter);
5050

51+
<V extends Value, O> void registerValueConverterWithoutTargetClass(
52+
ValueType valueType, ValueConverter<V, ? extends O> converter);
53+
5154
/**
5255
* Get a converter capable of converting from the source entity class to the target class
5356
* @param valueType MessagePack source type

src/main/java/io/tarantool/driver/mappers/TarantoolResultMapper.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,48 @@
1515
* @author Alexey Kuzin
1616
*/
1717
public class TarantoolResultMapper<T> extends AbstractResultMapper<TarantoolResult<T>> {
18+
19+
public TarantoolResultMapper(
20+
MessagePackValueMapper valueMapper,
21+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter,
22+
Class<? extends TarantoolResult<T>> resultClass) {
23+
super(valueMapper, resultConverter, resultClass);
24+
}
25+
26+
public TarantoolResultMapper(
27+
MessagePackValueMapper valueMapper,
28+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter) {
29+
super(valueMapper, resultConverter);
30+
}
31+
1832
/**
1933
* Basic constructor
2034
*
2135
* @param valueMapper value mapper to be used for result rows
22-
* @param valueConverter MessagePack result array to TarantoolResult with inner specified structure
36+
* @param resultConverter MessagePack result array to TarantoolResult with inner specified structure
2337
* @param resultClass tuple result class
2438
*/
25-
public TarantoolResultMapper(MessagePackValueMapper valueMapper,
26-
ValueType valueType,
27-
ValueConverter<? extends Value, ? extends TarantoolResult<T>> valueConverter,
28-
Class<? extends TarantoolResult<T>> resultClass) {
29-
super(valueMapper, valueType, valueConverter, resultClass);
39+
public TarantoolResultMapper(
40+
MessagePackValueMapper valueMapper, ValueType valueType,
41+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter,
42+
Class<? extends TarantoolResult<T>> resultClass) {
43+
super(valueMapper, valueType, resultConverter, resultClass);
44+
}
45+
46+
public TarantoolResultMapper(
47+
MessagePackValueMapper valueMapper, ValueType valueType,
48+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter) {
49+
super(valueMapper, valueType, resultConverter);
3050
}
3151

32-
public TarantoolResultMapper(MessagePackValueMapper valueMapper,
33-
List<ValueConverterWithInputTypeWrapper<TarantoolResult<T>>> valueConverters,
52+
public TarantoolResultMapper(
53+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<TarantoolResult<T>>> converters,
3454
Class<? extends TarantoolResult<T>> resultClass) {
35-
super(valueMapper, valueConverters, resultClass);
55+
super(valueMapper, converters, resultClass);
56+
}
57+
58+
public TarantoolResultMapper(
59+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<TarantoolResult<T>>> converters) {
60+
super(valueMapper, converters);
3661
}
3762
}

src/main/java/io/tarantool/driver/mappers/converters/value/custom/DefaultArrayValueToTarantoolResultConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @author Artyom Dubinin
1010
*/
1111
public class DefaultArrayValueToTarantoolResultConverter<T>
12-
implements ValueConverter<ArrayValue, TarantoolResult> {
12+
implements ValueConverter<ArrayValue, TarantoolResult<T>> {
1313

1414
private static final long serialVersionUID = -1348387430063097175L;
1515

src/main/java/io/tarantool/driver/mappers/converters/value/custom/DefaultArrayValueToTarantoolTuplesResultConverter.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,10 @@
77
import org.msgpack.value.ArrayValue;
88

99
/**
10-
* We use {@code TarantoolResult<?>} instead of TarantoolResult<TarantoolTuple>
11-
* because we don't have TarantoolResult<TarantoolTuple> for
12-
*
1310
* @author Artyom Dubinin
1411
*/
1512
public class DefaultArrayValueToTarantoolTuplesResultConverter
16-
implements ValueConverter<ArrayValue, TarantoolResult<?>> {
13+
implements ValueConverter<ArrayValue, TarantoolResult<TarantoolTuple>> {
1714

1815
private static final long serialVersionUID = -1348387430063097175L;
1916

src/main/java/io/tarantool/driver/mappers/converters/value/custom/DefaultMapValueToTarantoolTuplesResultConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* @author Artyom Dubinin
1717
*/
1818
public class DefaultMapValueToTarantoolTuplesResultConverter
19-
implements ValueConverter<MapValue, TarantoolResult<?>> {
19+
implements ValueConverter<MapValue, TarantoolResult<TarantoolTuple>> {
2020

2121
private static final long serialVersionUID = -5228606294087295535L;
2222

src/main/java/io/tarantool/driver/mappers/factories/AbstractResultMapperFactory.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,18 @@ protected abstract T createMapper(
4141
ValueConverter<? extends Value, ? extends O> valueConverter,
4242
Class<? extends O> resultClass);
4343

44+
protected abstract T createMapper(
45+
MessagePackValueMapper valueMapper,
46+
ValueType valueType,
47+
ValueConverter<? extends Value, ? extends O> valueConverter);
48+
4449
protected abstract T createMapper(MessagePackValueMapper valueMapper,
4550
List<ValueConverterWithInputTypeWrapper<O>> converters,
4651
Class<? extends O> resultClass);
4752

53+
protected abstract T createMapper(MessagePackValueMapper valueMapper,
54+
List<ValueConverterWithInputTypeWrapper<O>> converters);
55+
4856
/**
4957
* Create {@link AbstractResultMapper} instance with the passed converter.
5058
*
@@ -67,6 +75,11 @@ public T withConverter(MessagePackValueMapper valueMapper, ValueType valueType,
6775
}
6876
}
6977

78+
public T withConverterWithoutTargetClass(MessagePackValueMapper valueMapper, ValueType valueType,
79+
ValueConverter<? extends Value, ? extends O> valueConverter) {
80+
return createMapper(valueMapper, valueType, valueConverter);
81+
}
82+
7083
/**
7184
* Create {@link AbstractResultMapper} instance with the passed converter.
7285
*
@@ -108,4 +121,9 @@ public T withConverters(MessagePackValueMapper valueMapper,
108121
return createMapper(valueMapper, converters, resultClass);
109122
}
110123

124+
public T withConverterWithoutTargetClass(MessagePackValueMapper valueMapper,
125+
List<ValueConverterWithInputTypeWrapper<O>> converters) {
126+
return createMapper(valueMapper, converters);
127+
}
128+
111129
}

src/main/java/io/tarantool/driver/mappers/factories/CustomValueToTarantoolResultMapperFactory.java

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,10 @@ public CustomValueToTarantoolResultMapperFactory(MessagePackMapper messagePackMa
4444
*/
4545
public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
4646
ValueConverter<ArrayValue, T> tupleConverter) {
47-
ValueConverter valueConverter = new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter);
48-
return withConverter(
47+
return withConverterWithoutTargetClass(
4948
messagePackMapper.copy(),
5049
ValueType.ARRAY,
51-
valueConverter
50+
new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter)
5251
);
5352
}
5453

@@ -62,52 +61,10 @@ public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
6261
public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
6362
MessagePackValueMapper valueMapper,
6463
ValueConverter<ArrayValue, T> tupleConverter) {
65-
ValueConverter valueConverter = new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter);
66-
return withConverter(
67-
valueMapper,
68-
ValueType.ARRAY,
69-
valueConverter
70-
);
71-
}
72-
73-
/**
74-
* Get converter for tuples in {@link TarantoolResult}
75-
*
76-
* @param tupleConverter MessagePack-to-entity converter for tuples
77-
* @param resultClass allows to specify the result type in case if it is impossible to get it via reflection
78-
* (e.g. lambda)
79-
* @return mapper instance
80-
*/
81-
public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
82-
ValueConverter<ArrayValue, T> tupleConverter,
83-
Class<? extends TarantoolResult<T>> resultClass) {
84-
ValueConverter valueConverter = new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter);
85-
return withConverter(
86-
messagePackMapper.copy(),
87-
ValueType.ARRAY,
88-
valueConverter,
89-
resultClass
90-
);
91-
}
92-
93-
/**
94-
* Get converter for tuples in {@link TarantoolResult}
95-
*
96-
* @param valueMapper MessagePack-to-object mapper for tuple contents
97-
* @param tupleConverter MessagePack-to-entity converter for tuples
98-
* @param resultClass allows to specify the result type in case if it is impossible to get it via reflection
99-
* (e.g. lambda)
100-
* @return mapper instance
101-
*/
102-
public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(MessagePackValueMapper valueMapper,
103-
ValueConverter<ArrayValue, T> tupleConverter,
104-
Class<? extends TarantoolResult<T>> resultClass) {
105-
ValueConverter valueConverter = new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter);
10664
return withConverter(
10765
valueMapper,
10866
ValueType.ARRAY,
109-
valueConverter,
110-
resultClass
67+
new DefaultArrayValueToTarantoolResultConverter<>(tupleConverter)
11168
);
11269
}
11370
}

0 commit comments

Comments
 (0)