/* FloatArrayConverter.java created 2007-10-18
*
*/
package org.signalml.util;
import com.thoughtworks.xstream.converters.SingleValueConverter;
/**
* FloatArrayConverter provides conversion between array of floats and String datatypes.
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class FloatArrayConverter implements SingleValueConverter {
/**
* Creates array of floats from specified String, using ", " as separator between following numbers.
* @param s is String to read floats from
* @return array of floats
*/
@Override
public Object fromString(String s) {
if (s == null || s.isEmpty()) {
return null;
}
String[] parts = s.split(" *, *");
float[] res = new float[parts.length];
for (int i=0; i<parts.length; i++) {
res[i] = Float.parseFloat(parts[i]);
}
return res;
}
/**
* Converts array of floats to String, using ", " as separator between following numbers.
* @param obj the Object which is array of floats to convert
* @return String representation of array of floats
*/
@Override
public String toString(Object obj) {
if (obj == null) {
return "";
}
float[] arr = (float[]) obj;
//TODO unsafe type cast
StringBuilder sb = new StringBuilder();
for (int i=0; i<arr.length; i++) {
if (i > 0) {
sb.append(", ");
}
sb.append(Float.toString(arr[i]));
}
return sb.toString();
}
/**
* Checks if the class which is represented by specified Class parameter is the array of floats.
* @param clazz the Class object to be checked
* @return true if clazz is of type float[], otherwise false
*/
@SuppressWarnings("unchecked")
@Override
public boolean canConvert(Class clazz) {
return float[].class.isAssignableFrom(clazz);
}
}