Skip to content

Commit cd10452

Browse files
committed
Add registerValueConverterWithoutTargetClass
Needed for #301
1 parent 0b73381 commit cd10452

15 files changed

+172
-144
lines changed

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

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

37+
public AbstractResultMapper(
38+
MessagePackValueMapper valueMapper,
39+
ValueConverter<? extends Value, ? extends T> resultConverter) {
40+
this.valueMapper = valueMapper;
41+
valueMapper.registerValueConverterWithoutTargetClass(ValueType.ARRAY, resultConverter);
42+
}
43+
3744
public AbstractResultMapper(
3845
MessagePackValueMapper valueMapper,
3946
ValueType valueType,
@@ -43,6 +50,14 @@ public AbstractResultMapper(
4350
valueMapper.registerValueConverter(valueType, resultClass, resultConverter);
4451
}
4552

53+
public AbstractResultMapper(
54+
MessagePackValueMapper valueMapper,
55+
ValueType valueType,
56+
ValueConverter<? extends Value, ? extends T> resultConverter) {
57+
this.valueMapper = valueMapper;
58+
valueMapper.registerValueConverterWithoutTargetClass(valueType, resultConverter);
59+
}
60+
4661
public AbstractResultMapper(
4762
MessagePackValueMapper valueMapper,
4863
List<ValueConverterWithInputTypeWrapper<T>> converters,
@@ -57,6 +72,18 @@ public AbstractResultMapper(
5772
}
5873
}
5974

75+
public AbstractResultMapper(
76+
MessagePackValueMapper valueMapper,
77+
List<ValueConverterWithInputTypeWrapper<T>> converters) {
78+
this.valueMapper = valueMapper;
79+
for (ValueConverterWithInputTypeWrapper<T> converter :
80+
converters) {
81+
valueMapper.registerValueConverterWithoutTargetClass(
82+
converter.getValueType(),
83+
converter.getValueConverter());
84+
}
85+
}
86+
6087
@Override
6188
public <V extends Value, O> O fromValue(V v) throws MessagePackValueMapperException {
6289
return valueMapper.fromValue(v);
@@ -75,6 +102,12 @@ public <V extends Value, O> void registerValueConverter(
75102
valueMapper.registerValueConverter(valueType, objectClass, converter);
76103
}
77104

105+
@Override
106+
public <V extends Value, O> void registerValueConverterWithoutTargetClass(
107+
ValueType valueType, ValueConverter<V, ? extends O> converter) {
108+
valueMapper.registerValueConverterWithoutTargetClass(valueType, converter);
109+
}
110+
78111
@Override
79112
public <V extends Value, O> Optional<ValueConverter<V, O>> getValueConverter(
80113
ValueType valueType,

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

Lines changed: 25 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

@@ -28,16 +29,36 @@ public class CallResultMapper<T, R extends CallResult<T>> extends AbstractResult
2829
* @param resultClass tuple result class
2930
*/
3031
public CallResultMapper(
31-
MessagePackValueMapper valueMapper,
32-
ValueConverter<? extends Value, ? extends R> resultConverter,
32+
MessagePackValueMapper valueMapper, ValueConverter<? extends Value, ? extends R> resultConverter,
3333
Class<? extends R> resultClass) {
3434
super(valueMapper, resultConverter, resultClass);
3535
}
3636

3737
public CallResultMapper(
38-
MessagePackValueMapper valueMapper,
39-
List<ValueConverterWithInputTypeWrapper<R>> converters,
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,
4056
Class<? extends R> resultClass) {
4157
super(valueMapper, converters, resultClass);
4258
}
59+
60+
public CallResultMapper(
61+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<R>> converters) {
62+
super(valueMapper, converters);
63+
}
4364
}

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

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

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ <V extends Value, O> void registerValueConverter(
5252
ValueType valueType, Class<? extends O> objectClass,
5353
ValueConverter<V, ? extends O> converter);
5454

55+
<V extends Value, O> void registerValueConverterWithoutTargetClass(
56+
ValueType valueType, ValueConverter<V, ? extends O> converter);
57+
5558
/**
5659
* Get a converter capable of converting from the source entity class to the target class
5760
*

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

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,48 @@
1515
* @author Alexey Kuzin
1616
*/
1717
public class TarantoolResultMapper<T> extends AbstractResultMapper<TarantoolResult<T>> {
18+
public TarantoolResultMapper(
19+
MessagePackValueMapper valueMapper,
20+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter,
21+
Class<? extends TarantoolResult<T>> resultClass) {
22+
super(valueMapper, resultConverter, resultClass);
23+
}
24+
25+
public TarantoolResultMapper(
26+
MessagePackValueMapper valueMapper,
27+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter) {
28+
super(valueMapper, resultConverter);
29+
}
30+
1831
/**
1932
* Basic constructor
2033
*
21-
* @param valueMapper value mapper to be used for result rows
22-
* @param valueType MessagePack source type
23-
* @param valueConverter MessagePack result array to TarantoolResult with inner specified structure
24-
* @param resultClass tuple result class
34+
* @param valueMapper value mapper to be used for result rows
35+
* @param valueType MessagePack source type
36+
* @param resultConverter MessagePack result array to TarantoolResult with inner specified structure
37+
* @param resultClass tuple result class
2538
*/
2639
public TarantoolResultMapper(
27-
MessagePackValueMapper valueMapper,
28-
ValueType valueType,
29-
ValueConverter<? extends Value, ? extends TarantoolResult<T>> valueConverter,
40+
MessagePackValueMapper valueMapper, ValueType valueType,
41+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter,
3042
Class<? extends TarantoolResult<T>> resultClass) {
31-
super(valueMapper, valueType, valueConverter, resultClass);
43+
super(valueMapper, valueType, resultConverter, resultClass);
3244
}
3345

3446
public TarantoolResultMapper(
35-
MessagePackValueMapper valueMapper,
36-
List<ValueConverterWithInputTypeWrapper<TarantoolResult<T>>> valueConverters,
47+
MessagePackValueMapper valueMapper, ValueType valueType,
48+
ValueConverter<? extends Value, ? extends TarantoolResult<T>> resultConverter) {
49+
super(valueMapper, valueType, resultConverter);
50+
}
51+
52+
public TarantoolResultMapper(
53+
MessagePackValueMapper valueMapper, List<ValueConverterWithInputTypeWrapper<TarantoolResult<T>>> converters,
3754
Class<? extends TarantoolResult<T>> resultClass) {
38-
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);
3961
}
4062
}

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/DefaultArrayValueToTarantoolTupleResultConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* @author Artyom Dubinin
1111
*/
1212
public class DefaultArrayValueToTarantoolTupleResultConverter
13-
implements ValueConverter<ArrayValue, TarantoolResult<?>> {
13+
implements ValueConverter<ArrayValue, TarantoolResult<TarantoolTuple>> {
1414

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

src/main/java/io/tarantool/driver/mappers/converters/value/custom/DefaultMapValueToTarantoolTupleResultConverter.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 DefaultMapValueToTarantoolTupleResultConverter
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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,20 @@ protected abstract T createMapper(
4242
ValueConverter<? extends Value, ? extends O> valueConverter,
4343
Class<? extends O> resultClass);
4444

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

55+
protected abstract T createMapper(
56+
MessagePackValueMapper valueMapper,
57+
List<ValueConverterWithInputTypeWrapper<O>> converters);
58+
5059
/**
5160
* Create {@link AbstractResultMapper} instance with the passed converter.
5261
*
@@ -71,6 +80,12 @@ public T withConverter(
7180
}
7281
}
7382

83+
public T withConverterWithoutTargetClass(
84+
MessagePackValueMapper valueMapper, ValueType valueType,
85+
ValueConverter<? extends Value, ? extends O> valueConverter) {
86+
return createMapper(valueMapper, valueType, valueConverter);
87+
}
88+
7489
/**
7590
* Create {@link AbstractResultMapper} instance with the passed converter.
7691
*
@@ -116,4 +131,10 @@ public T withConverters(
116131
return createMapper(valueMapper, converters, resultClass);
117132
}
118133

134+
public T withConverterWithoutTargetClass(
135+
MessagePackValueMapper valueMapper,
136+
List<ValueConverterWithInputTypeWrapper<O>> converters) {
137+
return createMapper(valueMapper, converters);
138+
}
139+
119140
}

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

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

@@ -62,53 +61,10 @@ public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
6261
public TarantoolResultMapper<T> withArrayValueToTarantoolResultConverter(
6362
MessagePackValueMapper valueMapper,
6463
ValueConverter<ArrayValue, T> valueConverter) {
65-
ValueConverter structureConverter = new DefaultArrayValueToTarantoolResultConverter<>(valueConverter);
66-
return withConverter(
67-
valueMapper,
68-
ValueType.ARRAY,
69-
structureConverter
70-
);
71-
}
72-
73-
/**
74-
* Get converter for tuples in {@link TarantoolResult}
75-
*
76-
* @param valueConverter 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> valueConverter,
83-
Class<? extends TarantoolResult<T>> resultClass) {
84-
ValueConverter structureConverter = new DefaultArrayValueToTarantoolResultConverter<>(valueConverter);
85-
return withConverter(
86-
messagePackMapper.copy(),
87-
ValueType.ARRAY,
88-
structureConverter,
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 valueConverter 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(
103-
MessagePackValueMapper valueMapper,
104-
ValueConverter<ArrayValue, T> valueConverter,
105-
Class<? extends TarantoolResult<T>> resultClass) {
106-
ValueConverter structureConverter = new DefaultArrayValueToTarantoolResultConverter<>(valueConverter);
10764
return withConverter(
10865
valueMapper,
10966
ValueType.ARRAY,
110-
structureConverter,
111-
resultClass
67+
new DefaultArrayValueToTarantoolResultConverter<>(valueConverter)
11268
);
11369
}
11470
}

0 commit comments

Comments
 (0)