polish
This commit is contained in:
parent
7e3e79ca22
commit
a0cab10ccc
|
|
@ -50,17 +50,15 @@ class CollectionToArray extends AbstractCollectionConverter {
|
|||
int i = 0;
|
||||
ConversionExecutor elementConverter = getElementConverter(collection);
|
||||
for (Iterator<?> it = collection.iterator(); it.hasNext(); i++) {
|
||||
Object value = it.next();
|
||||
value = elementConverter.execute(value);
|
||||
Array.set(array, i, value);
|
||||
Array.set(array, i, elementConverter.execute(it.next()));
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
private ConversionExecutor getElementConverter(Collection<?> target) {
|
||||
private ConversionExecutor getElementConverter(Collection<?> source) {
|
||||
ConversionExecutor elementConverter = getElementConverter();
|
||||
if (elementConverter == NoOpConversionExecutor.INSTANCE && !target.isEmpty()) {
|
||||
Iterator<?> it = target.iterator();
|
||||
if (elementConverter == NoOpConversionExecutor.INSTANCE && !source.isEmpty()) {
|
||||
Iterator<?> it = source.iterator();
|
||||
while (it.hasNext()) {
|
||||
Object value = it.next();
|
||||
if (value != null) {
|
||||
|
|
|
|||
|
|
@ -37,26 +37,29 @@ class CollectionToCollection extends AbstractCollectionConverter {
|
|||
@SuppressWarnings("unchecked")
|
||||
protected Object doExecute(Object source) throws Exception {
|
||||
Collection sourceCollection = (Collection) source;
|
||||
Class targetCollectionType = getTargetCollectionType();
|
||||
Class implClass = CollectionConversionUtils.getImpl(targetCollectionType);
|
||||
Class implClass = CollectionConversionUtils.getImpl(getTargetCollectionType());
|
||||
Collection targetCollection = (Collection) implClass.newInstance();
|
||||
ConversionExecutor elementConverter = getElementConverter();
|
||||
Class elementType;
|
||||
if (elementConverter == null) {
|
||||
elementType = getTargetElementType();
|
||||
} else {
|
||||
elementType = null;
|
||||
}
|
||||
ConversionExecutor elementConverter = getElementConverter(sourceCollection);
|
||||
Iterator it = sourceCollection.iterator();
|
||||
while (it.hasNext()) {
|
||||
Object value = it.next();
|
||||
if (elementConverter == null && elementType != null) {
|
||||
elementConverter = getConversionService().getConversionExecutor(value.getClass(), TypeDescriptor.valueOf(elementType));
|
||||
}
|
||||
value = elementConverter.execute(value);
|
||||
targetCollection.add(value);
|
||||
targetCollection.add(elementConverter.execute(it.next()));
|
||||
}
|
||||
return targetCollection;
|
||||
}
|
||||
|
||||
private ConversionExecutor getElementConverter(Collection<?> source) {
|
||||
ConversionExecutor elementConverter = getElementConverter();
|
||||
if (elementConverter == NoOpConversionExecutor.INSTANCE && !source.isEmpty() && getTargetElementType() != null) {
|
||||
Iterator<?> it = source.iterator();
|
||||
while (it.hasNext()) {
|
||||
Object value = it.next();
|
||||
if (value != null) {
|
||||
elementConverter = getConversionService().getConversionExecutor(value.getClass(), TypeDescriptor.valueOf(getTargetElementType()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return elementConverter;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
package org.springframework.core.convert.service;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
|
||||
public class CollectionToCollectionTests {
|
||||
|
||||
@Test
|
||||
public void testCollectionToCollectionConversion() throws Exception {
|
||||
DefaultConversionService service = new DefaultConversionService();
|
||||
CollectionToCollection c = new CollectionToCollection(new TypeDescriptor(getClass().getField("bindTarget")),
|
||||
new TypeDescriptor(getClass().getField("integerTarget")), service);
|
||||
bindTarget.add("1");
|
||||
bindTarget.add("2");
|
||||
bindTarget.add("3");
|
||||
List result = (List) c.execute(bindTarget);
|
||||
assertEquals(new Integer(1), result.get(0));
|
||||
assertEquals(new Integer(2), result.get(1));
|
||||
assertEquals(new Integer(3), result.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCollectionToCollectionConversionNoGenericInfo() throws Exception {
|
||||
DefaultConversionService service = new DefaultConversionService();
|
||||
CollectionToCollection c = new CollectionToCollection(TypeDescriptor.valueOf(Collection.class),
|
||||
TypeDescriptor.valueOf(List.class), service);
|
||||
bindTarget.add("1");
|
||||
bindTarget.add("2");
|
||||
bindTarget.add("3");
|
||||
List result = (List) c.execute(bindTarget);
|
||||
assertEquals("1", result.get(0));
|
||||
assertEquals("2", result.get(1));
|
||||
assertEquals("3", result.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCollectionToCollectionConversionNoGenericInfoSource() throws Exception {
|
||||
DefaultConversionService service = new DefaultConversionService();
|
||||
CollectionToCollection c = new CollectionToCollection(TypeDescriptor.valueOf(Collection.class),
|
||||
new TypeDescriptor(getClass().getField("integerTarget")), service);
|
||||
bindTarget.add("1");
|
||||
bindTarget.add("2");
|
||||
bindTarget.add("3");
|
||||
List result = (List) c.execute(bindTarget);
|
||||
assertEquals(new Integer(1), result.get(0));
|
||||
assertEquals(new Integer(2), result.get(1));
|
||||
assertEquals(new Integer(3), result.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCollectionToCollectionConversionNoGenericInfoSourceNullValues() throws Exception {
|
||||
DefaultConversionService service = new DefaultConversionService();
|
||||
CollectionToCollection c = new CollectionToCollection(TypeDescriptor.valueOf(Collection.class),
|
||||
new TypeDescriptor(getClass().getField("integerTarget")), service);
|
||||
bindTarget.add(null);
|
||||
bindTarget.add("1");
|
||||
bindTarget.add("2");
|
||||
bindTarget.add(null);
|
||||
bindTarget.add("3");
|
||||
List result = (List) c.execute(bindTarget);
|
||||
assertEquals(null, result.get(0));
|
||||
assertEquals(new Integer(1), result.get(1));
|
||||
assertEquals(new Integer(2), result.get(2));
|
||||
assertEquals(null, result.get(3));
|
||||
assertEquals(new Integer(3), result.get(4));
|
||||
}
|
||||
|
||||
|
||||
public Collection<String> bindTarget = new ArrayList<String>();
|
||||
public List<Integer> integerTarget = new ArrayList<Integer>();
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue