diff --git a/CHANGELOG.md b/CHANGELOG.md index 1aa14d0c0..1181df27c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ ## [Unreleased] - Use netty part dependencies instead of netty-all ([#295](https://github.com/tarantool/cartridge-java/issues/295)) +- Refactor mappers and split `TarantoolResultConverter` ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `TarantoolResultConverter` was removed, use `DefaultArrayValueToTarantoolResultConverter` or `DefaultMapValueToTarantoolTupleResultConverter` instead ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `ConverterWrapper` was moved to converters package ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `*MapperFactory` classes were moved to separate package ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `TarantoolTupleMultiResult` was renamed to `MultiValueTarantoolTupleResult` ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `TarantoolTupleSingleResult` was renamed to `SingleValueTarantoolTupleResult` ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `*MapperFactory` methods were renamed ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** `*DefaultConverter` converters moved into `mappers.converters.value.defaults` package ([#301](https://github.com/tarantool/cartridge-java/pull/301)) +- **[breaking change]** All converters from `mappers.converters.value.custom` moved into `mappers.converters.value` package ([#301](https://github.com/tarantool/cartridge-java/pull/301)) ## [0.9.2] - 2022-11-15 diff --git a/src/main/java/io/tarantool/driver/api/TarantoolCallOperations.java b/src/main/java/io/tarantool/driver/api/TarantoolCallOperations.java index 9df1f981c..083a12e57 100644 --- a/src/main/java/io/tarantool/driver/api/TarantoolCallOperations.java +++ b/src/main/java/io/tarantool/driver/api/TarantoolCallOperations.java @@ -4,8 +4,8 @@ import io.tarantool.driver.mappers.CallResultMapper; import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackObjectMapper; -import io.tarantool.driver.mappers.ResultMapperFactoryFactory; import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; import org.msgpack.value.Value; import java.util.List; diff --git a/src/main/java/io/tarantool/driver/api/TarantoolClientBuilder.java b/src/main/java/io/tarantool/driver/api/TarantoolClientBuilder.java index 364ec3484..a33950827 100644 --- a/src/main/java/io/tarantool/driver/api/TarantoolClientBuilder.java +++ b/src/main/java/io/tarantool/driver/api/TarantoolClientBuilder.java @@ -7,6 +7,7 @@ import io.tarantool.driver.auth.TarantoolCredentials; import io.tarantool.driver.mappers.DefaultMessagePackMapper; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import java.net.InetSocketAddress; import java.util.List; @@ -112,7 +113,7 @@ public interface TarantoolClientBuilder extends TarantoolClientConfigurator * This method takes a lambda as an argument, where the mapperBuilder is {@link DefaultMessagePackMapper.Builder}. *

- * see {@link io.tarantool.driver.mappers.DefaultMessagePackMapperFactory}. + * see {@link DefaultMessagePackMapperFactory}. * * @param mapperBuilder builder provider instance, e.g. a lambda function taking the builder * for {@link MessagePackMapper} instance @@ -127,7 +128,7 @@ public interface TarantoolClientBuilder extends TarantoolClientConfigurator target tuple type * @author Alexey Kuzin diff --git a/src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleMultiResult.java b/src/main/java/io/tarantool/driver/api/tuple/MultiValueTarantoolTupleResult.java similarity index 88% rename from src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleMultiResult.java rename to src/main/java/io/tarantool/driver/api/tuple/MultiValueTarantoolTupleResult.java index 2f35b4ff5..7f5d7fe8a 100644 --- a/src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleMultiResult.java +++ b/src/main/java/io/tarantool/driver/api/tuple/MultiValueTarantoolTupleResult.java @@ -9,6 +9,6 @@ * @author Alexey Kuzin * @see TarantoolTupleResult */ -public interface TarantoolTupleMultiResult +public interface MultiValueTarantoolTupleResult extends MultiValueCallResult> { } diff --git a/src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleSingleResult.java b/src/main/java/io/tarantool/driver/api/tuple/SingleValueTarantoolTupleResult.java similarity index 71% rename from src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleSingleResult.java rename to src/main/java/io/tarantool/driver/api/tuple/SingleValueTarantoolTupleResult.java index 88b10b752..09409b022 100644 --- a/src/main/java/io/tarantool/driver/api/tuple/TarantoolTupleSingleResult.java +++ b/src/main/java/io/tarantool/driver/api/tuple/SingleValueTarantoolTupleResult.java @@ -9,5 +9,5 @@ * @author Alexey Kuzin * @see TarantoolTupleResult */ -public interface TarantoolTupleSingleResult extends SingleValueCallResult> { +public interface SingleValueTarantoolTupleResult extends SingleValueCallResult> { } diff --git a/src/main/java/io/tarantool/driver/core/AbstractTarantoolClient.java b/src/main/java/io/tarantool/driver/core/AbstractTarantoolClient.java index 0a771189a..762585273 100644 --- a/src/main/java/io/tarantool/driver/core/AbstractTarantoolClient.java +++ b/src/main/java/io/tarantool/driver/core/AbstractTarantoolClient.java @@ -25,12 +25,12 @@ import io.tarantool.driver.exceptions.TarantoolClientException; import io.tarantool.driver.exceptions.TarantoolSpaceNotFoundException; import io.tarantool.driver.mappers.CallResultMapper; -import io.tarantool.driver.mappers.DefaultResultMapperFactoryFactory; import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackObjectMapper; import io.tarantool.driver.mappers.MessagePackValueMapper; -import io.tarantool.driver.mappers.ResultMapperFactoryFactory; import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; import io.tarantool.driver.protocol.Packable; import io.tarantool.driver.protocol.TarantoolProtocolException; import io.tarantool.driver.protocol.requests.TarantoolCallRequest; @@ -66,7 +66,7 @@ public abstract class AbstractTarantoolClient metadataHolder = new AtomicReference<>(); - private final DefaultResultMapperFactoryFactory mapperFactoryFactory; + private final ResultMapperFactoryFactoryImpl mapperFactoryFactory; private final SpacesMetadataProvider metadataProvider; private final ScheduledExecutorService timeoutScheduler; private TarantoolConnectionManager connectionManager; @@ -110,7 +110,7 @@ public AbstractTarantoolClient(TarantoolClientConfig config, TarantoolConnection Assert.notNull(listeners, "Tarantool connection listeners must not be null"); this.config = config; - this.mapperFactoryFactory = new DefaultResultMapperFactoryFactory(); + this.mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); this.eventLoopGroup = new NioEventLoopGroup(config.getEventLoopThreadsNumber()); this.bootstrap = new Bootstrap() .group(eventLoopGroup) diff --git a/src/main/java/io/tarantool/driver/core/MultiValueCallResultImpl.java b/src/main/java/io/tarantool/driver/core/MultiValueCallResultImpl.java index 75f2b08f4..53acfced7 100644 --- a/src/main/java/io/tarantool/driver/core/MultiValueCallResultImpl.java +++ b/src/main/java/io/tarantool/driver/core/MultiValueCallResultImpl.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.MultiValueCallResult; import io.tarantool.driver.exceptions.TarantoolFunctionCallException; import io.tarantool.driver.exceptions.errors.TarantoolErrorsParser; +import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.ArrayValue; import org.msgpack.value.Value; @@ -14,6 +15,7 @@ * {@code null}, the second is treated as a formatted error or an error message. * * @author Alexey Kuzin + * @author Artyom Dubinin */ public class MultiValueCallResultImpl> implements MultiValueCallResult { @@ -36,6 +38,23 @@ public MultiValueCallResultImpl(Value result, ValueConverter valu } } + public MultiValueCallResultImpl(Value result, MessagePackValueMapper valueMapper) { + if (result == null) { + throw new TarantoolFunctionCallException("Function call result is null"); + } + if (!result.isArrayValue()) { + throw new TarantoolFunctionCallException("Function call result is not a MessagePack array"); + } + ArrayValue resultArray = result.asArrayValue(); + if (resultArray.size() == 2 && (resultArray.get(0).isNilValue() && !resultArray.get(1).isNilValue())) { + // [nil, "Error msg..."] or [nil, {str="Error msg...", stack="..."}] + throw TarantoolErrorsParser.parse(resultArray.get(1)); + } else { + // result + this.value = valueMapper.fromValue(result.asArrayValue()); + } + } + @Override public R value() { return value; diff --git a/src/main/java/io/tarantool/driver/core/ProxyTarantoolClient.java b/src/main/java/io/tarantool/driver/core/ProxyTarantoolClient.java index 9094cdc45..ec2d8c901 100644 --- a/src/main/java/io/tarantool/driver/core/ProxyTarantoolClient.java +++ b/src/main/java/io/tarantool/driver/core/ProxyTarantoolClient.java @@ -23,8 +23,8 @@ import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackObjectMapper; import io.tarantool.driver.mappers.MessagePackValueMapper; -import io.tarantool.driver.mappers.ResultMapperFactoryFactory; import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; import io.tarantool.driver.protocol.Packable; import io.tarantool.driver.utils.Assert; import org.msgpack.value.Value; diff --git a/src/main/java/io/tarantool/driver/core/RetryingTarantoolClient.java b/src/main/java/io/tarantool/driver/core/RetryingTarantoolClient.java index d6aa371e9..e820563d3 100644 --- a/src/main/java/io/tarantool/driver/core/RetryingTarantoolClient.java +++ b/src/main/java/io/tarantool/driver/core/RetryingTarantoolClient.java @@ -18,8 +18,8 @@ import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackObjectMapper; import io.tarantool.driver.mappers.MessagePackValueMapper; -import io.tarantool.driver.mappers.ResultMapperFactoryFactory; import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; import io.tarantool.driver.protocol.Packable; import org.msgpack.value.Value; diff --git a/src/main/java/io/tarantool/driver/core/SingleValueCallResultImpl.java b/src/main/java/io/tarantool/driver/core/SingleValueCallResultImpl.java index 3b8432079..7e620fef0 100644 --- a/src/main/java/io/tarantool/driver/core/SingleValueCallResultImpl.java +++ b/src/main/java/io/tarantool/driver/core/SingleValueCallResultImpl.java @@ -3,6 +3,7 @@ import io.tarantool.driver.api.SingleValueCallResult; import io.tarantool.driver.exceptions.TarantoolFunctionCallException; import io.tarantool.driver.exceptions.errors.TarantoolErrorsParser; +import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.ArrayValue; import org.msgpack.value.Value; @@ -12,6 +13,7 @@ * {@code null}, the second is treated as a formatted error or an error message. * * @author Alexey Kuzin + * @author Artyom Dubinin */ public class SingleValueCallResultImpl implements SingleValueCallResult { @@ -33,6 +35,22 @@ public SingleValueCallResultImpl(ArrayValue result, ValueConverter val } } + public SingleValueCallResultImpl(ArrayValue result, MessagePackValueMapper valueMapper) { + if (result == null) { + throw new TarantoolFunctionCallException("Function call result is null"); + } + if (result.size() == 0 || result.size() == 1 && result.get(0).isNilValue()) { + // [nil] or [] + value = null; + } else if (result.size() == 2 && (result.get(0).isNilValue() && !result.get(1).isNilValue())) { + // [nil, "Error msg..."] or [nil, {str="Error msg...", stack="..."}] + throw TarantoolErrorsParser.parse(result.get(1)); + } else { + // [result] + value = valueMapper.fromValue(result.get(0)); + } + } + @Override public T value() { return value; diff --git a/src/main/java/io/tarantool/driver/core/TarantoolChannelInitializer.java b/src/main/java/io/tarantool/driver/core/TarantoolChannelInitializer.java index da5f77584..8fce12308 100644 --- a/src/main/java/io/tarantool/driver/core/TarantoolChannelInitializer.java +++ b/src/main/java/io/tarantool/driver/core/TarantoolChannelInitializer.java @@ -16,7 +16,7 @@ import io.tarantool.driver.handlers.TarantoolAuthenticationResponseHandler; import io.tarantool.driver.handlers.TarantoolRequestHandler; import io.tarantool.driver.handlers.TarantoolResponseHandler; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/io/tarantool/driver/core/TarantoolResultImpl.java b/src/main/java/io/tarantool/driver/core/TarantoolResultImpl.java index 2560f5676..87edb0bb7 100644 --- a/src/main/java/io/tarantool/driver/core/TarantoolResultImpl.java +++ b/src/main/java/io/tarantool/driver/core/TarantoolResultImpl.java @@ -1,67 +1,42 @@ package io.tarantool.driver.core; import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.exceptions.TarantoolClientException; import io.tarantool.driver.exceptions.TarantoolTupleConversionException; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.core.MessageTypeCastException; import org.msgpack.value.ArrayValue; -import org.msgpack.value.StringValue; -import org.msgpack.value.Value; -import org.msgpack.value.ValueFactory; -import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; -import java.util.Map; import java.util.stream.Collectors; /** - * Basic TarantoolResult implementation. Supports two types of the tuple result: a MessagePack array of arrays - * (as in IPROTO) and a map with format {@code {"rows": [[], ...], "metadata": []}} as returned by tarantool/crud module + * Basic TarantoolResult implementation * * @param target result tuple type * @author Alexey Kuzin + * @author Artyom Dubinin */ public class TarantoolResultImpl implements TarantoolResult { - private static final StringValue RESULT_META = ValueFactory.newString("metadata"); - private static final StringValue RESULT_ROWS = ValueFactory.newString("rows"); - - private List tuples; - - public TarantoolResultImpl(Value value, ValueConverter tupleConverter) { - if (value.isArrayValue()) { - // [[[],...]] - setTuples(value.asArrayValue(), tupleConverter); - } else if (value.isMapValue()) { - // [{"metadata" : [...], "rows": [...]}] - Map tupleMap = value.asMapValue().map(); - if (!hasRowsAndMetadata(tupleMap)) { - throw new TarantoolClientException("The received tuple map has wrong format, " + - "expected {\"metadata\" : [...], \"rows\": [...]}, got %s", value.toString()); - } - Value tupleArray = tupleMap.get(RESULT_ROWS); - if (!tupleArray.isArrayValue()) { - throw new TarantoolClientException("The \"rows\" field must contain a MessagePack array"); - } - setTuples(tupleArray.asArrayValue(), tupleConverter); - } else if (value.isNilValue()) { - // [nil] - this.tuples = new ArrayList<>(); - } else { - throw new TarantoolClientException("The received result cannot be converted to an array of tuples: %s", - value.toString()); - } - } - - private void setTuples(ArrayValue tupleArray, ValueConverter tupleConverter) { - this.tuples = tupleArray.list().stream() + protected List tuples; + + protected TarantoolResultImpl() { + } + + public TarantoolResultImpl(ArrayValue value, ValueConverter valueConverter) { + // [[[],...]] + setItems(value, valueConverter); + } + + protected void setItems(ArrayValue itemsArray, ValueConverter valueConverter) { + this.tuples = itemsArray.list().stream() .map(v -> { try { - return tupleConverter.fromValue(v.asArrayValue()); + return valueConverter.fromValue(v.asArrayValue()); } catch (MessageTypeCastException e) { throw new TarantoolTupleConversionException(v, e); } @@ -69,10 +44,6 @@ private void setTuples(ArrayValue tupleArray, ValueConverter tupl .collect(Collectors.toList()); } - private static boolean hasRowsAndMetadata(Map valueMap) { - return valueMap.containsKey(RESULT_META) && valueMap.containsKey(RESULT_ROWS); - } - @Override public int size() { return this.tuples.size(); @@ -115,7 +86,7 @@ public boolean remove(Object o) { @Override public boolean containsAll(Collection c) { - return this.tuples.containsAll(c); + return new HashSet<>(this.tuples).containsAll(c); } @Override diff --git a/src/main/java/io/tarantool/driver/core/metadata/SpacesMetadataProvider.java b/src/main/java/io/tarantool/driver/core/metadata/SpacesMetadataProvider.java index 8aee60122..aa1a6c59e 100644 --- a/src/main/java/io/tarantool/driver/core/metadata/SpacesMetadataProvider.java +++ b/src/main/java/io/tarantool/driver/core/metadata/SpacesMetadataProvider.java @@ -63,7 +63,7 @@ private CompletableFuture> select( throws TarantoolClientException { CallResultMapper, SingleValueCallResult>> resultMapper = client.getResultMapperFactoryFactory().singleValueTarantoolResultMapperFactory() - .withTarantoolResultConverter(resultConverter, resultClass); + .withSingleValueArrayTarantoolResultConverter(resultConverter, resultClass); return client.call(selectCmd, resultMapper); } } diff --git a/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolSpace.java b/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolSpace.java index 87a5f8a5e..f75bb1381 100644 --- a/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolSpace.java +++ b/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolSpace.java @@ -78,7 +78,7 @@ public ProxyTarantoolSpace( @Override public CompletableFuture delete(Conditions conditions) throws TarantoolClientException { - return delete(conditions, tupleResultMapper(), ProxyDeleteOptions.create() + return delete(conditions, rowsMetadataTupleResultMapper(), ProxyDeleteOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -88,7 +88,7 @@ public CompletableFuture delete(Conditions conditions, DeleteOptions options) if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return delete(conditions, tupleResultMapper(), options); + return delete(conditions, rowsMetadataTupleResultMapper(), options); } private CompletableFuture delete( @@ -113,7 +113,7 @@ private CompletableFuture delete( @Override public CompletableFuture insert(T tuple) throws TarantoolClientException { - return insert(tuple, tupleResultMapper(), ProxyInsertOptions.create() + return insert(tuple, rowsMetadataTupleResultMapper(), ProxyInsertOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -123,7 +123,7 @@ public CompletableFuture insert(T tuple, InsertOptions options) throws Tarant if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return insert(tuple, tupleResultMapper(), options); + return insert(tuple, rowsMetadataTupleResultMapper(), options); } private CompletableFuture insert( @@ -146,7 +146,7 @@ private CompletableFuture insert( @Override public CompletableFuture insertMany(Collection tuples) { - return insertMany(tuples, tupleResultMapper(), ProxyInsertManyOptions.create() + return insertMany(tuples, rowsMetadataTupleResultMapper(), ProxyInsertManyOptions.create() .withTimeout(config.getRequestTimeout()) .withStopOnError(true) .withRollbackOnError(true) @@ -159,7 +159,7 @@ public CompletableFuture insertMany(Collection tuples, InsertManyOptions o if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return insertMany(tuples, tupleResultMapper(), options); + return insertMany(tuples, rowsMetadataTupleResultMapper(), options); } private CompletableFuture insertMany( @@ -182,7 +182,7 @@ private CompletableFuture insertMany( @Override public CompletableFuture replace(T tuple) throws TarantoolClientException { - return replace(tuple, tupleResultMapper(), ProxyReplaceOptions.create() + return replace(tuple, rowsMetadataTupleResultMapper(), ProxyReplaceOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -192,7 +192,7 @@ public CompletableFuture replace(T tuple, ReplaceOptions options) throws Tara if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return replace(tuple, tupleResultMapper(), options); + return replace(tuple, rowsMetadataTupleResultMapper(), options); } private CompletableFuture replace( @@ -215,7 +215,7 @@ private CompletableFuture replace( @Override public CompletableFuture replaceMany(Collection tuples) throws TarantoolClientException { - return replaceMany(tuples, tupleResultMapper(), ProxyReplaceManyOptions.create() + return replaceMany(tuples, rowsMetadataTupleResultMapper(), ProxyReplaceManyOptions.create() .withTimeout(config.getRequestTimeout()) .withStopOnError(true) .withRollbackOnError(true) @@ -227,7 +227,7 @@ public CompletableFuture replaceMany(Collection tuples, ReplaceManyOptions if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return replaceMany(tuples, tupleResultMapper(), options); + return replaceMany(tuples, rowsMetadataTupleResultMapper(), options); } private CompletableFuture replaceMany( @@ -250,7 +250,7 @@ private CompletableFuture replaceMany( @Override public CompletableFuture select(Conditions conditions) throws TarantoolClientException { - return select(conditions, tupleResultMapper(), ProxySelectOptions.create() + return select(conditions, rowsMetadataTupleResultMapper(), ProxySelectOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -262,7 +262,7 @@ public CompletableFuture select( if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return select(conditions, tupleResultMapper(), options); + return select(conditions, rowsMetadataTupleResultMapper(), options); } private CompletableFuture select( @@ -286,8 +286,9 @@ private CompletableFuture select( @Override public CompletableFuture update(Conditions conditions, T tuple) { - return update(conditions, makeOperationsFromTuple(tuple), tupleResultMapper(), ProxyUpdateOptions.create() - .withTimeout(config.getRequestTimeout()) + return update(conditions, makeOperationsFromTuple(tuple), rowsMetadataTupleResultMapper(), + ProxyUpdateOptions.create() + .withTimeout(config.getRequestTimeout()) ); } @@ -296,7 +297,7 @@ public CompletableFuture update(Conditions conditions, T tuple, UpdateOptions if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return update(conditions, makeOperationsFromTuple(tuple), tupleResultMapper(), options); + return update(conditions, makeOperationsFromTuple(tuple), rowsMetadataTupleResultMapper(), options); } /** @@ -309,7 +310,7 @@ public CompletableFuture update(Conditions conditions, T tuple, UpdateOptions @Override public CompletableFuture update(Conditions conditions, TupleOperations operations) { - return update(conditions, operations, tupleResultMapper(), ProxyUpdateOptions.create() + return update(conditions, operations, rowsMetadataTupleResultMapper(), ProxyUpdateOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -319,7 +320,7 @@ public CompletableFuture update(Conditions conditions, TupleOperations operat if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return update(conditions, operations, tupleResultMapper(), options); + return update(conditions, operations, rowsMetadataTupleResultMapper(), options); } private CompletableFuture update( @@ -345,7 +346,7 @@ private CompletableFuture update( @Override public CompletableFuture upsert(Conditions conditions, T tuple, TupleOperations operations) { - return upsert(conditions, tuple, operations, tupleResultMapper(), ProxyUpsertOptions.create() + return upsert(conditions, tuple, operations, rowsMetadataTupleResultMapper(), ProxyUpsertOptions.create() .withTimeout(config.getRequestTimeout()) ); } @@ -357,7 +358,7 @@ public CompletableFuture upsert( if (options == null) { throw new IllegalArgumentException("Options should not be null"); } - return upsert(conditions, tuple, operations, tupleResultMapper(), options); + return upsert(conditions, tuple, operations, rowsMetadataTupleResultMapper(), options); } private CompletableFuture upsert( @@ -404,7 +405,7 @@ public CompletableFuture truncate() throws TarantoolClientException { * * @return configured mapper with {@link ArrayValue} to {@code T} converter */ - protected abstract CallResultMapper> tupleResultMapper(); + protected abstract CallResultMapper> rowsMetadataTupleResultMapper(); private CompletableFuture executeOperation(ProxyOperation operation) { return operation.execute(); diff --git a/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolTupleSpace.java b/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolTupleSpace.java index dcf29e42a..63d09b5b2 100644 --- a/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolTupleSpace.java +++ b/src/main/java/io/tarantool/driver/core/space/ProxyTarantoolTupleSpace.java @@ -52,9 +52,9 @@ protected TupleOperations makeOperationsFromTuple(TarantoolTuple tuple) { @Override protected CallResultMapper, SingleValueCallResult>> - tupleResultMapper() { - return client.getResultMapperFactoryFactory().defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(config.getMessagePackMapper(), getMetadata()); + rowsMetadataTupleResultMapper() { + return client.getResultMapperFactoryFactory().singleValueTupleResultMapperFactory() + .withSingleValueRowsMetadataToTarantoolTupleResultMapper(config.getMessagePackMapper(), getMetadata()); } @Override diff --git a/src/main/java/io/tarantool/driver/core/space/TarantoolSpace.java b/src/main/java/io/tarantool/driver/core/space/TarantoolSpace.java index 15a1c53fd..25ac8d9d1 100644 --- a/src/main/java/io/tarantool/driver/core/space/TarantoolSpace.java +++ b/src/main/java/io/tarantool/driver/core/space/TarantoolSpace.java @@ -61,7 +61,7 @@ public TarantoolSpace( @Override public CompletableFuture delete(Conditions conditions) throws TarantoolClientException { - return delete(conditions, tupleResultMapper()); + return delete(conditions, arrayTupleResultMapper()); } private CompletableFuture delete(Conditions conditions, MessagePackValueMapper resultMapper) @@ -83,7 +83,7 @@ private CompletableFuture delete(Conditions conditions, MessagePackValueMappe @Override public CompletableFuture insert(T tuple) throws TarantoolClientException { - return insert(tuple, tupleResultMapper()); + return insert(tuple, arrayTupleResultMapper()); } @Override @@ -110,7 +110,7 @@ private CompletableFuture insert(T tuple, MessagePackValueMapper resultMapper @Override public CompletableFuture replace(T tuple) throws TarantoolClientException { - return replace(tuple, tupleResultMapper()); + return replace(tuple, arrayTupleResultMapper()); } @Override @@ -137,7 +137,7 @@ private CompletableFuture replace(T tuple, MessagePackValueMapper resultMappe @Override public CompletableFuture select(Conditions conditions) throws TarantoolClientException { - return select(conditions, tupleResultMapper()); + return select(conditions, arrayTupleResultMapper()); } private CompletableFuture select(Conditions conditions, MessagePackValueMapper resultMapper) @@ -161,7 +161,7 @@ private CompletableFuture select(Conditions conditions, MessagePackValueMappe @Override public CompletableFuture update(Conditions conditions, T tuple) { - return update(conditions, makeOperationsFromTuple(tuple), tupleResultMapper()); + return update(conditions, makeOperationsFromTuple(tuple), arrayTupleResultMapper()); } /** @@ -174,7 +174,7 @@ public CompletableFuture update(Conditions conditions, T tuple) { @Override public CompletableFuture update(Conditions conditions, TupleOperations operations) { - return update(conditions, operations, tupleResultMapper()); + return update(conditions, operations, arrayTupleResultMapper()); } private CompletableFuture update( @@ -207,7 +207,7 @@ private CompletableFuture update( @Override public CompletableFuture upsert(Conditions conditions, T tuple, TupleOperations operations) { - return upsert(conditions, tuple, operations, tupleResultMapper()); + return upsert(conditions, tuple, operations, arrayTupleResultMapper()); } private CompletableFuture upsert( @@ -234,7 +234,7 @@ private CompletableFuture upsert( @Override public CompletableFuture truncate() throws TarantoolClientException { - return truncate(tupleResultMapper()); + return truncate(arrayTupleResultMapper()); } private CompletableFuture truncate(MessagePackValueMapper resultMapper) @@ -257,7 +257,7 @@ private CompletableFuture truncate(MessagePackValueMapper resultMapper) * * @return configured mapper with {@link ArrayValue} to {@code T} converter */ - protected abstract MessagePackValueMapper tupleResultMapper(); + protected abstract MessagePackValueMapper arrayTupleResultMapper(); private CompletableFuture sendRequest(TarantoolRequest request, MessagePackValueMapper resultMapper) { return connectionManager.getConnection().thenCompose(c -> c.sendRequest(request, resultMapper)); diff --git a/src/main/java/io/tarantool/driver/core/space/TarantoolTupleSpace.java b/src/main/java/io/tarantool/driver/core/space/TarantoolTupleSpace.java index 06b4c0f6a..b9c99b666 100644 --- a/src/main/java/io/tarantool/driver/core/space/TarantoolTupleSpace.java +++ b/src/main/java/io/tarantool/driver/core/space/TarantoolTupleSpace.java @@ -50,9 +50,9 @@ protected TupleOperations makeOperationsFromTuple(TarantoolTuple tuple) { } @Override - protected MessagePackValueMapper tupleResultMapper() { - return client.getResultMapperFactoryFactory().defaultTupleResultMapperFactory() - .withDefaultTupleValueConverter(config.getMessagePackMapper(), getMetadata()); + protected MessagePackValueMapper arrayTupleResultMapper() { + return client.getResultMapperFactoryFactory().arrayTupleResultMapperFactory() + .withArrayValueToTarantoolTupleResultConverter(config.getMessagePackMapper(), getMetadata()); } @Override diff --git a/src/main/java/io/tarantool/driver/mappers/AbstractResultMapper.java b/src/main/java/io/tarantool/driver/mappers/AbstractResultMapper.java index e82aa7d53..844b61e89 100644 --- a/src/main/java/io/tarantool/driver/mappers/AbstractResultMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/AbstractResultMapper.java @@ -1,10 +1,11 @@ package io.tarantool.driver.mappers; import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; import org.msgpack.value.Value; import org.msgpack.value.ValueType; +import java.util.List; import java.util.Optional; /** @@ -27,12 +28,62 @@ public abstract class AbstractResultMapper implements MessagePackValueMapper */ public AbstractResultMapper( MessagePackValueMapper valueMapper, - ValueConverter resultConverter, + ValueConverter resultConverter, Class resultClass) { this.valueMapper = valueMapper; valueMapper.registerValueConverter(ValueType.ARRAY, resultClass, resultConverter); } + public AbstractResultMapper( + MessagePackValueMapper valueMapper, + ValueConverter resultConverter) { + this.valueMapper = valueMapper; + valueMapper.registerValueConverterWithoutTargetClass(ValueType.ARRAY, resultConverter); + } + + public AbstractResultMapper( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter resultConverter, + Class resultClass) { + this.valueMapper = valueMapper; + valueMapper.registerValueConverter(valueType, resultClass, resultConverter); + } + + public AbstractResultMapper( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter resultConverter) { + this.valueMapper = valueMapper; + valueMapper.registerValueConverterWithoutTargetClass(valueType, resultConverter); + } + + public AbstractResultMapper( + MessagePackValueMapper valueMapper, + List> converters, + Class resultClass) { + this.valueMapper = valueMapper; + for (ValueConverterWithInputTypeWrapper converter : + converters) { + valueMapper.registerValueConverter( + converter.getValueType(), + resultClass, + converter.getValueConverter()); + } + } + + public AbstractResultMapper( + MessagePackValueMapper valueMapper, + List> converters) { + this.valueMapper = valueMapper; + for (ValueConverterWithInputTypeWrapper converter : + converters) { + valueMapper.registerValueConverterWithoutTargetClass( + converter.getValueType(), + converter.getValueConverter()); + } + } + @Override public O fromValue(V v) throws MessagePackValueMapperException { return valueMapper.fromValue(v); @@ -51,6 +102,12 @@ public void registerValueConverter( valueMapper.registerValueConverter(valueType, objectClass, converter); } + @Override + public void registerValueConverterWithoutTargetClass( + ValueType valueType, ValueConverter converter) { + valueMapper.registerValueConverterWithoutTargetClass(valueType, converter); + } + @Override public Optional> getValueConverter( ValueType valueType, diff --git a/src/main/java/io/tarantool/driver/mappers/AbstractResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/AbstractResultMapperFactory.java deleted file mode 100644 index 654f70fe7..000000000 --- a/src/main/java/io/tarantool/driver/mappers/AbstractResultMapperFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.exceptions.TarantoolClientException; -import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; - -/** - * Base class for result mapper factories. - * - * @param target result mapper type - * @param target result type - * @author Alexey Kuzin - */ -public abstract class AbstractResultMapperFactory> { - - /** - * Basic constructor - */ - public AbstractResultMapperFactory() { - } - - /** - * Instantiate the mapper for result contents - * - * @param valueMapper MessagePack value-to-object mapper for result contents - * @param valueConverter converter for result contents (an array) - * @param resultClass result type - * @return new mapper instance - */ - protected abstract T createMapper( - MessagePackValueMapper valueMapper, - ValueConverter valueConverter, - Class resultClass); - - /** - * Create {@link AbstractResultMapper} instance with the passed converter. - * - * @param valueMapper MessagePack value-to-object mapper for result contents - * @param valueConverter entity-to-object converter - * @return a mapper instance - */ - public T withConverter(MessagePackValueMapper valueMapper, ValueConverter valueConverter) { - try { - return withConverter( - valueMapper, valueConverter, MapperReflectionUtils.getConverterTargetType(valueConverter)); - } catch (InterfaceParameterClassNotFoundException e) { - throw new TarantoolClientException(e); - } - } - - /** - * Create {@link AbstractResultMapper} instance with the passed converter. - * - * @param valueMapper MessagePack value-to-object mapper for result contents - * @param valueConverter entity-to-object converter - * @param resultClass target result type class. Necessary for resolving ambiguity when more than one suitable - * converters are present in the configured mapper - * @return a mapper instance - */ - public T withConverter( - MessagePackValueMapper valueMapper, - ValueConverter valueConverter, - Class resultClass) { - return createMapper(valueMapper, valueConverter, resultClass); - } - -} diff --git a/src/main/java/io/tarantool/driver/mappers/CallResultMapper.java b/src/main/java/io/tarantool/driver/mappers/CallResultMapper.java index 4b11f9cdc..b915119aa 100644 --- a/src/main/java/io/tarantool/driver/mappers/CallResultMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/CallResultMapper.java @@ -2,7 +2,11 @@ import io.tarantool.driver.api.CallResult; import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +import java.util.List; /** * Special tuple mapper for API function call results. @@ -25,9 +29,36 @@ public class CallResultMapper> extends AbstractResult * @param resultClass tuple result class */ public CallResultMapper( - MessagePackValueMapper valueMapper, - ValueConverter resultConverter, + MessagePackValueMapper valueMapper, ValueConverter resultConverter, Class resultClass) { super(valueMapper, resultConverter, resultClass); } + + public CallResultMapper( + MessagePackValueMapper valueMapper, ValueConverter resultConverter) { + super(valueMapper, resultConverter); + } + + public CallResultMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter resultConverter, Class resultClass) { + super(valueMapper, valueType, resultConverter, resultClass); + } + + public CallResultMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter resultConverter) { + super(valueMapper, valueType, resultConverter); + } + + public CallResultMapper( + MessagePackValueMapper valueMapper, List> converters, + Class resultClass) { + super(valueMapper, converters, resultClass); + } + + public CallResultMapper( + MessagePackValueMapper valueMapper, List> converters) { + super(valueMapper, converters); + } } diff --git a/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java b/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java index 92e3edfe6..eb39c59cc 100644 --- a/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapper.java @@ -2,13 +2,14 @@ import io.tarantool.driver.api.MessagePackMapperBuilder; import io.tarantool.driver.exceptions.TarantoolClientException; +import io.tarantool.driver.mappers.converters.ConverterWrapper; import io.tarantool.driver.mappers.converters.ObjectConverter; import io.tarantool.driver.mappers.converters.ValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultListToArrayValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultMapToMapValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultArrayValueToListConverter; -import io.tarantool.driver.mappers.converters.value.DefaultMapValueToMapConverter; -import io.tarantool.driver.mappers.converters.value.DefaultNullToNilValueConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultArrayValueToListConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultMapValueToMapConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultNullToNilValueConverter; import org.msgpack.value.NilValue; import org.msgpack.value.Value; import org.msgpack.value.ValueType; @@ -168,6 +169,13 @@ public void registerValueConverter( converters.add(0, new ConverterWrapper<>(converter, objectClass)); } + public void registerValueConverterWithoutTargetClass(ValueType valueType, + ValueConverter converter) { + List>> converters = + valueConverters.computeIfAbsent(valueType, k -> new LinkedList<>()); + converters.add(0, new ConverterWrapper<>(converter, Object.class)); + } + /** * Check if the specified converter can convert to the specified object type */ diff --git a/src/main/java/io/tarantool/driver/mappers/DefaultMultiValueResultMapper.java b/src/main/java/io/tarantool/driver/mappers/DefaultMultiValueResultMapper.java index 3093f5e4d..6184e5358 100644 --- a/src/main/java/io/tarantool/driver/mappers/DefaultMultiValueResultMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/DefaultMultiValueResultMapper.java @@ -2,7 +2,8 @@ import io.tarantool.driver.api.MultiValueCallResult; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.MultiValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToMultiValueCallResultSimpleConverter; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.msgpack.value.ArrayValue; import java.util.List; @@ -34,6 +35,6 @@ private static > Class> getResul private static > ValueConverter> defaultValueConverter(MessagePackValueMapper valueMapper) { - return new MultiValueCallResultConverter<>(valueMapper::fromValue); + return new ArrayValueToMultiValueCallResultSimpleConverter<>(valueMapper::fromValue); } } diff --git a/src/main/java/io/tarantool/driver/mappers/DefaultSingleValueResultMapper.java b/src/main/java/io/tarantool/driver/mappers/DefaultSingleValueResultMapper.java index db71bcc60..2a6a4ad5a 100644 --- a/src/main/java/io/tarantool/driver/mappers/DefaultSingleValueResultMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/DefaultSingleValueResultMapper.java @@ -2,7 +2,8 @@ import io.tarantool.driver.api.SingleValueCallResult; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.SingleValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToSingleValueCallResultSimpleConverter; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.msgpack.value.ArrayValue; /** @@ -31,6 +32,6 @@ private static Class> getResultClass(Class conte private static ValueConverter> defaultValueConverter( MessagePackValueMapper valueMapper) { - return new SingleValueCallResultConverter<>(valueMapper::fromValue); + return new ArrayValueToSingleValueCallResultSimpleConverter<>(valueMapper::fromValue); } } diff --git a/src/main/java/io/tarantool/driver/mappers/MapperReflectionUtils.java b/src/main/java/io/tarantool/driver/mappers/MapperReflectionUtils.java index cc5f6f5ce..249f1167a 100644 --- a/src/main/java/io/tarantool/driver/mappers/MapperReflectionUtils.java +++ b/src/main/java/io/tarantool/driver/mappers/MapperReflectionUtils.java @@ -8,7 +8,7 @@ /** * Contains helper methods for converter classes lookup and determining its parameters at runtime */ -final class MapperReflectionUtils { +public final class MapperReflectionUtils { private MapperReflectionUtils() { } @@ -23,7 +23,8 @@ private MapperReflectionUtils() { * cannot be determined or is not found */ @SuppressWarnings("unchecked") - static Class getConverterTargetType(Object converter) throws InterfaceParameterClassNotFoundException { + public static Class getConverterTargetType(Object converter) + throws InterfaceParameterClassNotFoundException { Type[] genericInterfaces = getGenericInterfaces(converter); if (genericInterfaces.length < 1) { throw new RuntimeException( diff --git a/src/main/java/io/tarantool/driver/mappers/MessagePackValueMapper.java b/src/main/java/io/tarantool/driver/mappers/MessagePackValueMapper.java index 9566cb1af..eff854fe7 100644 --- a/src/main/java/io/tarantool/driver/mappers/MessagePackValueMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/MessagePackValueMapper.java @@ -52,6 +52,9 @@ void registerValueConverter( ValueType valueType, Class objectClass, ValueConverter converter); + void registerValueConverterWithoutTargetClass( + ValueType valueType, ValueConverter converter); + /** * Get a converter capable of converting from the source entity class to the target class * diff --git a/src/main/java/io/tarantool/driver/mappers/ResultMapperFactoryFactory.java b/src/main/java/io/tarantool/driver/mappers/ResultMapperFactoryFactory.java deleted file mode 100644 index d299d4857..000000000 --- a/src/main/java/io/tarantool/driver/mappers/ResultMapperFactoryFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.MultiValueCallResult; -import io.tarantool.driver.api.SingleValueCallResult; -import io.tarantool.driver.api.TarantoolResult; - -import java.util.List; - -/** - * Provides different factories for creating result mappers - * - * @author Alexey Kuzin - */ -public interface ResultMapperFactoryFactory { - /** - * Default factory for call result with a list of tuples. - * Use this factory for handling default standalone server protocol results. - * - * @return default factory for array of tuple results - */ - TarantoolTupleResultMapperFactory defaultTupleResultMapperFactory(); - - /** - * Default factory for single value stored function call result with a list of tuples. - * Use this factory for handling default proxy function call results like tarantool/crud module API. - * - * @return default factory for single value call result with a list of tuples - */ - TarantoolTupleSingleResultMapperFactory defaultTupleSingleResultMapperFactory(); - - /** - * Default factory for multi value stored function call result, where each return item is a tuple. - * Use this factory for handling proxy function call results which return tuples as a multi-return result. - * - * @return default factory for multi value call result, where each item is a tuple - */ - TarantoolTupleMultiResultMapperFactory defaultTupleMultiResultMapperFactory(); - - /** - * Create a factory for mapping Tarantool server protocol result to a list of tuples as {@link TarantoolResult} - * - * @param target tuple type - * @return new or existing factory instance - */ - TupleResultMapperFactory tupleResultMapperFactory(); - - /** - * Create a factory for mapping stored function call results to {@link SingleValueCallResult} - * - * @param target result type - * @return new or existing factory instance - */ - SingleValueResultMapperFactory singleValueResultMapperFactory(); - - /** - * Create a factory for mapping stored function call result to {@link SingleValueCallResult} containing a list - * of tuples mapped to {@link TarantoolResult} - * - * @param target tuple type - * @return new or existing factory instance - */ - SingleValueTarantoolResultMapperFactory singleValueTarantoolResultMapperFactory(); - - /** - * Create a factory for mapping stored function call results to {@link MultiValueCallResult} - * - * @param target result content type - * @param target result type - * @return new or existing factory instance - */ - > MultiValueResultMapperFactory multiValueResultMapperFactory(); - - /** - * Create a factory for mapping stored function call result to {@link MultiValueCallResult} containing a list - * of tuples mapped to {@link TarantoolResult} - * - * @param target tuple type - * @return new or existing factory instance - */ - MultiValueTarantoolResultMapperFactory multiValueTarantoolResultMapperFactory(); -} diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolCallResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TarantoolCallResultMapperFactory.java deleted file mode 100644 index 13833b725..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolCallResultMapperFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.CallResult; -import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; - -/** - * Factory for {@link CallResultMapper} instances used for calling API functions on Tarantool instance - * - * @param target result content type - * @param target result type - * @author Alexey Kuzin - */ -public class TarantoolCallResultMapperFactory> extends - AbstractResultMapperFactory> { - - /** - * Basic constructor - */ - public TarantoolCallResultMapperFactory() { - super(); - } - - @Override - protected CallResultMapper createMapper( - MessagePackValueMapper valueMapper, - ValueConverter valueConverter, - Class resultClass) { - return new CallResultMapper<>(valueMapper, valueConverter, resultClass); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapper.java b/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapper.java index 0822ca9f5..1502f02d5 100644 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapper.java +++ b/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapper.java @@ -2,26 +2,61 @@ import io.tarantool.driver.api.TarantoolResult; import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +import java.util.List; /** - * Mapper from array of MessagePack tuples to {@link TarantoolResult} + * Mapper from array of MessagePack values to {@link TarantoolResult} with specified inner structure * * @param target tuple type * @author Alexey Kuzin */ public class TarantoolResultMapper extends AbstractResultMapper> { + public TarantoolResultMapper( + MessagePackValueMapper valueMapper, + ValueConverter> resultConverter, + Class> resultClass) { + super(valueMapper, resultConverter, resultClass); + } + + public TarantoolResultMapper( + MessagePackValueMapper valueMapper, + ValueConverter> resultConverter) { + super(valueMapper, resultConverter); + } + /** * Basic constructor * - * @param valueMapper value mapper to be used for result rows - * @param tupleConverter MessagePack result array to tuple result converter - * @param resultClass tuple result class + * @param valueMapper value mapper to be used for result rows + * @param valueType MessagePack source type + * @param resultConverter MessagePack result array to TarantoolResult with inner specified structure + * @param resultClass tuple result class */ public TarantoolResultMapper( - MessagePackValueMapper valueMapper, - ValueConverter> tupleConverter, + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter> resultConverter, Class> resultClass) { - super(valueMapper, tupleConverter, resultClass); + super(valueMapper, valueType, resultConverter, resultClass); + } + + public TarantoolResultMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter> resultConverter) { + super(valueMapper, valueType, resultConverter); + } + + public TarantoolResultMapper( + MessagePackValueMapper valueMapper, List>> converters, + Class> resultClass) { + super(valueMapper, converters, resultClass); + } + + public TarantoolResultMapper( + MessagePackValueMapper valueMapper, List>> converters) { + super(valueMapper, converters); } } diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapperFactory.java deleted file mode 100644 index 61399062d..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolResultMapperFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; - -/** - * Factory for {@link TarantoolResultMapper} instances used for handling box protocol operation results returning - * {@link TarantoolResult} (array of tuples) - * - * @param target tuple type - * @author Alexey Kuzin - */ -public class TarantoolResultMapperFactory extends - AbstractResultMapperFactory, TarantoolResultMapper> { - - /** - * Basic constructor - */ - public TarantoolResultMapperFactory() { - super(); - } - - @Override - protected TarantoolResultMapper createMapper( - MessagePackValueMapper valueMapper, - ValueConverter> valueConverter, - Class> resultClass) { - return new TarantoolResultMapper<>(valueMapper, valueConverter, resultClass); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleMultiResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TarantoolTupleMultiResultMapperFactory.java deleted file mode 100644 index 35259e81d..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleMultiResultMapperFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.MultiValueCallResult; -import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; -import io.tarantool.driver.api.tuple.TarantoolTuple; -import io.tarantool.driver.api.tuple.TarantoolTupleMultiResult; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolTupleConverter; - -/** - * Factory for {@link CallResultMapper} instances used for handling results with {@link TarantoolTuple}s as - * multi-return result items - * - * @author Alexey Kuzin - */ -public class TarantoolTupleMultiResultMapperFactory - extends MultiValueTarantoolResultMapperFactory { - - /** - * Basic constructor - */ - public TarantoolTupleMultiResultMapperFactory() { - super(); - } - - /** - * Basic constructor with mapper - * - * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion - */ - public TarantoolTupleMultiResultMapperFactory(MessagePackMapper messagePackMapper) { - super(messagePackMapper); - } - - /** - * Get default {@link TarantoolTuple} converter - * - * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion - * @param spaceMetadata configured {@link TarantoolSpaceMetadata} instance - * @return default mapper instance configured with {@link TarantoolTupleConverter} instance - */ - public CallResultMapper, - MultiValueCallResult>> - withDefaultTupleValueConverter(MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { - return withTarantoolResultConverter( - new TarantoolTupleConverter(messagePackMapper, spaceMetadata), - TarantoolTupleMultiResult.class); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TarantoolTupleResultMapperFactory.java deleted file mode 100644 index 1b98991d0..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleResultMapperFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; -import io.tarantool.driver.api.tuple.TarantoolTuple; -import io.tarantool.driver.api.tuple.TarantoolTupleResult; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolTupleConverter; - -/** - * Factory for {@link TarantoolResultMapper} instances used for handling results with {@link TarantoolTuple}s - * - * @author Alexey Kuzin - */ -public class TarantoolTupleResultMapperFactory extends TupleResultMapperFactory { - - /** - * Basic constructor - */ - public TarantoolTupleResultMapperFactory() { - super(); - } - - /** - * Basic constructor with mapper - * - * @param messagePackMapper MessagePack-to-object mapper for tuple contents - */ - public TarantoolTupleResultMapperFactory(MessagePackMapper messagePackMapper) { - super(messagePackMapper); - } - - /** - * Get default {@link TarantoolTuple} converter - * - * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion - * @param spaceMetadata configured {@link TarantoolSpaceMetadata} instance - * @return default mapper instance configured with {@link TarantoolTupleConverter} instance - */ - public TarantoolResultMapper withDefaultTupleValueConverter( - MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { - return withTupleValueConverter( - new TarantoolTupleConverter(messagePackMapper, spaceMetadata), TarantoolTupleResult.class); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleSingleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TarantoolTupleSingleResultMapperFactory.java deleted file mode 100644 index a4292fc1b..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TarantoolTupleSingleResultMapperFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.SingleValueCallResult; -import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; -import io.tarantool.driver.api.tuple.TarantoolTuple; -import io.tarantool.driver.api.tuple.TarantoolTupleSingleResult; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolTupleConverter; - -/** - * Factory for {@link CallResultMapper} instances used for handling results with {@link TarantoolTuple}s - * - * @author Alexey Kuzin - */ -public class TarantoolTupleSingleResultMapperFactory - extends SingleValueTarantoolResultMapperFactory { - - /** - * Basic constructor - */ - public TarantoolTupleSingleResultMapperFactory() { - super(); - } - - /** - * Basic constructor with mapper - * - * @param messagePackMapper mapper for MessagePack entities in tuple fields to Java objects - */ - public TarantoolTupleSingleResultMapperFactory(MessagePackMapper messagePackMapper) { - super(messagePackMapper); - } - - /** - * Get default {@link TarantoolTuple} converter - * - * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion - * @param spaceMetadata configured {@link TarantoolSpaceMetadata} instance - * @return default mapper instance configured with {@link TarantoolTupleConverter} instance - */ - public CallResultMapper, SingleValueCallResult>> - withDefaultTupleValueConverter(MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { - return withTarantoolResultConverter( - new TarantoolTupleConverter(messagePackMapper, spaceMetadata), - TarantoolTupleSingleResult.class); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/TupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/TupleResultMapperFactory.java deleted file mode 100644 index d9d57b0df..000000000 --- a/src/main/java/io/tarantool/driver/mappers/TupleResultMapperFactory.java +++ /dev/null @@ -1,86 +0,0 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolResultConverter; -import org.msgpack.value.ArrayValue; - -/** - * Factory for {@link TarantoolResultMapper} instances used for handling results with tuples of any type - * - * @author Alexey Kuzin - */ -public class TupleResultMapperFactory extends TarantoolResultMapperFactory { - - private final MessagePackMapper messagePackMapper; - - /** - * Basic constructor - */ - public TupleResultMapperFactory() { - this(DefaultMessagePackMapperFactory.getInstance().emptyMapper()); - } - - /** - * Basic constructor with mapper - * - * @param messagePackMapper MessagePack-to-object mapper for tuple contents - */ - public TupleResultMapperFactory(MessagePackMapper messagePackMapper) { - super(); - this.messagePackMapper = messagePackMapper; - } - - /** - * Get converter for tuples in {@link TarantoolResult} - * - * @param tupleConverter MessagePack-to-entity converter for tuples - * @return mapper instance - */ - public TarantoolResultMapper withTupleValueConverter(ValueConverter tupleConverter) { - return withConverter(messagePackMapper.copy(), new TarantoolResultConverter<>(tupleConverter)); - } - - /** - * Get converter for tuples in {@link TarantoolResult} - * - * @param valueMapper MessagePack-to-object mapper for tuple contents - * @param tupleConverter MessagePack-to-entity converter for tuples - * @return mapper instance - */ - public TarantoolResultMapper withTupleValueConverter( - MessagePackValueMapper valueMapper, - ValueConverter tupleConverter) { - return withConverter(valueMapper, new TarantoolResultConverter<>(tupleConverter)); - } - - /** - * Get converter for tuples in {@link TarantoolResult} - * - * @param tupleConverter MessagePack-to-entity converter for tuples - * @param resultClass allows to specify the result type in case if it is impossible to get it via reflection - * (e.g. lambda) - * @return mapper instance - */ - public TarantoolResultMapper withTupleValueConverter( - ValueConverter tupleConverter, - Class> resultClass) { - return withConverter(messagePackMapper.copy(), new TarantoolResultConverter<>(tupleConverter), resultClass); - } - - /** - * Get converter for tuples in {@link TarantoolResult} - * - * @param valueMapper MessagePack-to-object mapper for tuple contents - * @param tupleConverter MessagePack-to-entity converter for tuples - * @param resultClass allows to specify the result type in case if it is impossible to get it via reflection - * (e.g. lambda) - * @return mapper instance - */ - public TarantoolResultMapper withTupleValueConverter( - MessagePackValueMapper valueMapper, - ValueConverter tupleConverter, - Class> resultClass) { - return withConverter(valueMapper, new TarantoolResultConverter<>(tupleConverter), resultClass); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/ConverterWrapper.java b/src/main/java/io/tarantool/driver/mappers/converters/ConverterWrapper.java similarity index 68% rename from src/main/java/io/tarantool/driver/mappers/ConverterWrapper.java rename to src/main/java/io/tarantool/driver/mappers/converters/ConverterWrapper.java index 917c24f5e..465f7a6c1 100644 --- a/src/main/java/io/tarantool/driver/mappers/ConverterWrapper.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/ConverterWrapper.java @@ -1,8 +1,4 @@ -package io.tarantool.driver.mappers; - -import io.tarantool.driver.mappers.converters.Converter; -import io.tarantool.driver.mappers.converters.ObjectConverter; -import io.tarantool.driver.mappers.converters.ValueConverter; +package io.tarantool.driver.mappers.converters; import java.io.Serializable; @@ -14,14 +10,14 @@ * @param the converter that returns an instance of this target type from an instance of input type * @author Artyom Dubinin */ -class ConverterWrapper implements Serializable { +public class ConverterWrapper implements Serializable { private static final long serialVersionUID = 20220501L; private final C converter; private final Class targetClass; - ConverterWrapper(C converter, Class targetClass) { + public ConverterWrapper(C converter, Class targetClass) { this.converter = converter; this.targetClass = targetClass; } diff --git a/src/main/java/io/tarantool/driver/mappers/converters/ValueConverterWithInputTypeWrapper.java b/src/main/java/io/tarantool/driver/mappers/converters/ValueConverterWithInputTypeWrapper.java new file mode 100644 index 000000000..589da9256 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/ValueConverterWithInputTypeWrapper.java @@ -0,0 +1,26 @@ +package io.tarantool.driver.mappers.converters; + +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +/** + * @author Artyom Dubinin + */ +public class ValueConverterWithInputTypeWrapper { + private final ValueType valueType; + private final ValueConverter valueConverter; + + public ValueConverterWithInputTypeWrapper( + ValueType valueType, ValueConverter valueConverter) { + this.valueType = valueType; + this.valueConverter = valueConverter; + } + + public ValueType getValueType() { + return valueType; + } + + public ValueConverter getValueConverter() { + return valueConverter; + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultConverter.java new file mode 100644 index 000000000..b694757ef --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultConverter.java @@ -0,0 +1,37 @@ +package io.tarantool.driver.mappers.converters.value; + +import io.tarantool.driver.api.MultiValueCallResult; +import io.tarantool.driver.core.MultiValueCallResultImpl; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import org.msgpack.value.ArrayValue; + +import java.util.List; + +/** + * Converter of the stored function call result into a {@link MultiValueCallResult} with mapper inside + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public class ArrayValueToMultiValueCallResultConverter> + implements ValueConverter> { + + private static final long serialVersionUID = 20200708L; + + private final MessagePackValueMapper valueMapper; + + /** + * Basic constructor + * + * @param valueMapper converter of multi-return result items to list + */ + public ArrayValueToMultiValueCallResultConverter(MessagePackValueMapper valueMapper) { + this.valueMapper = valueMapper; + } + + @Override + public MultiValueCallResult fromValue(ArrayValue value) { + return new MultiValueCallResultImpl<>(value, valueMapper); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueCallResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultSimpleConverter.java similarity index 62% rename from src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueCallResultConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultSimpleConverter.java index 047bb8435..7bf5e045f 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueCallResultConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueCallResultSimpleConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value.custom; +package io.tarantool.driver.mappers.converters.value; import io.tarantool.driver.api.MultiValueCallResult; import io.tarantool.driver.core.MultiValueCallResultImpl; @@ -8,14 +8,15 @@ import java.util.List; /** - * Converter for stored function call result to a list of items + * Converter of the stored function call result into a {@link MultiValueCallResult} with converter inside * * @author Alexey Kuzin + * @author Artyom Dubinin */ -public class MultiValueCallResultConverter> +public class ArrayValueToMultiValueCallResultSimpleConverter> implements ValueConverter> { - private static final long serialVersionUID = 20200708L; + private static final long serialVersionUID = -5298829576218240572L; private final ValueConverter valueConverter; @@ -24,7 +25,7 @@ public class MultiValueCallResultConverter> * * @param valueConverter converter of multi-return result items to list */ - public MultiValueCallResultConverter(ValueConverter valueConverter) { + public ArrayValueToMultiValueCallResultSimpleConverter(ValueConverter valueConverter) { this.valueConverter = valueConverter; } diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueListConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueListConverter.java similarity index 76% rename from src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueListConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueListConverter.java index 72c9808e4..f1e1c0669 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/MultiValueListConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToMultiValueListConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value.custom; +package io.tarantool.driver.mappers.converters.value; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.ArrayValue; @@ -13,7 +13,8 @@ * * @author Alexey Kuzin */ -public class MultiValueListConverter, V extends Value> implements ValueConverter { +public class ArrayValueToMultiValueListConverter, V extends Value> + implements ValueConverter { private static final long serialVersionUID = 20200708L; @@ -26,7 +27,7 @@ public class MultiValueListConverter, V extends Value> impl * @param valueConverter converter for result items * @param containerSupplier supplier for an empty collection of the result type */ - public MultiValueListConverter(ValueConverter valueConverter, Supplier containerSupplier) { + public ArrayValueToMultiValueListConverter(ValueConverter valueConverter, Supplier containerSupplier) { this.valueConverter = valueConverter; this.containerSupplier = containerSupplier; } diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultConverter.java new file mode 100644 index 000000000..a32d9abbd --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultConverter.java @@ -0,0 +1,30 @@ +package io.tarantool.driver.mappers.converters.value; + +import io.tarantool.driver.api.SingleValueCallResult; +import io.tarantool.driver.core.SingleValueCallResultImpl; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import org.msgpack.value.ArrayValue; + +/** + * Converter of the stored function call result into a {@link SingleValueCallResult} with mapper inside + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public class ArrayValueToSingleValueCallResultConverter + implements ValueConverter> { + + private static final long serialVersionUID = 7218783308373068532L; + + private final MessagePackValueMapper valueMapper; + + public ArrayValueToSingleValueCallResultConverter(MessagePackValueMapper valueMapper) { + this.valueMapper = valueMapper; + } + + @Override + public SingleValueCallResult fromValue(ArrayValue value) { + return new SingleValueCallResultImpl<>(value, valueMapper); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/SingleValueCallResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultSimpleConverter.java similarity index 58% rename from src/main/java/io/tarantool/driver/mappers/converters/value/custom/SingleValueCallResultConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultSimpleConverter.java index c1be99746..e9869d3a8 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/SingleValueCallResultConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToSingleValueCallResultSimpleConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value.custom; +package io.tarantool.driver.mappers.converters.value; import io.tarantool.driver.api.SingleValueCallResult; import io.tarantool.driver.core.SingleValueCallResultImpl; @@ -7,17 +7,19 @@ import org.msgpack.value.Value; /** - * Converter of the stored function call result into a {@link SingleValueCallResult} + * Converter of the stored function call result into a {@link SingleValueCallResult} with converter inside * * @author Alexey Kuzin + * @author Artyom Dubinin */ -public class SingleValueCallResultConverter implements ValueConverter> { +public class ArrayValueToSingleValueCallResultSimpleConverter + implements ValueConverter> { - private static final long serialVersionUID = 20200708L; + private static final long serialVersionUID = 5062622344994604532L; private final ValueConverter valueConverter; - public SingleValueCallResultConverter(ValueConverter valueConverter) { + public ArrayValueToSingleValueCallResultSimpleConverter(ValueConverter valueConverter) { this.valueConverter = valueConverter; } diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolResultConverter.java new file mode 100644 index 000000000..a2b25bfa2 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolResultConverter.java @@ -0,0 +1,29 @@ +package io.tarantool.driver.mappers.converters.value; + +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.core.TarantoolResultImpl; +import io.tarantool.driver.mappers.converters.ValueConverter; +import org.msgpack.value.ArrayValue; + +/** + * @author Artyom Dubinin + */ +public class ArrayValueToTarantoolResultConverter + implements ValueConverter> { + + private static final long serialVersionUID = -1348387430063097175L; + + private ValueConverter valueConverter; + + public ArrayValueToTarantoolResultConverter() { + } + + public ArrayValueToTarantoolResultConverter(ValueConverter valueConverter) { + this.valueConverter = valueConverter; + } + + @Override + public TarantoolResult fromValue(ArrayValue value) { + return new TarantoolResultImpl<>(value, valueConverter); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolTupleConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleConverter.java similarity index 75% rename from src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolTupleConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleConverter.java index 125f667d2..98ad6a1da 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolTupleConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value.custom; +package io.tarantool.driver.mappers.converters.value; import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; import io.tarantool.driver.api.tuple.TarantoolTuple; @@ -12,14 +12,14 @@ * * @author Sergey Volgin */ -public class TarantoolTupleConverter implements ValueConverter { +public class ArrayValueToTarantoolTupleConverter implements ValueConverter { private static final long serialVersionUID = 20220418L; private final MessagePackMapper mapper; private final TarantoolSpaceMetadata spaceMetadata; - public TarantoolTupleConverter(MessagePackMapper mapper, TarantoolSpaceMetadata spaceMetadata) { + public ArrayValueToTarantoolTupleConverter(MessagePackMapper mapper, TarantoolSpaceMetadata spaceMetadata) { this.mapper = mapper; this.spaceMetadata = spaceMetadata; } diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleResultConverter.java new file mode 100644 index 000000000..f33fb2e51 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/ArrayValueToTarantoolTupleResultConverter.java @@ -0,0 +1,29 @@ +package io.tarantool.driver.mappers.converters.value; + +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.core.TarantoolResultImpl; +import io.tarantool.driver.mappers.converters.ValueConverter; +import org.msgpack.value.ArrayValue; + +/** + * @author Artyom Dubinin + */ +public class ArrayValueToTarantoolTupleResultConverter + implements ValueConverter> { + + private static final long serialVersionUID = -1348387430063097175L; + + private final ValueConverter tupleConverter; + + public ArrayValueToTarantoolTupleResultConverter( + ValueConverter tupleConverter) { + super(); + this.tupleConverter = tupleConverter; + } + + @Override + public TarantoolResult fromValue(ArrayValue value) { + return new TarantoolResultImpl<>(value, tupleConverter); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/RowsMetadataToTarantoolTupleResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/RowsMetadataToTarantoolTupleResultConverter.java new file mode 100644 index 000000000..1058e2220 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/RowsMetadataToTarantoolTupleResultConverter.java @@ -0,0 +1,54 @@ +package io.tarantool.driver.mappers.converters.value; + +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.core.TarantoolResultImpl; +import io.tarantool.driver.mappers.converters.ValueConverter; +import org.msgpack.value.ArrayValue; +import org.msgpack.value.MapValue; +import org.msgpack.value.StringValue; +import org.msgpack.value.Value; +import org.msgpack.value.ValueFactory; + +import java.util.Map; + +/** + * @author Artyom Dubinin + */ +public class RowsMetadataToTarantoolTupleResultConverter + implements ValueConverter> { + + private static final long serialVersionUID = -5228606294087295535L; + + protected static final StringValue RESULT_META = ValueFactory.newString("metadata"); + protected static final StringValue RESULT_ROWS = ValueFactory.newString("rows"); + + private final ArrayValueToTarantoolTupleConverter tupleConverter; + + public RowsMetadataToTarantoolTupleResultConverter(ArrayValueToTarantoolTupleConverter tupleConverter) { + super(); + this.tupleConverter = tupleConverter; + } + + @Override + public TarantoolResult fromValue(MapValue value) { + Map tupleMap = value.asMapValue().map(); + ArrayValue rawTuples = tupleMap.get(RESULT_ROWS).asArrayValue(); + + return new TarantoolResultImpl<>(rawTuples, tupleConverter); + } + + @Override + public boolean canConvertValue(MapValue value) { + // [{"metadata" : [...], "rows": [...]}] + Map tupleMap = value.asMapValue().map(); + if (!hasRowsAndMetadata(tupleMap)) { + return false; + } + return tupleMap.get(RESULT_ROWS).isArrayValue() && tupleMap.get(RESULT_META).isArrayValue(); + } + + static boolean hasRowsAndMetadata(Map valueMap) { + return valueMap.containsKey(RESULT_META) && valueMap.containsKey(RESULT_ROWS); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolResultConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolResultConverter.java deleted file mode 100644 index cf266087b..000000000 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/TarantoolResultConverter.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.tarantool.driver.mappers.converters.value.custom; - -import io.tarantool.driver.api.TarantoolResult; -import io.tarantool.driver.core.TarantoolResultImpl; -import io.tarantool.driver.mappers.converters.ValueConverter; -import org.msgpack.value.ArrayValue; -import org.msgpack.value.Value; - -/** - * @author Alexey Kuzin - */ -public class TarantoolResultConverter implements ValueConverter> { - - private static final long serialVersionUID = 20200708L; - - private final ValueConverter tupleConverter; - - public TarantoolResultConverter(ValueConverter tupleConverter) { - this.tupleConverter = tupleConverter; - } - - @Override - public TarantoolResult fromValue(V value) { - return new TarantoolResultImpl<>(value, tupleConverter); - } -} diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/package-info.java b/src/main/java/io/tarantool/driver/mappers/converters/value/custom/package-info.java deleted file mode 100644 index d035fa0c7..000000000 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/custom/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Contains converters that map MessagePack to connector's special Java objects - * - * @author Alexey Kuzin - * @author Artyom Dubinin - */ -package io.tarantool.driver.mappers.converters.value.custom; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToListConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToListConverter.java similarity index 92% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToListConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToListConverter.java index e1581128f..22f202fa8 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToListConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToListConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToLongArrayConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToLongArrayConverter.java similarity index 93% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToLongArrayConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToLongArrayConverter.java index 591e8d2b3..666467a65 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultArrayValueToLongArrayConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultArrayValueToLongArrayConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.ArrayValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBinaryValueToByteArrayConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBinaryValueToByteArrayConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBinaryValueToByteArrayConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBinaryValueToByteArrayConverter.java index 9bf1d3103..28befb64e 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBinaryValueToByteArrayConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBinaryValueToByteArrayConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.BinaryValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBooleanValueToBooleanConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBooleanValueToBooleanConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBooleanValueToBooleanConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBooleanValueToBooleanConverter.java index ac1593017..f5ae1554d 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultBooleanValueToBooleanConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultBooleanValueToBooleanConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.BooleanValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToBigDecimalConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToBigDecimalConverter.java similarity index 98% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToBigDecimalConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToBigDecimalConverter.java index c5bf85cd7..7a44e9585 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToBigDecimalConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToBigDecimalConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.MessagePackValueMapperException; import io.tarantool.driver.mappers.converters.ValueConverter; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToUUIDConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToUUIDConverter.java similarity index 96% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToUUIDConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToUUIDConverter.java index ca00a1b46..771eca044 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultExtensionValueToUUIDConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultExtensionValueToUUIDConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.ExtensionValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToDoubleConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToDoubleConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToDoubleConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToDoubleConverter.java index 419235113..833053bf6 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToDoubleConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToDoubleConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.FloatValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToFloatConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToFloatConverter.java similarity index 93% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToFloatConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToFloatConverter.java index a3de7326a..9e6f1cad1 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToFloatConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToFloatConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.FloatValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToIntegerConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToIntegerConverter.java similarity index 91% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToIntegerConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToIntegerConverter.java index 6060f44f7..0ba6efaca 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToIntegerConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToIntegerConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.FloatValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToLongConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToLongConverter.java similarity index 91% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToLongConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToLongConverter.java index 8012b2f7c..bac44bee3 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToLongConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToLongConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.FloatValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToShortConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToShortConverter.java similarity index 91% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToShortConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToShortConverter.java index 64aff104e..e84839a6b 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultFloatValueToShortConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultFloatValueToShortConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.FloatValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToDoubleConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToDoubleConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToDoubleConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToDoubleConverter.java index 7de37aaf4..19376d086 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToDoubleConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToDoubleConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.IntegerValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToFloatConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToFloatConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToFloatConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToFloatConverter.java index 5837490b3..4aafd1da5 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToFloatConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToFloatConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.IntegerValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToIntegerConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToIntegerConverter.java similarity index 90% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToIntegerConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToIntegerConverter.java index 16fe1eb22..fc6d48959 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToIntegerConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToIntegerConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.IntegerValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToLongConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToLongConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToLongConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToLongConverter.java index d7073cd96..02a46c24d 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToLongConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToLongConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.IntegerValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToShortConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToShortConverter.java similarity index 89% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToShortConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToShortConverter.java index f5ded82fc..02763c5c3 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultIntegerValueToShortConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultIntegerValueToShortConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.IntegerValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultMapValueToMapConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultMapValueToMapConverter.java similarity index 93% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultMapValueToMapConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultMapValueToMapConverter.java index 682fcb508..6ec735f86 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultMapValueToMapConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultMapValueToMapConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultNullToNilValueConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultNullToNilValueConverter.java similarity index 89% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultNullToNilValueConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultNullToNilValueConverter.java index c8fec056a..b9feb435f 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultNullToNilValueConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultNullToNilValueConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ObjectConverter; import org.msgpack.value.NilValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToByteArrayConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToByteArrayConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToByteArrayConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToByteArrayConverter.java index fec6e1617..837fde528 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToByteArrayConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToByteArrayConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.StringValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToCharacterConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToCharacterConverter.java similarity index 92% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToCharacterConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToCharacterConverter.java index 6d0419e15..d98d4302c 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToCharacterConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToCharacterConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.StringValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToStringConverter.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToStringConverter.java similarity index 88% rename from src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToStringConverter.java rename to src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToStringConverter.java index fa80402fd..5c6501987 100644 --- a/src/main/java/io/tarantool/driver/mappers/converters/value/DefaultStringValueToStringConverter.java +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/DefaultStringValueToStringConverter.java @@ -1,4 +1,4 @@ -package io.tarantool.driver.mappers.converters.value; +package io.tarantool.driver.mappers.converters.value.defaults; import io.tarantool.driver.mappers.converters.ValueConverter; import org.msgpack.value.StringValue; diff --git a/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/package-info.java b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/package-info.java new file mode 100644 index 000000000..42a86dbdf --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/converters/value/defaults/package-info.java @@ -0,0 +1,7 @@ +/** + * Contains default converters that map MessagePack values to Java Objects + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +package io.tarantool.driver.mappers.converters.value.defaults; diff --git a/src/main/java/io/tarantool/driver/mappers/factories/AbstractResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/AbstractResultMapperFactory.java new file mode 100644 index 000000000..dad587750 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/AbstractResultMapperFactory.java @@ -0,0 +1,140 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.exceptions.TarantoolClientException; +import io.tarantool.driver.mappers.AbstractResultMapper; +import io.tarantool.driver.mappers.InterfaceParameterClassNotFoundException; +import io.tarantool.driver.mappers.MapperReflectionUtils; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +import java.util.List; + +/** + * Base class for result mapper factories. + * + * @param target result mapper type + * @param target result type + * @author Alexey Kuzin + */ +public abstract class AbstractResultMapperFactory> { + + /** + * Basic constructor + */ + public AbstractResultMapperFactory() { + } + + /** + * Instantiate the mapper for result contents + * + * @param valueMapper MessagePack value-to-object mapper for result contents + * @param valueType MessagePack source type + * @param valueConverter converter for result contents (an array) + * @param resultClass result type + * @return new mapper instance + */ + protected abstract T createMapper( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter valueConverter, + Class resultClass); + + protected abstract T createMapper( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter valueConverter); + + protected abstract T createMapper( + MessagePackValueMapper valueMapper, + List> converters, + Class resultClass); + + protected abstract T createMapper( + MessagePackValueMapper valueMapper, + List> converters); + + /** + * Create {@link AbstractResultMapper} instance with the passed converter. + * + * @param valueMapper MessagePack value-to-object mapper for result contents + * @param valueConverter entity-to-object converter + * @return a mapper instance + */ + public T withConverter( + MessagePackValueMapper valueMapper, + ValueConverter valueConverter) { + return withConverter(valueMapper, ValueType.ARRAY, valueConverter); + } + + public T withConverter( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter valueConverter) { + try { + return withConverter( + valueMapper, valueType, valueConverter, MapperReflectionUtils.getConverterTargetType(valueConverter)); + } catch (InterfaceParameterClassNotFoundException e) { + throw new TarantoolClientException(e); + } + } + + public T withConverterWithoutTargetClass( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter valueConverter) { + return createMapper(valueMapper, valueType, valueConverter); + } + + /** + * Create {@link AbstractResultMapper} instance with the passed converter. + * + * @param valueMapper MessagePack value-to-object mapper for result contents + * @param valueConverter entity-to-object converter + * @param resultClass target result type class. Necessary for resolving ambiguity when more than one suitable + * converters are present in the configured mapper + * @return a mapper instance + */ + public T withConverter( + MessagePackValueMapper valueMapper, + ValueConverter valueConverter, + Class resultClass) { + return withConverter(valueMapper, ValueType.ARRAY, valueConverter, resultClass); + } + + public T withConverter( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter valueConverter, + Class resultClass) { + return createMapper(valueMapper, valueType, valueConverter, resultClass); + } + + public T withConverters( + MessagePackValueMapper valueMapper, + List> converters) { + if (converters.size() < 1) { + throw new TarantoolClientException("Empty converters list"); + } + try { + return withConverters(valueMapper, converters, + MapperReflectionUtils.getConverterTargetType(converters.get(0).getValueConverter())); + } catch (InterfaceParameterClassNotFoundException e) { + throw new TarantoolClientException(e); + } + } + + public T withConverters( + MessagePackValueMapper valueMapper, + List> converters, + Class resultClass) { + return createMapper(valueMapper, converters, resultClass); + } + + public T withConverterWithoutTargetClass( + MessagePackValueMapper valueMapper, + List> converters) { + return createMapper(valueMapper, converters); + } + +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolResultMapperFactory.java new file mode 100644 index 000000000..dd1338fc8 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolResultMapperFactory.java @@ -0,0 +1,70 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.TarantoolResultMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolResultConverter; +import org.msgpack.value.ArrayValue; +import org.msgpack.value.ValueType; + +/** + * Factory for {@link TarantoolResultMapper} instances used for handling results with tuples of any type + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public class ArrayValueToTarantoolResultMapperFactory extends TarantoolResultMapperFactory { + + private final MessagePackMapper messagePackMapper; + + /** + * Basic constructor + */ + public ArrayValueToTarantoolResultMapperFactory() { + this(DefaultMessagePackMapperFactory.getInstance().emptyMapper()); + } + + /** + * Basic constructor with mapper + * + * @param messagePackMapper MessagePack-to-object mapper for tuple contents + */ + public ArrayValueToTarantoolResultMapperFactory(MessagePackMapper messagePackMapper) { + super(); + this.messagePackMapper = messagePackMapper; + } + + /** + * Get converter for tuples in {@link TarantoolResult} + * + * @param valueConverter MessagePack-to-entity converter for tuples + * @return mapper instance + */ + public TarantoolResultMapper withArrayValueToTarantoolResultConverter( + ValueConverter valueConverter) { + return withConverterWithoutTargetClass( + messagePackMapper.copy(), + ValueType.ARRAY, + new ArrayValueToTarantoolResultConverter<>(valueConverter) + ); + } + + /** + * Get converter for tuples in {@link TarantoolResult} + * + * @param valueMapper MessagePack-to-object mapper for tuple contents + * @param valueConverter MessagePack-to-entity converter for tuples + * @return mapper instance + */ + public TarantoolResultMapper withArrayValueToTarantoolResultConverter( + MessagePackValueMapper valueMapper, + ValueConverter valueConverter) { + return withConverter( + valueMapper, + ValueType.ARRAY, + new ArrayValueToTarantoolResultConverter<>(valueConverter) + ); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolTupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolTupleResultMapperFactory.java new file mode 100644 index 000000000..f7a9356b3 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/ArrayValueToTarantoolTupleResultMapperFactory.java @@ -0,0 +1,70 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.TarantoolResultMapper; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolTupleConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolTupleResultConverter; +import org.msgpack.value.ValueType; + +/** + * Factory for {@link TarantoolResultMapper} instances used for handling results with tuples of array type + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public class ArrayValueToTarantoolTupleResultMapperFactory + extends ArrayValueToTarantoolResultMapperFactory { + + private final MessagePackMapper messagePackMapper; + + /** + * Basic constructor + */ + public ArrayValueToTarantoolTupleResultMapperFactory() { + this(DefaultMessagePackMapperFactory.getInstance().emptyMapper()); + } + + /** + * Basic constructor with mapper + * + * @param messagePackMapper MessagePack-to-object mapper for tuple contents + */ + public ArrayValueToTarantoolTupleResultMapperFactory(MessagePackMapper messagePackMapper) { + super(); + this.messagePackMapper = messagePackMapper; + } + + public TarantoolResultMapper withArrayValueToTarantoolTupleResultConverter( + MessagePackMapper messagePackMapper) { + return withArrayValueToTarantoolTupleResultConverter( + new ArrayValueToTarantoolTupleConverter(messagePackMapper, null)); + } + + public TarantoolResultMapper withArrayValueToTarantoolTupleResultConverter( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withArrayValueToTarantoolTupleResultConverter( + new ArrayValueToTarantoolTupleConverter(messagePackMapper, spaceMetadata)); + } + + public TarantoolResultMapper withArrayValueToTarantoolTupleResultConverter( + ArrayValueToTarantoolTupleConverter tupleConverter) { + return withConverterWithoutTargetClass( + messagePackMapper.copy(), + ValueType.ARRAY, + new ArrayValueToTarantoolTupleResultConverter(tupleConverter) + ); + } + + public TarantoolResultMapper withArrayValueToTarantoolTupleResultConverter( + MessagePackValueMapper valueMapper, + ArrayValueToTarantoolTupleConverter tupleConverter) { + return withConverterWithoutTargetClass( + valueMapper, + ValueType.ARRAY, + new ArrayValueToTarantoolTupleResultConverter(tupleConverter) + ); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/DefaultMessagePackMapperFactory.java similarity index 80% rename from src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapperFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/DefaultMessagePackMapperFactory.java index db00843a2..a5594c2b1 100644 --- a/src/main/java/io/tarantool/driver/mappers/DefaultMessagePackMapperFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/DefaultMessagePackMapperFactory.java @@ -1,5 +1,6 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; +import io.tarantool.driver.mappers.DefaultMessagePackMapper; import io.tarantool.driver.mappers.converters.object.DefaultBigDecimalToExtensionValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultBooleanToBooleanValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultByteArrayToBinaryValueConverter; @@ -14,24 +15,24 @@ import io.tarantool.driver.mappers.converters.object.DefaultShortToIntegerValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultStringToStringValueConverter; import io.tarantool.driver.mappers.converters.object.DefaultUUIDToExtensionValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultArrayValueToLongArrayConverter; -import io.tarantool.driver.mappers.converters.value.DefaultBinaryValueToByteArrayConverter; -import io.tarantool.driver.mappers.converters.value.DefaultBooleanValueToBooleanConverter; -import io.tarantool.driver.mappers.converters.value.DefaultExtensionValueToBigDecimalConverter; -import io.tarantool.driver.mappers.converters.value.DefaultExtensionValueToUUIDConverter; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToDoubleConverter; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToFloatConverter; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToIntegerConverter; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToLongConverter; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToShortConverter; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToDoubleConverter; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToFloatConverter; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToIntegerConverter; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToLongConverter; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToShortConverter; -import io.tarantool.driver.mappers.converters.value.DefaultStringValueToByteArrayConverter; -import io.tarantool.driver.mappers.converters.value.DefaultStringValueToCharacterConverter; -import io.tarantool.driver.mappers.converters.value.DefaultStringValueToStringConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultArrayValueToLongArrayConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultBinaryValueToByteArrayConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultBooleanValueToBooleanConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultExtensionValueToBigDecimalConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultExtensionValueToUUIDConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToDoubleConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToFloatConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToIntegerConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToLongConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToShortConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToDoubleConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToFloatConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToIntegerConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToLongConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToShortConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultStringValueToByteArrayConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultStringValueToCharacterConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultStringValueToStringConverter; import org.msgpack.value.ArrayValue; import org.msgpack.value.BinaryValue; import org.msgpack.value.BooleanValue; diff --git a/src/main/java/io/tarantool/driver/mappers/MultiValueResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueResultMapperFactory.java similarity index 55% rename from src/main/java/io/tarantool/driver/mappers/MultiValueResultMapperFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/MultiValueResultMapperFactory.java index 69b5ea04b..9e7cb5e1f 100644 --- a/src/main/java/io/tarantool/driver/mappers/MultiValueResultMapperFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueResultMapperFactory.java @@ -1,8 +1,12 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; import io.tarantool.driver.api.MultiValueCallResult; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.MultiValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToMultiValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToMultiValueCallResultSimpleConverter; import org.msgpack.value.ArrayValue; import java.util.List; @@ -12,6 +16,7 @@ * treated as a list of values * * @author Alexey Kuzin + * @author Artyom Dubinin */ public class MultiValueResultMapperFactory> extends TarantoolCallResultMapperFactory> { @@ -45,7 +50,7 @@ public MultiValueResultMapperFactory(MessagePackMapper messagePackMapper) { public CallResultMapper> withMultiValueResultConverter( MessagePackValueMapper valueMapper, ValueConverter itemsConverter) { - return withConverter(valueMapper, new MultiValueCallResultConverter<>(itemsConverter)); + return withConverter(valueMapper, new ArrayValueToMultiValueCallResultSimpleConverter<>(itemsConverter)); } /** @@ -56,7 +61,8 @@ public CallResultMapper> withMultiValueResultConve */ public CallResultMapper> withMultiValueResultConverter( ValueConverter itemsConverter) { - return withConverter(messagePackMapper.copy(), new MultiValueCallResultConverter<>(itemsConverter)); + return withConverter(messagePackMapper.copy(), + new ArrayValueToMultiValueCallResultSimpleConverter<>(itemsConverter)); } /** @@ -71,7 +77,8 @@ public CallResultMapper> withMultiValueResultConve MessagePackValueMapper valueMapper, ValueConverter itemsConverter, Class> resultClass) { - return withConverter(valueMapper, new MultiValueCallResultConverter<>(itemsConverter), resultClass); + return withConverter(valueMapper, new ArrayValueToMultiValueCallResultSimpleConverter<>(itemsConverter), + resultClass); } /** @@ -85,6 +92,35 @@ public CallResultMapper> withMultiValueResultConve ValueConverter itemsConverter, Class> resultClass) { return withConverter( - messagePackMapper.copy(), new MultiValueCallResultConverter<>(itemsConverter), resultClass); + messagePackMapper.copy(), new ArrayValueToMultiValueCallResultSimpleConverter<>(itemsConverter), + resultClass); + } + + public CallResultMapper> withMultiValueResultConverter( + MessagePackValueMapper structureValueMapper) { + return withConverter( + messagePackMapper.copy(), new ArrayValueToMultiValueCallResultConverter<>(structureValueMapper)); + } + + public CallResultMapper> withMultiValueResultConverter( + MessagePackValueMapper valueMapper, + MessagePackValueMapper structureValueMapper) { + return withConverter( + valueMapper, new ArrayValueToMultiValueCallResultConverter<>(structureValueMapper)); + } + + public CallResultMapper> withMultiValueResultConverter( + MessagePackValueMapper structureValueMapper, + Class> resultClass) { + return withMultiValueResultConverter( + messagePackMapper.copy(), structureValueMapper, resultClass); + } + + public CallResultMapper> withMultiValueResultConverter( + MessagePackValueMapper valueMapper, + MessagePackValueMapper structureValueMapper, + Class> resultClass) { + return withConverter( + valueMapper, new ArrayValueToMultiValueCallResultConverter<>(structureValueMapper), resultClass); } } diff --git a/src/main/java/io/tarantool/driver/mappers/MultiValueTarantoolResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolResultMapperFactory.java similarity index 59% rename from src/main/java/io/tarantool/driver/mappers/MultiValueTarantoolResultMapperFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolResultMapperFactory.java index 67ca9a05a..eab18df2c 100644 --- a/src/main/java/io/tarantool/driver/mappers/MultiValueTarantoolResultMapperFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolResultMapperFactory.java @@ -1,9 +1,11 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; import io.tarantool.driver.api.MultiValueCallResult; import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolResultConverter; import org.msgpack.value.ArrayValue; /** @@ -11,15 +13,20 @@ * tuples * * @author Alexey Kuzin + * @author Artyom Dubinin * @see TarantoolResult */ -public class MultiValueTarantoolResultMapperFactory extends MultiValueResultMapperFactory> { +public class MultiValueWithTarantoolResultMapperFactory + extends MultiValueResultMapperFactory> { + + private final ArrayValueToTarantoolResultMapperFactory tarantoolResultMapperFactory; /** * Basic constructor */ - public MultiValueTarantoolResultMapperFactory() { + public MultiValueWithTarantoolResultMapperFactory() { super(); + tarantoolResultMapperFactory = new ArrayValueToTarantoolResultMapperFactory<>(); } /** @@ -27,8 +34,9 @@ public MultiValueTarantoolResultMapperFactory() { * * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion */ - public MultiValueTarantoolResultMapperFactory(MessagePackMapper messagePackMapper) { + public MultiValueWithTarantoolResultMapperFactory(MessagePackMapper messagePackMapper) { super(messagePackMapper); + tarantoolResultMapperFactory = new ArrayValueToTarantoolResultMapperFactory<>(); } /** @@ -39,8 +47,10 @@ public MultiValueTarantoolResultMapperFactory(MessagePackMapper messagePackMappe * @return call result mapper */ public CallResultMapper, MultiValueCallResult>> - withTarantoolResultConverter(MessagePackValueMapper valueMapper, ValueConverter valueConverter) { - return withMultiValueResultConverter(valueMapper, new TarantoolResultConverter<>(valueConverter)); + withMultiValueArrayTarantoolResultConverter( + MessagePackValueMapper valueMapper, ValueConverter valueConverter) { + return withMultiValueResultConverter(valueMapper, + tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter)); } /** @@ -50,8 +60,9 @@ public MultiValueTarantoolResultMapperFactory(MessagePackMapper messagePackMappe * @return call result mapper */ public CallResultMapper, MultiValueCallResult>> - withTarantoolResultConverter(ValueConverter valueConverter) { - return withMultiValueResultConverter(new TarantoolResultConverter<>(valueConverter)); + withMultiValueArrayTarantoolResultConverter(ValueConverter valueConverter) { + return withMultiValueResultConverter( + tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter)); } /** @@ -63,12 +74,13 @@ public MultiValueTarantoolResultMapperFactory(MessagePackMapper messagePackMappe * @return call result mapper */ public CallResultMapper, MultiValueCallResult>> - withTarantoolResultConverter( + withMultiValueArrayTarantoolResultConverter( MessagePackValueMapper valueMapper, ValueConverter valueConverter, Class>> resultClass) { return withMultiValueResultConverter( - valueMapper, new TarantoolResultConverter<>(valueConverter), resultClass); + valueMapper, tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter), + resultClass); } /** @@ -79,9 +91,10 @@ public MultiValueTarantoolResultMapperFactory(MessagePackMapper messagePackMappe * @return call result mapper */ public CallResultMapper, MultiValueCallResult>> - withTarantoolResultConverter( + withMultiValueArrayTarantoolResultConverter( ValueConverter valueConverter, Class>> resultClass) { - return withMultiValueResultConverter(new TarantoolResultConverter<>(valueConverter), resultClass); + return withMultiValueResultConverter( + tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter), resultClass); } } diff --git a/src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolTupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolTupleResultMapperFactory.java new file mode 100644 index 000000000..01596c0c8 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/MultiValueWithTarantoolTupleResultMapperFactory.java @@ -0,0 +1,72 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.MultiValueCallResult; +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; +import io.tarantool.driver.api.tuple.MultiValueTarantoolTupleResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolTupleConverter; + +/** + * Factory for {@link CallResultMapper} instances used for handling results with {@link TarantoolTuple}s as + * multi-return result items + * + * @author Alexey Kuzin + */ +public class MultiValueWithTarantoolTupleResultMapperFactory + extends MultiValueWithTarantoolResultMapperFactory { + + private static ArrayValueToTarantoolTupleResultMapperFactory arrayValueToTarantoolTupleResultMapperFactory; + private static RowsMetadataToTarantoolTupleResultMapperFactory rowsMetadataToTarantoolTupleResultMapperFactory; + + /** + * Basic constructor + */ + public MultiValueWithTarantoolTupleResultMapperFactory() { + super(); + arrayValueToTarantoolTupleResultMapperFactory = new ArrayValueToTarantoolTupleResultMapperFactory(); + rowsMetadataToTarantoolTupleResultMapperFactory = new RowsMetadataToTarantoolTupleResultMapperFactory(); + } + + /** + * Basic constructor with mapper + * + * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion + */ + public MultiValueWithTarantoolTupleResultMapperFactory(MessagePackMapper messagePackMapper) { + super(messagePackMapper); + arrayValueToTarantoolTupleResultMapperFactory = new ArrayValueToTarantoolTupleResultMapperFactory(); + rowsMetadataToTarantoolTupleResultMapperFactory = new RowsMetadataToTarantoolTupleResultMapperFactory(); + } + + /** + * Get default {@link TarantoolTuple} converter + * + * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion + * @param spaceMetadata configured {@link TarantoolSpaceMetadata} instance + * @return default mapper instance configured with {@link ArrayValueToTarantoolTupleConverter} instance + */ + public CallResultMapper, + MultiValueCallResult>> + withMultiValueArrayToTarantoolTupleResultMapper( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withMultiValueResultConverter( + arrayValueToTarantoolTupleResultMapperFactory.withArrayValueToTarantoolTupleResultConverter( + messagePackMapper, spaceMetadata), + MultiValueTarantoolTupleResult.class + ); + } + + public CallResultMapper, + MultiValueCallResult>> + withMultiValueRowsMetadataToTarantoolTupleResultMapper( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withMultiValueResultConverter( + rowsMetadataToTarantoolTupleResultMapperFactory.withRowsMetadataToTarantoolTupleResultConverter( + messagePackMapper, spaceMetadata), + MultiValueTarantoolTupleResult.class + ); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactory.java new file mode 100644 index 000000000..c8a7576d5 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactory.java @@ -0,0 +1,177 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.MultiValueCallResult; +import io.tarantool.driver.api.SingleValueCallResult; +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; + +import java.util.List; + +/** + * Provides different factories for creating result mappers + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public interface ResultMapperFactoryFactory { + /** + * Default factory for call result with a list of tuples. + * Use this factory for handling containers with {@link TarantoolTuple} inside. + * The IProto method results by default contain lists of tuples. + * This factory can be used at the inner level by other mapper factories that are handling higher-level containers. + *

+ * input: array of tuples with MessagePack values inside ([t1, t2, ...]) + *
+ * mapper result: {@code TarantoolResult} + *

+ * Mapper result and its inner depends on the parameters or converters you passed. + * + * @return default factory for list of tuples results + */ + ArrayValueToTarantoolTupleResultMapperFactory arrayTupleResultMapperFactory(); + + /** + * Default factory for call result with a list of tuples in structure with metadata. + * Use this factory for handling containers with {@link TarantoolTuple} inside. + * The IProto method results by default contain lists of tuples. + * This factory can be used at the inner level by other mapper factories that are handling higher-level containers. + *

+ * input: map with metadata and array of tuples with MessagePack values inside ([t1, t2, ...]) + *
+ * mapper result: {@code TarantoolResult} + *

+ * Mapper result and its inner depends on the parameters or converters you passed. + * + * @return default factory for list of tuples results + */ + RowsMetadataToTarantoolTupleResultMapperFactory rowsMetadataTupleResultMapperFactory(); + + /** + * Default factory for single the stored Lua function call result in the form return result, err + * with a list of tuples as a result. + * For example, this form of the result is used for some tarantool/crud library responses. + *

+ * input: [x, y, ...], MessagePack array from a Lua function multi-return response + *
+ * where x is a data structure with an array of tuples inside ([t1, t2, ...]) and y + * can be interpreted as an error structure if it is not empty and there are no more arguments after + * y` + *
+ * mapper result: converted value of x to {@code TarantoolResult} + *

+ * Mapper result and the inner contents depend on the parameters or the passed converters. + * + * @return default factory for single value call result with a list of tuples + */ + SingleValueWithTarantoolTupleResultMapperFactory singleValueTupleResultMapperFactory(); + + /** + * Create a factory for mapping stored function call result to {@link SingleValueCallResult} containing a list + * of tuples mapped to {@link TarantoolResult} + *

+ * input: [x, y, z], MessagePack array from a Lua function multi return response + *
+ * where x is a data structure with an array of tuples inside ([t1, t2, ...]) and y + * can be interpreted as an error structure if it is not empty and there are no more arguments after y. + * A tuple can be represented by any custom object or value. + *
+ * mapper result: converted value of x to {@code TarantoolResult} + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * + * @param target inner content type + * @return new or existing factory instance + */ + SingleValueWithTarantoolResultMapperFactory singleValueTarantoolResultMapperFactory(); + + /** + * Create a factory for mapping stored Lua function call results to {@link SingleValueCallResult} + *

+ * input: [x, y, ...], MessagePack array from a Lua function multi-return response + *
+ * where x, y are some MessagePack values. x is interpreted as a stored Lua function + * result and y may be interpreted as a stored Lua function error if it is not empty and there are + * no more arguments after y. + *
+ * mapper result: some Java type converted from the value of x according to the mapper, passed as a + * parameter to this one for parsing the result contents. + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * + * @param target result type + * @return new or existing factory instance + */ + SingleValueResultMapperFactory singleValueResultMapperFactory(); + + /** + * Default factory for the stored Lua function call result, interpreted in a way that each returned item is a tuple. + * Use this factory for handling proxy function call results which return tuples as a multi-return result. + *

+ * input: [x, y, z, ...], MessagePack array from a Lua function multi-return response + *
+ * where x, y, z are some MessagePack values, each one representing a Tarantool tuple + *
+ * mapper result: {@code TarantoolResult} converted from [x, y, z, ...] + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * + * @return new or existing factory instance + */ + MultiValueWithTarantoolTupleResultMapperFactory multiValueTupleResultMapperFactory(); + + /** + * Default factory for the mapping stored Lua function call multi-return result to {@link TarantoolResult}, where + * each value is interpreted as a tuple of custom type. + *

+ * input: [x, y, z, ...], MessagePack array from a Lua function multi-return response + *
+ * where x, y, z are some MessagePack values, each one representing a custom value + *
+ * mapper result: {@code TarantoolResult} converted from [x, y, z, ...] + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * Mapper checks errors and that result is not empty and uses + * {@link ArrayValueToTarantoolResultMapperFactory} for further parsing + * + * @param target inner content type + * @return new or existing factory instance + */ + MultiValueWithTarantoolResultMapperFactory multiValueTarantoolResultMapperFactory(); + + /** + * Create a factory for mapping stored Lua function multi-return call result to {@link MultiValueCallResult} with + * the custom result and tuple types. + *

+ * input: [x, y, z, ...], MessagePack array from a Lua function multi-return response that is converted to the + * target result type + *
+ * where x, y, z are some MessagePack values, each one representing a custom value + *
+ * mapper result: a custom Java type inheriting {@code List} that is converted from [x, y, z, ...] + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * + * @param target result type + * @param target result inner contents item type + * @return new or existing factory instance + */ + > MultiValueResultMapperFactory multiValueResultMapperFactory(); + + /** + * Create a factory for mapping stored function call result to {@link MultiValueCallResult} containing a list + * of tuples mapped to {@link TarantoolResult} + *

+ * input: storing structure(e.g. [x, y, z] messagepack array) + *
+ * where x, y, z are some MessagePack Values + *
+ * mapper result: converted {@code TarantoolResult} from [x, y, z] + *

+ * Mapper result and its inner contents depend on the parameters or the passed converters. + * For example, you can parse any MessagePack array to TarantoolResult even if it's an empty array. + * + * @param target inner result type + * @return new or existing factory instance + */ + ArrayValueToTarantoolResultMapperFactory rowsMetadataStructureResultMapperFactory(); +} diff --git a/src/main/java/io/tarantool/driver/mappers/DefaultResultMapperFactoryFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactoryImpl.java similarity index 60% rename from src/main/java/io/tarantool/driver/mappers/DefaultResultMapperFactoryFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactoryImpl.java index a848b2748..e5e2cb6ea 100644 --- a/src/main/java/io/tarantool/driver/mappers/DefaultResultMapperFactoryFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/ResultMapperFactoryFactoryImpl.java @@ -1,11 +1,15 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; import io.tarantool.driver.api.MultiValueCallResult; import io.tarantool.driver.api.SingleValueCallResult; import io.tarantool.driver.api.TarantoolResult; import io.tarantool.driver.exceptions.TarantoolClientException; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.DefaultMultiValueResultMapper; +import io.tarantool.driver.mappers.DefaultSingleValueResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.MultiValueListConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToMultiValueListConverter; import org.msgpack.value.Value; import org.msgpack.value.ValueType; @@ -19,32 +23,37 @@ * @author Alexey Kuzin * @author Artyom Dubinin */ -public final class DefaultResultMapperFactoryFactory implements ResultMapperFactoryFactory { +public final class ResultMapperFactoryFactoryImpl implements ResultMapperFactoryFactory { /** * Basic constructor. */ - public DefaultResultMapperFactoryFactory() { + public ResultMapperFactoryFactoryImpl() { } @Override - public TarantoolTupleResultMapperFactory defaultTupleResultMapperFactory() { - return new TarantoolTupleResultMapperFactory(); + public ArrayValueToTarantoolTupleResultMapperFactory arrayTupleResultMapperFactory() { + return new ArrayValueToTarantoolTupleResultMapperFactory(); } @Override - public TarantoolTupleSingleResultMapperFactory defaultTupleSingleResultMapperFactory() { - return new TarantoolTupleSingleResultMapperFactory(); + public RowsMetadataToTarantoolTupleResultMapperFactory rowsMetadataTupleResultMapperFactory() { + return new RowsMetadataToTarantoolTupleResultMapperFactory(); } @Override - public TarantoolTupleMultiResultMapperFactory defaultTupleMultiResultMapperFactory() { - return new TarantoolTupleMultiResultMapperFactory(); + public SingleValueWithTarantoolTupleResultMapperFactory singleValueTupleResultMapperFactory() { + return new SingleValueWithTarantoolTupleResultMapperFactory(); } @Override - public TupleResultMapperFactory tupleResultMapperFactory() { - return new TupleResultMapperFactory<>(); + public MultiValueWithTarantoolTupleResultMapperFactory multiValueTupleResultMapperFactory() { + return new MultiValueWithTarantoolTupleResultMapperFactory(); + } + + @Override + public ArrayValueToTarantoolResultMapperFactory rowsMetadataStructureResultMapperFactory() { + return new ArrayValueToTarantoolResultMapperFactory<>(); } @Override @@ -53,8 +62,8 @@ public SingleValueResultMapperFactory singleValueResultMapperFactory() { } @Override - public SingleValueTarantoolResultMapperFactory singleValueTarantoolResultMapperFactory() { - return new SingleValueTarantoolResultMapperFactory<>(); + public SingleValueWithTarantoolResultMapperFactory singleValueTarantoolResultMapperFactory() { + return new SingleValueWithTarantoolResultMapperFactory<>(); } @Override @@ -63,8 +72,8 @@ public > MultiValueResultMapperFactory multiValueResu } @Override - public MultiValueTarantoolResultMapperFactory multiValueTarantoolResultMapperFactory() { - return new MultiValueTarantoolResultMapperFactory<>(); + public MultiValueWithTarantoolResultMapperFactory multiValueTarantoolResultMapperFactory() { + return new MultiValueWithTarantoolResultMapperFactory<>(); } public CallResultMapper> @@ -76,14 +85,14 @@ public MultiValueTarantoolResultMapperFactory multiValueTarantoolResultMa public > CallResultMapper> getMultiValueResultMapper(Supplier containerSupplier, ValueConverter valueConverter) { return this.multiValueResultMapperFactory().withMultiValueResultConverter( - new MultiValueListConverter<>(valueConverter, containerSupplier), + new ArrayValueToMultiValueListConverter<>(valueConverter, containerSupplier), (Class>) (Class) MultiValueCallResult.class); } public CallResultMapper, SingleValueCallResult>> getTarantoolResultMapper(MessagePackMapper mapper, Class tupleClass) { return this.singleValueTarantoolResultMapperFactory() - .withTarantoolResultConverter(getConverter(mapper, ValueType.ARRAY, tupleClass)); + .withSingleValueArrayTarantoolResultConverter(getConverter(mapper, ValueType.ARRAY, tupleClass)); } public > CallResultMapper> diff --git a/src/main/java/io/tarantool/driver/mappers/factories/RowsMetadataToTarantoolTupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/RowsMetadataToTarantoolTupleResultMapperFactory.java new file mode 100644 index 000000000..e493c93bf --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/RowsMetadataToTarantoolTupleResultMapperFactory.java @@ -0,0 +1,70 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.TarantoolResultMapper; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolTupleConverter; +import io.tarantool.driver.mappers.converters.value.RowsMetadataToTarantoolTupleResultConverter; +import org.msgpack.value.ValueType; + +/** + * Factory for {@link TarantoolResultMapper} instances used for handling results with tuples of any type + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +public class RowsMetadataToTarantoolTupleResultMapperFactory + extends TarantoolResultMapperFactory { + + private final MessagePackMapper messagePackMapper; + + /** + * Basic constructor + */ + public RowsMetadataToTarantoolTupleResultMapperFactory() { + this(DefaultMessagePackMapperFactory.getInstance().emptyMapper()); + } + + /** + * Basic constructor with mapper + * + * @param messagePackMapper MessagePack-to-object mapper for tuple contents + */ + public RowsMetadataToTarantoolTupleResultMapperFactory(MessagePackMapper messagePackMapper) { + super(); + this.messagePackMapper = messagePackMapper; + } + + public TarantoolResultMapper withRowsMetadataToTarantoolTupleResultConverter( + MessagePackMapper messagePackMapper) { + return withRowsMetadataToTarantoolTupleResultConverter( + new ArrayValueToTarantoolTupleConverter(messagePackMapper, null)); + } + + public TarantoolResultMapper withRowsMetadataToTarantoolTupleResultConverter( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withRowsMetadataToTarantoolTupleResultConverter( + new ArrayValueToTarantoolTupleConverter(messagePackMapper, spaceMetadata)); + } + + public TarantoolResultMapper withRowsMetadataToTarantoolTupleResultConverter( + ArrayValueToTarantoolTupleConverter tupleConverter) { + return withConverterWithoutTargetClass( + messagePackMapper.copy(), + ValueType.MAP, + new RowsMetadataToTarantoolTupleResultConverter(tupleConverter) + ); + } + + public TarantoolResultMapper withRowsMetadataToTarantoolTupleResultConverter( + MessagePackValueMapper valueMapper, + ArrayValueToTarantoolTupleConverter tupleConverter) { + return withConverterWithoutTargetClass( + valueMapper, + ValueType.MAP, + new RowsMetadataToTarantoolTupleResultConverter(tupleConverter) + ); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/SingleValueResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueResultMapperFactory.java similarity index 63% rename from src/main/java/io/tarantool/driver/mappers/SingleValueResultMapperFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/SingleValueResultMapperFactory.java index 61733943e..3100c378b 100644 --- a/src/main/java/io/tarantool/driver/mappers/SingleValueResultMapperFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueResultMapperFactory.java @@ -1,8 +1,12 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; import io.tarantool.driver.api.SingleValueCallResult; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.SingleValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToSingleValueCallResultConverter; +import io.tarantool.driver.mappers.converters.value.ArrayValueToSingleValueCallResultSimpleConverter; import org.msgpack.value.Value; /** @@ -10,6 +14,7 @@ * values -- result and error * * @author Alexey Kuzin + * @author Artyom Dubinin */ public class SingleValueResultMapperFactory extends TarantoolCallResultMapperFactory> { @@ -42,7 +47,7 @@ public SingleValueResultMapperFactory(MessagePackMapper messagePackMapper) { public CallResultMapper> withSingleValueResultConverter( MessagePackValueMapper valueMapper, ValueConverter valueConverter) { - return withConverter(valueMapper, new SingleValueCallResultConverter<>(valueConverter)); + return withConverter(valueMapper, new ArrayValueToSingleValueCallResultSimpleConverter<>(valueConverter)); } /** @@ -53,7 +58,8 @@ public CallResultMapper> withSingleValueResultConver */ public CallResultMapper> withSingleValueResultConverter( ValueConverter valueConverter) { - return withConverter(messagePackMapper.copy(), new SingleValueCallResultConverter<>(valueConverter)); + return withConverter(messagePackMapper.copy(), + new ArrayValueToSingleValueCallResultSimpleConverter<>(valueConverter)); } /** @@ -68,7 +74,8 @@ public CallResultMapper> withSingleValueResultConver MessagePackValueMapper valueMapper, ValueConverter valueConverter, Class> resultClass) { - return withConverter(valueMapper, new SingleValueCallResultConverter<>(valueConverter), resultClass); + return withConverter(valueMapper, new ArrayValueToSingleValueCallResultSimpleConverter<>(valueConverter), + resultClass); } /** @@ -82,6 +89,21 @@ public CallResultMapper> withSingleValueResultConver ValueConverter valueConverter, Class> resultClass) { return withConverter( - messagePackMapper.copy(), new SingleValueCallResultConverter<>(valueConverter), resultClass); + messagePackMapper.copy(), new ArrayValueToSingleValueCallResultSimpleConverter<>(valueConverter), + resultClass); + } + + public CallResultMapper> withSingleValueResultConverter( + MessagePackValueMapper structureValueMapper) { + return withConverter( + messagePackMapper.copy(), new ArrayValueToSingleValueCallResultConverter<>(structureValueMapper)); + } + + public CallResultMapper> withSingleValueResultConverter( + MessagePackValueMapper structureValueMapper, + Class> resultClass) { + return withConverter( + messagePackMapper.copy(), new ArrayValueToSingleValueCallResultConverter<>(structureValueMapper), + resultClass); } } diff --git a/src/main/java/io/tarantool/driver/mappers/SingleValueTarantoolResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolResultMapperFactory.java similarity index 54% rename from src/main/java/io/tarantool/driver/mappers/SingleValueTarantoolResultMapperFactory.java rename to src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolResultMapperFactory.java index 7938b0d5b..8da3f8277 100644 --- a/src/main/java/io/tarantool/driver/mappers/SingleValueTarantoolResultMapperFactory.java +++ b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolResultMapperFactory.java @@ -1,9 +1,10 @@ -package io.tarantool.driver.mappers; +package io.tarantool.driver.mappers.factories; import io.tarantool.driver.api.SingleValueCallResult; import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.converters.ValueConverter; -import io.tarantool.driver.mappers.converters.value.custom.TarantoolResultConverter; import org.msgpack.value.ArrayValue; /** @@ -11,15 +12,19 @@ * tuples * * @author Alexey Kuzin + * @author Artyom Dubinin * @see TarantoolResult */ -public class SingleValueTarantoolResultMapperFactory extends SingleValueResultMapperFactory> { +public class SingleValueWithTarantoolResultMapperFactory extends SingleValueResultMapperFactory> { + + private final ArrayValueToTarantoolResultMapperFactory tarantoolResultMapperFactory; /** * Basic constructor */ - public SingleValueTarantoolResultMapperFactory() { + public SingleValueWithTarantoolResultMapperFactory() { super(); + tarantoolResultMapperFactory = new ArrayValueToTarantoolResultMapperFactory<>(); } /** @@ -27,8 +32,9 @@ public SingleValueTarantoolResultMapperFactory() { * * @param messagePackMapper mapper for MessagePack entities in tuple fields to Java objects */ - public SingleValueTarantoolResultMapperFactory(MessagePackMapper messagePackMapper) { + public SingleValueWithTarantoolResultMapperFactory(MessagePackMapper messagePackMapper) { super(messagePackMapper); + tarantoolResultMapperFactory = new ArrayValueToTarantoolResultMapperFactory<>(); } /** @@ -38,8 +44,9 @@ public SingleValueTarantoolResultMapperFactory(MessagePackMapper messagePackMapp * @return call result mapper */ public CallResultMapper, SingleValueCallResult>> - withTarantoolResultConverter(ValueConverter valueConverter) { - return withSingleValueResultConverter(new TarantoolResultConverter<>(valueConverter)); + withSingleValueArrayTarantoolResultConverter(ValueConverter valueConverter) { + return withSingleValueResultConverter( + tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter)); } /** @@ -50,9 +57,11 @@ public SingleValueTarantoolResultMapperFactory(MessagePackMapper messagePackMapp * @return call result mapper */ public CallResultMapper, SingleValueCallResult>> - withTarantoolResultConverter( + withSingleValueArrayTarantoolResultConverter( ValueConverter valueConverter, Class>> resultClass) { - return withSingleValueResultConverter(new TarantoolResultConverter<>(valueConverter), resultClass); + return withSingleValueResultConverter( + tarantoolResultMapperFactory.withArrayValueToTarantoolResultConverter(valueConverter), + resultClass); } } diff --git a/src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolTupleResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolTupleResultMapperFactory.java new file mode 100644 index 000000000..4312a1516 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/SingleValueWithTarantoolTupleResultMapperFactory.java @@ -0,0 +1,70 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.SingleValueCallResult; +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; +import io.tarantool.driver.api.tuple.SingleValueTarantoolTupleResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.converters.value.ArrayValueToTarantoolTupleConverter; + +/** + * Factory for {@link CallResultMapper} instances used for handling results with {@link TarantoolTuple}s + * + * @author Alexey Kuzin + */ +public class SingleValueWithTarantoolTupleResultMapperFactory + extends SingleValueWithTarantoolResultMapperFactory { + + private static ArrayValueToTarantoolTupleResultMapperFactory arrayValueToTarantoolTupleResultMapperFactory; + private static RowsMetadataToTarantoolTupleResultMapperFactory rowsMetadataToTarantoolTupleResultMapperFactory; + + /** + * Basic constructor + */ + public SingleValueWithTarantoolTupleResultMapperFactory() { + super(); + arrayValueToTarantoolTupleResultMapperFactory = new ArrayValueToTarantoolTupleResultMapperFactory(); + rowsMetadataToTarantoolTupleResultMapperFactory = new RowsMetadataToTarantoolTupleResultMapperFactory(); + } + + /** + * Basic constructor with mapper + * + * @param messagePackMapper mapper for MessagePack entities in tuple fields to Java objects + */ + public SingleValueWithTarantoolTupleResultMapperFactory(MessagePackMapper messagePackMapper) { + super(messagePackMapper); + arrayValueToTarantoolTupleResultMapperFactory = + new ArrayValueToTarantoolTupleResultMapperFactory(messagePackMapper); + rowsMetadataToTarantoolTupleResultMapperFactory = new RowsMetadataToTarantoolTupleResultMapperFactory(); + } + + /** + * Get default {@link TarantoolTuple} converter + * + * @param messagePackMapper MessagePack-to-entity mapper for result contents conversion + * @param spaceMetadata configured {@link TarantoolSpaceMetadata} instance + * @return default mapper instance configured with {@link ArrayValueToTarantoolTupleConverter} instance + */ + public CallResultMapper, SingleValueCallResult>> + withSingleValueArrayToTarantoolTupleResultMapper( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withSingleValueResultConverter( + arrayValueToTarantoolTupleResultMapperFactory. + withArrayValueToTarantoolTupleResultConverter(messagePackMapper, spaceMetadata), + SingleValueTarantoolTupleResult.class + ); + } + + public CallResultMapper, SingleValueCallResult>> + withSingleValueRowsMetadataToTarantoolTupleResultMapper( + MessagePackMapper messagePackMapper, TarantoolSpaceMetadata spaceMetadata) { + return withSingleValueResultConverter( + rowsMetadataToTarantoolTupleResultMapperFactory. + withRowsMetadataToTarantoolTupleResultConverter(messagePackMapper, spaceMetadata), + SingleValueTarantoolTupleResult.class + ); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/TarantoolCallResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/TarantoolCallResultMapperFactory.java new file mode 100644 index 000000000..b46bbd88c --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/TarantoolCallResultMapperFactory.java @@ -0,0 +1,57 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.CallResult; +import io.tarantool.driver.mappers.CallResultMapper; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +import java.util.List; + +/** + * Factory for {@link CallResultMapper} instances used for calling API functions on Tarantool instance + * + * @param target result content type + * @param target result type + * @author Alexey Kuzin + */ +public class TarantoolCallResultMapperFactory> extends + AbstractResultMapperFactory> { + + /** + * Basic constructor + */ + public TarantoolCallResultMapperFactory() { + super(); + } + + @Override + protected CallResultMapper createMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter valueConverter, + Class resultClass) { + return new CallResultMapper<>(valueMapper, valueConverter, resultClass); + } + + @Override + protected CallResultMapper createMapper( + MessagePackValueMapper valueMapper, + List> converters, Class resultClass) { + return new CallResultMapper<>(valueMapper, converters, resultClass); + } + + @Override + protected CallResultMapper createMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter valueConverter) { + return new CallResultMapper<>(valueMapper, valueType, valueConverter); + } + + @Override + protected CallResultMapper createMapper( + MessagePackValueMapper valueMapper, List> converters) { + return new CallResultMapper<>(valueMapper, converters); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/TarantoolResultMapperFactory.java b/src/main/java/io/tarantool/driver/mappers/factories/TarantoolResultMapperFactory.java new file mode 100644 index 000000000..f517affe6 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/TarantoolResultMapperFactory.java @@ -0,0 +1,60 @@ +package io.tarantool.driver.mappers.factories; + +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.TarantoolResultMapper; +import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.converters.ValueConverterWithInputTypeWrapper; +import org.msgpack.value.Value; +import org.msgpack.value.ValueType; + +import java.util.List; + +/** + * Factory for {@link TarantoolResultMapper} instances used for handling box protocol operation results returning + * {@link TarantoolResult} (array of tuples) + * + * @param target tuple type + * @author Alexey Kuzin + */ +public class TarantoolResultMapperFactory extends + AbstractResultMapperFactory, TarantoolResultMapper> { + + /** + * Basic constructor + */ + public TarantoolResultMapperFactory() { + super(); + } + + @Override + protected TarantoolResultMapper createMapper( + MessagePackValueMapper valueMapper, + ValueType valueType, + ValueConverter> valueConverter, + Class> resultClass) { + return new TarantoolResultMapper<>(valueMapper, valueType, valueConverter, resultClass); + } + + @Override + protected TarantoolResultMapper createMapper( + MessagePackValueMapper valueMapper, ValueType valueType, + ValueConverter> valueConverter) { + return new TarantoolResultMapper<>(valueMapper, valueType, valueConverter); + } + + @Override + protected TarantoolResultMapper createMapper( + MessagePackValueMapper valueMapper, + List>> converters, + Class> resultClass) { + return new TarantoolResultMapper<>(valueMapper, converters, resultClass); + } + + @Override + protected TarantoolResultMapper createMapper( + MessagePackValueMapper valueMapper, + List>> converters) { + return new TarantoolResultMapper<>(valueMapper, converters); + } +} diff --git a/src/main/java/io/tarantool/driver/mappers/factories/package-info.java b/src/main/java/io/tarantool/driver/mappers/factories/package-info.java new file mode 100644 index 000000000..ef4f8f5b2 --- /dev/null +++ b/src/main/java/io/tarantool/driver/mappers/factories/package-info.java @@ -0,0 +1,7 @@ +/** + * Contains factories for mappers and mappers stacks + * + * @author Alexey Kuzin + * @author Artyom Dubinin + */ +package io.tarantool.driver.mappers.factories; diff --git a/src/main/java/io/tarantool/driver/protocol/requests/TarantoolAuthRequest.java b/src/main/java/io/tarantool/driver/protocol/requests/TarantoolAuthRequest.java index 001916515..0275cb981 100644 --- a/src/main/java/io/tarantool/driver/protocol/requests/TarantoolAuthRequest.java +++ b/src/main/java/io/tarantool/driver/protocol/requests/TarantoolAuthRequest.java @@ -1,8 +1,8 @@ package io.tarantool.driver.protocol.requests; import io.tarantool.driver.auth.TarantoolAuthMechanism; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackObjectMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import io.tarantool.driver.protocol.TarantoolProtocolException; import io.tarantool.driver.protocol.TarantoolRequest; import io.tarantool.driver.protocol.TarantoolRequestBody; diff --git a/src/test/java/io/tarantool/driver/api/conditions/ConditionsTest.java b/src/test/java/io/tarantool/driver/api/conditions/ConditionsTest.java index 32934ff5e..61445b4aa 100644 --- a/src/test/java/io/tarantool/driver/api/conditions/ConditionsTest.java +++ b/src/test/java/io/tarantool/driver/api/conditions/ConditionsTest.java @@ -9,8 +9,8 @@ import io.tarantool.driver.exceptions.TarantoolClientException; import io.tarantool.driver.exceptions.TarantoolFieldNotFoundException; import io.tarantool.driver.exceptions.TarantoolIndexNotFoundException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import io.tarantool.driver.protocol.TarantoolIndexQuery; import io.tarantool.driver.protocol.TarantoolIndexQueryFactory; import io.tarantool.driver.protocol.TarantoolIteratorType; diff --git a/src/test/java/io/tarantool/driver/api/tuple/operations/TupleOperationsTest.java b/src/test/java/io/tarantool/driver/api/tuple/operations/TupleOperationsTest.java index edd6b4c94..a7f41577d 100644 --- a/src/test/java/io/tarantool/driver/api/tuple/operations/TupleOperationsTest.java +++ b/src/test/java/io/tarantool/driver/api/tuple/operations/TupleOperationsTest.java @@ -6,7 +6,7 @@ import io.tarantool.driver.api.tuple.TarantoolNullField; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; import io.tarantool.driver.exceptions.TarantoolSpaceOperationException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import org.msgpack.value.Value; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/benchmark/TarantoolSetup.java b/src/test/java/io/tarantool/driver/benchmark/TarantoolSetup.java index e67868471..584b75da0 100644 --- a/src/test/java/io/tarantool/driver/benchmark/TarantoolSetup.java +++ b/src/test/java/io/tarantool/driver/benchmark/TarantoolSetup.java @@ -7,8 +7,8 @@ import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.mappers.CallResultMapper; -import io.tarantool.driver.mappers.DefaultResultMapperFactoryFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; @@ -47,13 +47,13 @@ private void initClient() { .withCredentials(tarantoolContainer.getUsername(), tarantoolContainer.getPassword()) .build(); - DefaultResultMapperFactoryFactory factory = new DefaultResultMapperFactoryFactory(); + ResultMapperFactoryFactoryImpl factory = new ResultMapperFactoryFactoryImpl(); TarantoolSpaceMetadata spaceMetadata = tarantoolClient.metadata().getSpaceByName("test_space").get(); defaultMapper = tarantoolClient.getConfig().getMessagePackMapper(); resultMapper = factory - .defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, spaceMetadata); + .singleValueTupleResultMapperFactory() + .withSingleValueArrayToTarantoolTupleResultMapper(defaultMapper, spaceMetadata); log.info("Successfully connected to Tarantool, version = {}", tarantoolClient.getVersion()); } diff --git a/src/test/java/io/tarantool/driver/core/proxy/CRUDOperationOptionsTest.java b/src/test/java/io/tarantool/driver/core/proxy/CRUDOperationOptionsTest.java index 8003d9c00..ae1ab58c2 100644 --- a/src/test/java/io/tarantool/driver/core/proxy/CRUDOperationOptionsTest.java +++ b/src/test/java/io/tarantool/driver/core/proxy/CRUDOperationOptionsTest.java @@ -2,8 +2,8 @@ import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.core.tuple.TarantoolTupleImpl; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import java.util.Arrays; diff --git a/src/test/java/io/tarantool/driver/core/proxy/ProxyOperationBuildersTest.java b/src/test/java/io/tarantool/driver/core/proxy/ProxyOperationBuildersTest.java index 8f32c46f9..fbe77da04 100644 --- a/src/test/java/io/tarantool/driver/core/proxy/ProxyOperationBuildersTest.java +++ b/src/test/java/io/tarantool/driver/core/proxy/ProxyOperationBuildersTest.java @@ -20,9 +20,9 @@ import io.tarantool.driver.core.metadata.TarantoolMetadata; import io.tarantool.driver.core.metadata.TestMetadataProvider; import io.tarantool.driver.mappers.CallResultMapper; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; -import io.tarantool.driver.mappers.DefaultResultMapperFactoryFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; import io.tarantool.driver.protocol.TarantoolIndexQuery; import org.junit.jupiter.api.Test; @@ -40,12 +40,12 @@ public class ProxyOperationBuildersTest { private static final ClusterTarantoolTupleClient client = new ClusterTarantoolTupleClient(); private final MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); - private final DefaultResultMapperFactoryFactory mapperFactoryFactory = - new DefaultResultMapperFactoryFactory(); + private final ResultMapperFactoryFactoryImpl mapperFactoryFactory = + new ResultMapperFactoryFactoryImpl(); private final CallResultMapper, SingleValueCallResult>> - defaultResultMapper = mapperFactoryFactory.defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, null); + defaultResultMapper = mapperFactoryFactory.singleValueTupleResultMapperFactory() + .withSingleValueArrayToTarantoolTupleResultMapper(defaultMapper, null); private final TarantoolTupleFactory factory = new DefaultTarantoolTupleFactory(defaultMapper); @Test diff --git a/src/test/java/io/tarantool/driver/core/tuple/TarantoolTupleTest.java b/src/test/java/io/tarantool/driver/core/tuple/TarantoolTupleTest.java index 200a71339..f2509af0e 100644 --- a/src/test/java/io/tarantool/driver/core/tuple/TarantoolTupleTest.java +++ b/src/test/java/io/tarantool/driver/core/tuple/TarantoolTupleTest.java @@ -5,9 +5,9 @@ import io.tarantool.driver.core.metadata.TarantoolMetadata; import io.tarantool.driver.core.metadata.TestMetadataProvider; import io.tarantool.driver.exceptions.TarantoolSpaceFieldNotFoundException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackObjectMapperException; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import org.msgpack.value.ImmutableArrayValue; import org.msgpack.value.Value; diff --git a/src/test/java/io/tarantool/driver/integration/ClusterTarantoolTupleClientIT.java b/src/test/java/io/tarantool/driver/integration/ClusterTarantoolTupleClientIT.java index ff9c7cc82..2f53f8db4 100644 --- a/src/test/java/io/tarantool/driver/integration/ClusterTarantoolTupleClientIT.java +++ b/src/test/java/io/tarantool/driver/integration/ClusterTarantoolTupleClientIT.java @@ -18,9 +18,9 @@ import io.tarantool.driver.exceptions.TarantoolSpaceFieldNotFoundException; import io.tarantool.driver.exceptions.TarantoolSpaceOperationException; import io.tarantool.driver.mappers.DefaultMessagePackMapper; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; -import io.tarantool.driver.mappers.DefaultResultMapperFactoryFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -391,14 +391,14 @@ public void callTest() throws Exception { @Test public void callForTarantoolResultTest() throws Exception { MessagePackMapper defaultMapper = client.getConfig().getMessagePackMapper(); - DefaultResultMapperFactoryFactory factory = new DefaultResultMapperFactoryFactory(); + ResultMapperFactoryFactoryImpl factory = new ResultMapperFactoryFactoryImpl(); TarantoolSpaceMetadata spaceMetadata = client.metadata().getSpaceByName("test_space").get(); TarantoolResult result = client.call( "user_function_complex_query", Collections.singletonList(1000), defaultMapper, - factory.defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, spaceMetadata) + factory.singleValueTupleResultMapperFactory() + .withSingleValueArrayToTarantoolTupleResultMapper(defaultMapper, spaceMetadata) ).get(); assertTrue(result.size() >= 3); diff --git a/src/test/java/io/tarantool/driver/integration/ClusterTruncateIT.java b/src/test/java/io/tarantool/driver/integration/ClusterTruncateIT.java index 2393f1e41..5f766d911 100644 --- a/src/test/java/io/tarantool/driver/integration/ClusterTruncateIT.java +++ b/src/test/java/io/tarantool/driver/integration/ClusterTruncateIT.java @@ -13,7 +13,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.tuple.TarantoolTupleImpl; import io.tarantool.driver.exceptions.TarantoolClientException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; diff --git a/src/test/java/io/tarantool/driver/integration/ConvertersWithClusterClientIT.java b/src/test/java/io/tarantool/driver/integration/ConvertersWithClusterClientIT.java index 445411815..3a4e8db01 100644 --- a/src/test/java/io/tarantool/driver/integration/ConvertersWithClusterClientIT.java +++ b/src/test/java/io/tarantool/driver/integration/ConvertersWithClusterClientIT.java @@ -8,7 +8,7 @@ import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/ConvertersWithProxyClientIT.java b/src/test/java/io/tarantool/driver/integration/ConvertersWithProxyClientIT.java index a4bde5703..37c33d307 100644 --- a/src/test/java/io/tarantool/driver/integration/ConvertersWithProxyClientIT.java +++ b/src/test/java/io/tarantool/driver/integration/ConvertersWithProxyClientIT.java @@ -7,7 +7,7 @@ import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; diff --git a/src/test/java/io/tarantool/driver/integration/DoubleConversionIT.java b/src/test/java/io/tarantool/driver/integration/DoubleConversionIT.java index ef10e7b39..10b1f4353 100644 --- a/src/test/java/io/tarantool/driver/integration/DoubleConversionIT.java +++ b/src/test/java/io/tarantool/driver/integration/DoubleConversionIT.java @@ -8,7 +8,7 @@ import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory; import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/OffsetCursorIT.java b/src/test/java/io/tarantool/driver/integration/OffsetCursorIT.java index 2c87f6aad..e529b1463 100644 --- a/src/test/java/io/tarantool/driver/integration/OffsetCursorIT.java +++ b/src/test/java/io/tarantool/driver/integration/OffsetCursorIT.java @@ -15,7 +15,7 @@ import io.tarantool.driver.core.tuple.TarantoolTupleImpl; import io.tarantool.driver.exceptions.TarantoolClientException; import io.tarantool.driver.exceptions.TarantoolSpaceOperationException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; diff --git a/src/test/java/io/tarantool/driver/integration/ProxyCursorIT.java b/src/test/java/io/tarantool/driver/integration/ProxyCursorIT.java index 6754d651e..ffc1cbe8f 100644 --- a/src/test/java/io/tarantool/driver/integration/ProxyCursorIT.java +++ b/src/test/java/io/tarantool/driver/integration/ProxyCursorIT.java @@ -20,7 +20,7 @@ import io.tarantool.driver.core.tuple.TarantoolTupleImpl; import io.tarantool.driver.exceptions.TarantoolClientException; import io.tarantool.driver.exceptions.TarantoolSpaceOperationException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.slf4j.Logger; diff --git a/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientIT.java b/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientIT.java index e73d822b4..9fa4c161d 100644 --- a/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientIT.java +++ b/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientIT.java @@ -30,9 +30,10 @@ import io.tarantool.driver.exceptions.TarantoolInternalException; import io.tarantool.driver.exceptions.TarantoolNoSuchProcedureException; import io.tarantool.driver.mappers.CallResultMapper; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackMapper; import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -61,9 +62,12 @@ public class ProxyTarantoolClientIT extends SharedCartridgeContainer { private static TarantoolClient> client; - private static final DefaultMessagePackMapperFactory mapperFactory = DefaultMessagePackMapperFactory.getInstance(); + private static final MessagePackMapper defaultMapper = + DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); private static final TarantoolTupleFactory tupleFactory = - new DefaultTarantoolTupleFactory(mapperFactory.defaultComplexTypesMapper()); + new DefaultTarantoolTupleFactory(defaultMapper); + private static final ResultMapperFactoryFactoryImpl mapperFactoryFactory = + new ResultMapperFactoryFactoryImpl(); public static String USER_NAME; public static String PASSWORD; diff --git a/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientMixedInstancesIT.java b/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientMixedInstancesIT.java index 48db28891..73be37c9b 100644 --- a/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientMixedInstancesIT.java +++ b/src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientMixedInstancesIT.java @@ -25,8 +25,8 @@ import io.tarantool.driver.cluster.TarantoolClusterDiscoveryConfig; import io.tarantool.driver.cluster.TestWrappedClusterAddressProvider; import io.tarantool.driver.mappers.CallResultMapper; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackValueMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/ProxyTruncateIT.java b/src/test/java/io/tarantool/driver/integration/ProxyTruncateIT.java index a8753e601..4fc98d3e2 100644 --- a/src/test/java/io/tarantool/driver/integration/ProxyTruncateIT.java +++ b/src/test/java/io/tarantool/driver/integration/ProxyTruncateIT.java @@ -18,7 +18,7 @@ import io.tarantool.driver.cluster.BinaryDiscoveryClusterAddressProvider; import io.tarantool.driver.cluster.TarantoolClusterDiscoveryConfig; import io.tarantool.driver.cluster.TestWrappedClusterAddressProvider; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/ReconnectIT.java b/src/test/java/io/tarantool/driver/integration/ReconnectIT.java index 55907b568..3cab64429 100644 --- a/src/test/java/io/tarantool/driver/integration/ReconnectIT.java +++ b/src/test/java/io/tarantool/driver/integration/ReconnectIT.java @@ -16,7 +16,7 @@ import io.tarantool.driver.cluster.TestWrappedClusterAddressProvider; import io.tarantool.driver.core.TarantoolDaemonThreadFactory; import io.tarantool.driver.exceptions.TarantoolNoSuchProcedureException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java index ba24d2e56..6c6e87a36 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceDeleteOptionsIT.java @@ -15,7 +15,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java index f67de8ad8..63bf16b3f 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertManyOptionsIT.java @@ -12,7 +12,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java index e8880104a..92e4a88a8 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceInsertOptionsIT.java @@ -18,7 +18,7 @@ import io.tarantool.driver.exceptions.TarantoolInternalException; import io.tarantool.driver.integration.SharedCartridgeContainer; import io.tarantool.driver.integration.Utils; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java index 7e2f28ae3..e4582199c 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceManyOptionsIT.java @@ -12,7 +12,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java index 5c1f25d10..c29136e52 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceReplaceOptionsIT.java @@ -15,7 +15,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java index 8ee8e24e7..80504769b 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceSelectOptionsIT.java @@ -13,7 +13,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java index d08619566..0756828d6 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpdateOptionsIT.java @@ -13,7 +13,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java index a75d1b3db..5e1a3f158 100644 --- a/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java +++ b/src/test/java/io/tarantool/driver/integration/proxy/options/ProxySpaceUpsertOptionsIT.java @@ -14,7 +14,7 @@ import io.tarantool.driver.core.ClusterTarantoolTupleClient; import io.tarantool.driver.core.ProxyTarantoolTupleClient; import io.tarantool.driver.integration.SharedCartridgeContainer; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/src/test/java/io/tarantool/driver/mappers/CustomMappersTest.java b/src/test/java/io/tarantool/driver/mappers/CustomMappersTest.java index 21ab02d10..1854b87d7 100644 --- a/src/test/java/io/tarantool/driver/mappers/CustomMappersTest.java +++ b/src/test/java/io/tarantool/driver/mappers/CustomMappersTest.java @@ -1,5 +1,6 @@ package io.tarantool.driver.mappers; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import org.msgpack.value.ArrayValue; import org.msgpack.value.StringValue; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultBigDecimalConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultBigDecimalConverterTest.java index c371a0b25..312e42b18 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultBigDecimalConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultBigDecimalConverterTest.java @@ -1,7 +1,7 @@ package io.tarantool.driver.mappers; import io.tarantool.driver.mappers.converters.object.DefaultBigDecimalToExtensionValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultExtensionValueToBigDecimalConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultExtensionValueToBigDecimalConverter; import org.junit.jupiter.api.Test; import org.msgpack.core.MessageBufferPacker; import org.msgpack.core.MessagePack; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultCharacterConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultCharacterConverterTest.java index e6905ba6c..d53feabc7 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultCharacterConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultCharacterConverterTest.java @@ -4,7 +4,8 @@ import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; import io.tarantool.driver.mappers.converters.object.DefaultCharacterToStringValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultStringValueToCharacterConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultStringValueToCharacterConverter; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import org.msgpack.value.StringValue; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToFloatConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToFloatConverterTest.java index a6ffad854..0acb1850e 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToFloatConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToFloatConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToFloatConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToFloatConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToIntegerConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToIntegerConverterTest.java index 46e3066b6..6d644d7a6 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToIntegerConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToIntegerConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToIntegerConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToIntegerConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToLongConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToLongConverterTest.java index 29e037403..e5742ce62 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToLongConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToLongConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToLongConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToLongConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToShortConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToShortConverterTest.java index 4cf2bb46e..aee8e034c 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToShortConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultFloatValueToShortConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultFloatValueToShortConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultFloatValueToShortConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultIntegerValueToShortConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultIntegerValueToShortConverterTest.java index f4d8190ed..a66ad7b6e 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultIntegerValueToShortConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultIntegerValueToShortConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultIntegerValueToShortConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultIntegerValueToShortConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultLongArrayConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultLongArrayConverterTest.java index 0cc80e68e..8c0d5e309 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultLongArrayConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultLongArrayConverterTest.java @@ -1,7 +1,7 @@ package io.tarantool.driver.mappers; import io.tarantool.driver.mappers.converters.object.DefaultLongArrayToArrayValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultArrayValueToLongArrayConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultArrayValueToLongArrayConverter; import org.junit.jupiter.api.Test; import org.msgpack.core.MessageTypeCastException; import org.msgpack.value.ArrayValue; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultMessagePackMapperTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultMessagePackMapperTest.java index 58f5d11e8..b34cf989c 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultMessagePackMapperTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultMessagePackMapperTest.java @@ -5,6 +5,7 @@ import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleFactory; import io.tarantool.driver.mappers.converters.ValueConverter; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import org.junit.jupiter.api.Test; import org.msgpack.core.MessageTypeCastException; import org.msgpack.value.ArrayValue; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultStringValueToByteArrayConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultStringValueToByteArrayConverterTest.java index 41b352646..7b2694289 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultStringValueToByteArrayConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultStringValueToByteArrayConverterTest.java @@ -1,6 +1,6 @@ package io.tarantool.driver.mappers; -import io.tarantool.driver.mappers.converters.value.DefaultStringValueToByteArrayConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultStringValueToByteArrayConverter; import org.junit.jupiter.api.Test; import org.msgpack.value.ValueFactory; diff --git a/src/test/java/io/tarantool/driver/mappers/DefaultUUIDConverterTest.java b/src/test/java/io/tarantool/driver/mappers/DefaultUUIDConverterTest.java index fc588b6e1..b1019515a 100644 --- a/src/test/java/io/tarantool/driver/mappers/DefaultUUIDConverterTest.java +++ b/src/test/java/io/tarantool/driver/mappers/DefaultUUIDConverterTest.java @@ -1,7 +1,7 @@ package io.tarantool.driver.mappers; import io.tarantool.driver.mappers.converters.object.DefaultUUIDToExtensionValueConverter; -import io.tarantool.driver.mappers.converters.value.DefaultExtensionValueToUUIDConverter; +import io.tarantool.driver.mappers.converters.value.defaults.DefaultExtensionValueToUUIDConverter; import org.junit.jupiter.api.Test; import org.msgpack.core.MessageBufferPacker; import org.msgpack.core.MessagePack; diff --git a/src/test/java/io/tarantool/driver/mappers/TarantoolCallResultMapperTest.java b/src/test/java/io/tarantool/driver/mappers/TarantoolCallResultMapperTest.java index 3e1af8899..0f16f681c 100644 --- a/src/test/java/io/tarantool/driver/mappers/TarantoolCallResultMapperTest.java +++ b/src/test/java/io/tarantool/driver/mappers/TarantoolCallResultMapperTest.java @@ -7,6 +7,8 @@ import io.tarantool.driver.core.tuple.TarantoolTupleImpl; import io.tarantool.driver.exceptions.TarantoolInternalException; import io.tarantool.driver.exceptions.TarantoolTupleConversionException; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.msgpack.value.ArrayValue; @@ -24,12 +26,11 @@ public class TarantoolCallResultMapperTest { private static final MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); - private final DefaultResultMapperFactoryFactory mapperFactoryFactory = - new DefaultResultMapperFactoryFactory(); + private final ResultMapperFactoryFactoryImpl mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); private final CallResultMapper, SingleValueCallResult>> - defaultResultMapper = mapperFactoryFactory.defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, null); + defaultResultMapper = mapperFactoryFactory.singleValueTupleResultMapperFactory() + .withSingleValueArrayToTarantoolTupleResultMapper(defaultMapper, null); private static List nestedList1; private static TarantoolTuple tupleOne; @@ -47,11 +48,12 @@ public static void setUp() { @Test void testSingleValueCallResultMapper() { MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); - DefaultResultMapperFactoryFactory mapperFactoryFactory = new DefaultResultMapperFactoryFactory(); + ResultMapperFactoryFactoryImpl + mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); CallResultMapper, SingleValueCallResult>> mapper = - mapperFactoryFactory.defaultTupleSingleResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, null); + mapperFactoryFactory.singleValueTupleResultMapperFactory() + .withSingleValueArrayToTarantoolTupleResultMapper(defaultMapper, null); //[nil, message] ArrayValue errorResult = ValueFactory.newArray(ValueFactory.newNil(), ValueFactory.newString("ERROR")); @@ -98,11 +100,12 @@ void testDefaultTarantoolTupleResponse_singleResultShouldThrowException() { @Test void testMultiValueCallResultMapper() { MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); - DefaultResultMapperFactoryFactory mapperFactoryFactory = new DefaultResultMapperFactoryFactory(); + ResultMapperFactoryFactoryImpl + mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); CallResultMapper, MultiValueCallResult>> mapper = - mapperFactoryFactory.defaultTupleMultiResultMapperFactory() - .withDefaultTupleValueConverter(defaultMapper, null); + mapperFactoryFactory.multiValueTupleResultMapperFactory() + .withMultiValueArrayToTarantoolTupleResultMapper(defaultMapper, null); //[[], ...] List nestedList1 = Arrays.asList("nested", "array", 1); diff --git a/src/test/java/io/tarantool/driver/mappers/TarantoolResultMapperTest.java b/src/test/java/io/tarantool/driver/mappers/TarantoolResultMapperTest.java index fa697ba0e..3fa7433ac 100644 --- a/src/test/java/io/tarantool/driver/mappers/TarantoolResultMapperTest.java +++ b/src/test/java/io/tarantool/driver/mappers/TarantoolResultMapperTest.java @@ -6,23 +6,32 @@ import io.tarantool.driver.api.tuple.TarantoolTuple; import io.tarantool.driver.api.tuple.TarantoolTupleResult; import io.tarantool.driver.core.tuple.TarantoolTupleImpl; +import io.tarantool.driver.mappers.factories.ArrayValueToTarantoolResultMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactoryImpl; +import io.tarantool.driver.mappers.factories.ResultMapperFactoryFactory; import org.junit.jupiter.api.Test; import org.msgpack.value.ArrayValue; +import org.msgpack.value.ImmutableMapValue; +import org.msgpack.value.MapValue; +import org.msgpack.value.StringValue; import org.msgpack.value.Value; import org.msgpack.value.ValueFactory; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; class TarantoolResultMapperTest { @Test - void testWithTarantoolTuple() { + void testWithArrayTarantoolTuple() { MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); - DefaultResultMapperFactoryFactory mapperFactoryFactory = new DefaultResultMapperFactoryFactory(); + ResultMapperFactoryFactoryImpl + mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); TarantoolResultMapper mapper = mapperFactoryFactory - .defaultTupleResultMapperFactory().withDefaultTupleValueConverter(defaultMapper, null); + .arrayTupleResultMapperFactory().withArrayValueToTarantoolTupleResultConverter(defaultMapper); List nestedList1 = Arrays.asList("nested", "array", 1); TarantoolTuple tupleOne = new TarantoolTupleImpl(Arrays.asList("abc", 1234, nestedList1), defaultMapper); List nestedList2 = Arrays.asList("nested", "array", 2); @@ -39,20 +48,49 @@ void testWithTarantoolTuple() { assertEquals(nestedList2, result.get(1).getList(2)); } + @Test + void testWithRowsMetadataTarantoolTuple() { + MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); + ResultMapperFactoryFactoryImpl + mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); + TarantoolResultMapper mapper = mapperFactoryFactory + .rowsMetadataTupleResultMapperFactory().withRowsMetadataToTarantoolTupleResultConverter(defaultMapper); + List nestedList1 = Arrays.asList("nested", "array", 1); + TarantoolTuple tupleOne = new TarantoolTupleImpl(Arrays.asList("abc", 1234, nestedList1), defaultMapper); + List nestedList2 = Arrays.asList("nested", "array", 2); + TarantoolTuple tupleTwo = new TarantoolTupleImpl(Arrays.asList("def", 5678, nestedList2), defaultMapper); + ArrayValue testTuples = ValueFactory.newArray( + tupleOne.toMessagePackValue(defaultMapper), tupleTwo.toMessagePackValue(defaultMapper)); + HashMap rowsMetadata = new HashMap() {{ + put(ValueFactory.newString("metadata"), ValueFactory.newArray()); + put(ValueFactory.newString("rows"), testTuples); + }}; + MapValue mpRowsMetadata = ValueFactory.newMap(rowsMetadata); + TarantoolResult result = mapper.fromValue(mpRowsMetadata, TarantoolTupleResult.class); + assertEquals(2, result.size()); + assertEquals("abc", result.get(0).getString(0)); + assertEquals(1234, result.get(0).getInteger(1)); + assertEquals(nestedList1, result.get(0).getList(2)); + assertEquals("def", result.get(1).getString(0)); + assertEquals(5678, result.get(1).getInteger(1)); + assertEquals(nestedList2, result.get(1).getList(2)); + } + @Test void testWithCustomTuple() { MessagePackMapper defaultMapper = DefaultMessagePackMapperFactory.getInstance().defaultComplexTypesMapper(); defaultMapper.registerObjectConverter(CustomTuple.class, ArrayValue.class, t -> ValueFactory.newArray(ValueFactory.newInteger(t.getId()), ValueFactory.newString(t.getName()))); - DefaultResultMapperFactoryFactory mapperFactoryFactory = new DefaultResultMapperFactoryFactory(); - TupleResultMapperFactory mapperFactory = mapperFactoryFactory.tupleResultMapperFactory(); - TarantoolResultMapper mapper = mapperFactory.withTupleValueConverter(v -> { + ResultMapperFactoryFactory mapperFactoryFactory = new ResultMapperFactoryFactoryImpl(); + ArrayValueToTarantoolResultMapperFactory mapperFactory + = mapperFactoryFactory.rowsMetadataStructureResultMapperFactory(); + TarantoolResultMapper mapper = mapperFactory.withArrayValueToTarantoolResultConverter(v -> { CustomTuple tuple = new CustomTuple(); List values = v.list(); tuple.setId(values.get(0).asIntegerValue().asInt()); tuple.setName(values.get(1).asStringValue().asString()); return tuple; - }, CustomTupleResult.class); + }); CustomTuple tupleOne = new CustomTuple(1, "abcd"); CustomTuple tupleTwo = new CustomTuple(2, "efgh"); ArrayValue testTuples = diff --git a/src/test/java/io/tarantool/driver/protocol/TarantoolAuthRequestTest.java b/src/test/java/io/tarantool/driver/protocol/TarantoolAuthRequestTest.java index 008dfcf62..6e601ad82 100644 --- a/src/test/java/io/tarantool/driver/protocol/TarantoolAuthRequestTest.java +++ b/src/test/java/io/tarantool/driver/protocol/TarantoolAuthRequestTest.java @@ -1,7 +1,7 @@ package io.tarantool.driver.protocol; import io.tarantool.driver.auth.TarantoolAuthMechanism; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import io.tarantool.driver.protocol.requests.TarantoolAuthRequest; import org.junit.jupiter.api.Test; import org.msgpack.core.MessageBufferPacker; diff --git a/src/test/java/io/tarantool/driver/protocol/requests/TarantoolSelectRequestTest.java b/src/test/java/io/tarantool/driver/protocol/requests/TarantoolSelectRequestTest.java index c877fa7e7..14dffb46f 100644 --- a/src/test/java/io/tarantool/driver/protocol/requests/TarantoolSelectRequestTest.java +++ b/src/test/java/io/tarantool/driver/protocol/requests/TarantoolSelectRequestTest.java @@ -1,8 +1,8 @@ package io.tarantool.driver.protocol.requests; import io.tarantool.driver.exceptions.TarantoolDecoderException; -import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory; import io.tarantool.driver.mappers.MessagePackMapper; +import io.tarantool.driver.mappers.factories.DefaultMessagePackMapperFactory; import io.tarantool.driver.protocol.TarantoolIteratorType; import io.tarantool.driver.protocol.TarantoolProtocolException; import io.tarantool.driver.protocol.TarantoolRequestFieldType;