You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2013/10/20 22:29:10 UTC
svn commit: r1533968 - in /commons/proper/beanutils/branches/java5/src:
main/java/org/apache/commons/beanutils/converters/ArrayConverter.java
test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java
Author: oheger
Date: Sun Oct 20 20:29:10 2013
New Revision: 1533968
URL: http://svn.apache.org/r1533968
Log:
Generified ArrayConverter.
Modified:
commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java
commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java
Modified: commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java?rev=1533968&r1=1533967&r2=1533968&view=diff
==============================================================================
--- commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java (original)
+++ commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/converters/ArrayConverter.java Sun Oct 20 20:29:10 2013
@@ -16,15 +16,16 @@
*/
package org.apache.commons.beanutils.converters;
-import java.util.Collections;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Collection;
+import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
-import java.io.IOException;
import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;
@@ -53,7 +54,7 @@ import org.apache.commons.beanutils.Conv
* or by converting the first element in the array to a String - this
* is controlled by the {@link ArrayConverter#setOnlyFirstToString(boolean)}
* parameter.</li>
- * <li><b>Multi Dimensional Arrays</b> - its possible to convert a <code>String</code>
+ * <li><b>Multi Dimensional Arrays</b> - it is possible to convert a <code>String</code>
* to a multi-dimensional arrays, by embedding {@link ArrayConverter}
* within each other - see example below.</li>
* <li><b>Default Value</b></li>
@@ -121,12 +122,13 @@ import org.apache.commons.beanutils.Conv
* int[][] result = (int[][])matrixConverter.convert(int[][].class, matrixString);
* </pre>
*
+ * @param <D> the default type of this array converter
* @version $Id$
* @since 1.8.0
*/
-public class ArrayConverter extends AbstractConverter {
+public class ArrayConverter<D> extends AbstractConverter<D> {
- private final Object defaultTypeInstance;
+ private final Class<D> defaultType;
private final Converter elementConverter;
private int defaultSize;
private char delimiter = ',';
@@ -145,7 +147,7 @@ public class ArrayConverter extends Abst
* @param elementConverter Converter used to convert
* individual array elements.
*/
- public ArrayConverter(Class defaultType, Converter elementConverter) {
+ public ArrayConverter(Class<D> defaultType, Converter elementConverter) {
super();
if (defaultType == null) {
throw new IllegalArgumentException("Default type is missing");
@@ -156,7 +158,7 @@ public class ArrayConverter extends Abst
if (elementConverter == null) {
throw new IllegalArgumentException("Component Converter is missing.");
}
- this.defaultTypeInstance = Array.newInstance(defaultType.getComponentType(), 0);
+ this.defaultType = defaultType;
this.elementConverter = elementConverter;
}
@@ -172,7 +174,7 @@ public class ArrayConverter extends Abst
* @param defaultSize Specifies the size of the default array value or if less
* than zero indicates that a <code>null</code> default value should be used.
*/
- public ArrayConverter(Class defaultType, Converter elementConverter, int defaultSize) {
+ public ArrayConverter(Class<D> defaultType, Converter elementConverter, int defaultSize) {
this(defaultType, elementConverter);
this.defaultSize = defaultSize;
Object defaultValue = null;
@@ -220,8 +222,8 @@ public class ArrayConverter extends Abst
* @return The default type this <code>Converter</code> handles.
*/
@Override
- protected Class getDefaultType() {
- return defaultTypeInstance.getClass();
+ protected Class<D> getDefaultType() {
+ return defaultType;
}
/**
@@ -235,12 +237,12 @@ public class ArrayConverter extends Abst
protected String convertToString(Object value) throws Throwable {
int size = 0;
- Iterator iterator = null;
- Class type = value.getClass();
+ Iterator<?> iterator = null;
+ Class<?> type = value.getClass();
if (type.isArray()) {
size = Array.getLength(value);
} else {
- Collection collection = convertToCollection(type, value);
+ Collection<?> collection = convertToCollection(type, value);
size = collection.size();
iterator = collection.iterator();
}
@@ -254,7 +256,7 @@ public class ArrayConverter extends Abst
}
// Create a StringBuffer containing a delimited list of the values
- StringBuffer buffer = new StringBuffer();
+ StringBuilder buffer = new StringBuilder();
for (int i = 0; i < size; i++) {
if (i > 0) {
buffer.append(delimiter);
@@ -279,7 +281,7 @@ public class ArrayConverter extends Abst
* @throws Throwable if an error occurs converting to the specified type
*/
@Override
- protected Object convertToType(Class type, Object value) throws Throwable {
+ protected <T> T convertToType(Class<T> type, Object value) throws Throwable {
if (!type.isArray()) {
throw new ConversionException(toString(getClass())
@@ -289,17 +291,17 @@ public class ArrayConverter extends Abst
// Handle the source
int size = 0;
- Iterator iterator = null;
+ Iterator<?> iterator = null;
if (value.getClass().isArray()) {
size = Array.getLength(value);
} else {
- Collection collection = convertToCollection(type, value);
+ Collection<?> collection = convertToCollection(type, value);
size = collection.size();
iterator = collection.iterator();
}
// Allocate a new Array
- Class componentType = type.getComponentType();
+ Class<?> componentType = type.getComponentType();
Object newArray = Array.newInstance(componentType, size);
// Convert and set each element in the new Array
@@ -311,7 +313,11 @@ public class ArrayConverter extends Abst
Array.set(newArray, i, element);
}
- return newArray;
+ @SuppressWarnings("unchecked")
+ // This is safe because T is an array type and newArray is an array of
+ // T's component type
+ T result = (T) newArray;
+ return result;
}
/**
@@ -346,14 +352,14 @@ public class ArrayConverter extends Abst
* @param value value to be converted
* @return Collection elements.
*/
- protected Collection convertToCollection(Class type, Object value) {
+ protected Collection<?> convertToCollection(Class<?> type, Object value) {
if (value instanceof Collection) {
- return (Collection)value;
+ return (Collection<?>)value;
}
if (value instanceof Number ||
value instanceof Boolean ||
value instanceof java.util.Date) {
- List list = new ArrayList(1);
+ List<Object> list = new ArrayList<Object>(1);
list.add(value);
return list;
}
@@ -368,7 +374,7 @@ public class ArrayConverter extends Abst
* @return The default value for the specified type.
*/
@Override
- protected Object getDefault(Class type) {
+ protected Object getDefault(Class<?> type) {
if (type.equals(String.class)) {
return null;
}
@@ -393,7 +399,7 @@ public class ArrayConverter extends Abst
*/
@Override
public String toString() {
- StringBuffer buffer = new StringBuffer();
+ StringBuilder buffer = new StringBuilder();
buffer.append(toString(getClass()));
buffer.append("[UseDefault=");
buffer.append(isUseDefault());
@@ -425,7 +431,7 @@ public class ArrayConverter extends Abst
* @throws NullPointerException if <code>svalue</code>
* is <code>null</code>
*/
- private List parseElements(Class type, String value) {
+ private List<String> parseElements(Class<?> type, String value) {
if (log().isDebugEnabled()) {
log().debug("Parsing elements, delimiter=[" + delimiter + "], value=[" + value + "]");
@@ -450,13 +456,13 @@ public class ArrayConverter extends Abst
}
// Split comma-delimited tokens into a List
- List list = null;
+ List<String> list = null;
while (true) {
int ttype = st.nextToken();
if ((ttype == StreamTokenizer.TT_WORD) || (ttype > 0)) {
if (st.sval != null) {
if (list == null) {
- list = new ArrayList();
+ list = new ArrayList<String>();
}
list.add(st.sval);
}
@@ -469,7 +475,7 @@ public class ArrayConverter extends Abst
}
if (list == null) {
- list = Collections.EMPTY_LIST;
+ list = Collections.emptyList();
}
if (log().isDebugEnabled()) {
log().debug(list.size() + " elements parsed");
Modified: commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java?rev=1533968&r1=1533967&r2=1533968&view=diff
==============================================================================
--- commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java (original)
+++ commons/proper/beanutils/branches/java5/src/test/java/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java Sun Oct 20 20:29:10 2013
@@ -69,7 +69,7 @@ public class ArrayConverterTestCase exte
IntegerConverter intConverter = new IntegerConverter(new Integer(0));
intConverter.setPattern("#,###");
intConverter.setLocale(Locale.US);
- ArrayConverter arrayConverter = new ArrayConverter(int[].class, intConverter, 0);
+ ArrayConverter<int[]> arrayConverter = new ArrayConverter<int[]>(int[].class, intConverter, 0);
arrayConverter.setAllowedChars(new char[] {',', '-'});
arrayConverter.setDelimiter(';');
@@ -81,8 +81,8 @@ public class ArrayConverterTestCase exte
long[] longArray = new long[] {intArray[0], intArray[1], intArray[2], intArray[3]};
Long[] LONGArray = new Long[] {new Long(intArray[0]), new Long(intArray[1]), new Long(intArray[2]), new Long(intArray[3])};
Integer[] IntegerArray = new Integer[] {new Integer(intArray[0]), new Integer(intArray[1]), new Integer(intArray[2]), new Integer(intArray[3])};
- ArrayList strList = new ArrayList();
- ArrayList longList = new ArrayList();
+ ArrayList<String> strList = new ArrayList<String>();
+ ArrayList<Long> longList = new ArrayList<Long>();
for (int i = 0; i < strArray.length; i++) {
strList.add(strArray[i]);
longList.add(LONGArray[i]);
@@ -212,11 +212,11 @@ public class ArrayConverterTestCase exte
// Configure Converter
IntegerConverter intConverter = new IntegerConverter();
- ArrayConverter arrayConverter = new ArrayConverter(int[].class, intConverter);
+ ArrayConverter<int[]> arrayConverter = new ArrayConverter<int[]>(int[].class, intConverter);
// Test Data
String[] array = new String[] {"10", " 11", "12 ", " 13 "};
- ArrayList list = new ArrayList();
+ ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < array.length; i++) {
list.add(array[i]);
}
@@ -280,14 +280,14 @@ public class ArrayConverterTestCase exte
// Construct an array Converter for an integer array (i.e. int[]) using
// an IntegerConverter as the element converter.
// N.B. Uses the default comma (i.e. ",") as the delimiter between individual numbers
- ArrayConverter arrayConverter = new ArrayConverter(int[].class, integerConverter);
+ ArrayConverter<int[]> arrayConverter = new ArrayConverter<int[]>(int[].class, integerConverter);
// Construct a "Matrix" Converter which converts arrays of integer arrays using
// the first (int[]) Converter as the element Converter.
// N.B. Uses a semi-colon (i.e. ";") as the delimiter to separate the different sets of numbers.
// Also the delimiter for the above array Converter needs to be added to this
// array Converter's "allowed characters"
- ArrayConverter matrixConverter = new ArrayConverter(int[][].class, arrayConverter);
+ ArrayConverter<int[][]> matrixConverter = new ArrayConverter<int[][]>(int[][].class, arrayConverter);
matrixConverter.setDelimiter(';');
matrixConverter.setAllowedChars(new char[] {','});
@@ -320,9 +320,9 @@ public class ArrayConverterTestCase exte
int[] oneArray = new int[1];
IntegerConverter intConverter = new IntegerConverter();
- assertEquals("Null Default", null, new ArrayConverter(int[].class, intConverter, -1).convert(int[].class, null));
- checkArray("Zero Length", zeroArray, new ArrayConverter(int[].class, intConverter, 0).convert(int[].class, null));
- checkArray("One Length", oneArray, new ArrayConverter(Integer[].class, intConverter, 1).convert(int[].class, null));
+ assertEquals("Null Default", null, new ArrayConverter<int[]>(int[].class, intConverter, -1).convert(int[].class, null));
+ checkArray("Zero Length", zeroArray, new ArrayConverter<int[]>(int[].class, intConverter, 0).convert(int[].class, null));
+ checkArray("One Length", oneArray, new ArrayConverter<Integer[]>(Integer[].class, intConverter, 1).convert(int[].class, null));
}
/**
@@ -332,8 +332,8 @@ public class ArrayConverterTestCase exte
int[] zeroArray = new int[0];
IntegerConverter intConverter = new IntegerConverter();
- checkArray("Empty String", zeroArray, new ArrayConverter(int[].class, intConverter, -1).convert(int[].class, ""));
- assertEquals("Default String", null, new ArrayConverter(int[].class, intConverter).convert(String.class, null));
+ checkArray("Empty String", zeroArray, new ArrayConverter<int[]>(int[].class, intConverter, -1).convert(int[].class, ""));
+ assertEquals("Default String", null, new ArrayConverter<int[]>(int[].class, intConverter).convert(String.class, null));
}
/**
@@ -341,19 +341,19 @@ public class ArrayConverterTestCase exte
*/
public void testErrors() {
try {
- new ArrayConverter(null, new DateConverter());
+ new ArrayConverter<Object>(null, new DateConverter());
fail("Default Type missing - expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected result
}
try {
- new ArrayConverter(Boolean.class, new DateConverter());
+ new ArrayConverter<Boolean>(Boolean.class, new DateConverter());
fail("Default Type not an array - expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected result
}
try {
- new ArrayConverter(int[].class, null);
+ new ArrayConverter<int[]>(int[].class, null);
fail("Component Converter missing - expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected result
@@ -365,10 +365,10 @@ public class ArrayConverterTestCase exte
*/
public void testUnderscore_BEANUTILS_302() {
String value = "first_value,second_value";
- ArrayConverter converter = new ArrayConverter(String[].class, new StringConverter());
+ ArrayConverter<String[]> converter = new ArrayConverter<String[]>(String[].class, new StringConverter());
// test underscore not allowed (the default)
- String[] result = (String[])converter.convert(String[].class, value);
+ String[] result = converter.convert(String[].class, value);
assertNotNull("result.null", result);
assertEquals("result.length", 4, result.length);
assertEquals("result[0]", "first", result[0]);
@@ -380,7 +380,7 @@ public class ArrayConverterTestCase exte
converter.setAllowedChars(new char[] {'.', '-', '_'});
// test underscore allowed
- result = (String[])converter.convert(String[].class, value);
+ result = converter.convert(String[].class, value);
assertNotNull("result.null", result);
assertEquals("result.length", 2, result.length);
assertEquals("result[0]", "first_value", result[0]);