/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.awe.properties.ui.views.internal;
/**
* TODO Purpose of
* <p>
* </p>
*
* @author Vladislav_Kondratenko
* @since 1.0.0
*/
public enum ArraysConverter {
INTEGER_ARRAY(int[].class) {
private int[] array;
@Override
protected void addValue(final int i, final String value) {
array[i] = Integer.parseInt(value);
}
@Override
protected Object initArray(final int length) {
array = new int[length];
return array;
}
},
LONG_ARRAY(long[].class) {
private long[] array;
@Override
protected void addValue(final int i, final String value) {
array[i] = Long.parseLong(value);
}
@Override
protected Object initArray(final int length) {
array = new long[length];
return array;
}
},
FLOAT_ARRAY(float[].class) {
private float[] array;
@Override
protected void addValue(final int i, final String value) {
array[i] = Float.parseFloat(value);
}
@Override
protected Object initArray(final int length) {
array = new float[length];
return array;
}
},
DOUBLE_ARRAY(Double[].class) {
private double[] array;
@Override
protected void addValue(final int i, final String value) {
array[i] = Double.parseDouble(value);
}
@Override
protected Object initArray(final int length) {
array = new double[length];
return array;
}
},
STRING_ARRAY(String[].class) {
private String[] array;
@Override
protected void addValue(final int i, final String value) {
array[i] = value;
}
@Override
protected Object initArray(final int length) {
array = new String[length];
return array;
}
},
CHAR_ARRAY(char[].class) {
private char[] array;
@Override
protected void addValue(final int i, final String value) throws IllegalArgumentException {
array[i] = getValue(value);
}
protected Character getValue(final String newStringValue) throws IllegalArgumentException {
if (newStringValue.length() > 1) {
throw new IllegalArgumentException("can't cast value " + newStringValue + " to Charracter");
} else {
return new Character(newStringValue.charAt(0));
}
}
@Override
protected Object initArray(final int length) {
array = new char[length];
return array;
}
};
public static ArraysConverter findByType(final Class< ? > type) {
for (ArraysConverter converter : values()) {
if (converter.getType().isAssignableFrom(type)) {
return converter;
}
}
return null;
}
private Class< ? > type;
private ArraysConverter(final Class< ? > type) {
this.type = type;
}
protected abstract void addValue(int i, String value) throws IllegalArgumentException;
public Object convertToArray(final String[] stringArray) throws IllegalArgumentException {
Object array = initArray(stringArray.length);
for (int i = 0; i < stringArray.length; i++) {
String newStringValue = stringArray[i];
addValue(i, newStringValue);
}
return array;
}
/**
* @return Returns the type.
*/
protected Class< ? > getType() {
return type;
}
/**
* @return
*/
protected abstract Object initArray(int length);
}