DATAREDIS-492 - Polishing.

Added some more tests and fix read operation.

Original Pull Request: #189
This commit is contained in:
Christoph Strobl
2016-04-15 09:23:23 +02:00
parent 2492fbe332
commit 14e44880c7
3 changed files with 148 additions and 33 deletions

View File

@@ -15,6 +15,7 @@
*/
package org.springframework.data.redis.core.convert;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -231,14 +232,39 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean {
else if (persistentProperty.isCollectionLike()) {
if (conversionService.canConvert(byte[].class, persistentProperty.getComponentType())) {
accessor.setProperty(persistentProperty,
readCollectionOfSimpleTypes(currentPath, persistentProperty.getType(),
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(), source));
Object targetValue = null;
if (persistentProperty.getType().isArray()) {
List<Object> list = (List<Object>) readCollectionOfSimpleTypes(currentPath, ArrayList.class,
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(), source);
targetValue = list.toArray((Object[]) Array.newInstance(
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(), list.size()));
} else {
targetValue = readCollectionOfSimpleTypes(currentPath, persistentProperty.getType(),
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(), source);
}
accessor.setProperty(persistentProperty, targetValue);
} else {
accessor.setProperty(persistentProperty,
readCollectionOfComplexTypes(currentPath, persistentProperty.getType(),
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(),
source.getBucket()));
Object targetValue = null;
if (persistentProperty.getType().isArray()) {
List<Object> list = (List<Object>) readCollectionOfComplexTypes(currentPath, ArrayList.class,
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(),
source.getBucket());
targetValue = list.toArray((Object[]) Array.newInstance(
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(), list.size()));
} else {
targetValue = readCollectionOfComplexTypes(currentPath, persistentProperty.getType(),
persistentProperty.getTypeInformation().getComponentType().getActualType().getType(),
source.getBucket());
}
accessor.setProperty(persistentProperty, targetValue);
}
} else if (persistentProperty.isEntity() && !conversionService.canConvert(byte[].class,
@@ -417,11 +443,11 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean {
if (property == null || Iterable.class.isAssignableFrom(property.getClass())) {
writeCollection(keyspace, propertyStringPath, (Iterable<?>) property,
persistentProperty.getTypeInformation().getComponentType(), sink);
persistentProperty.getTypeInformation().getComponentType(), sink);
} else if (property.getClass().isArray()) {
writeCollection(keyspace, propertyStringPath, Arrays.asList((Object[]) property),
persistentProperty.getTypeInformation().getComponentType(), sink);
persistentProperty.getTypeInformation().getComponentType(), sink);
} else {
throw new RuntimeException("Don't know how to handle " + property.getClass() + " type collection");