package org.robotframework.javalib.reflection;
public class ArgumentConverter implements IArgumentConverter {
private final Class<?>[] parameterTypes;
public ArgumentConverter(Class<?>[] parameterTypes) {
this.parameterTypes = parameterTypes;
}
/** {@inheritDoc} */
public Object[] convertArguments(Object[] args) {
if (!shouldConvert(args)) {
return args;
}
return internalConvert(args);
}
/**
* @param args
* @return
*/
private Object[] internalConvert(Object[] args) {
Object[] convertedArgs = new Object[args.length];
for (int i = 0; i < args.length; i++) {
if (!isArrayArgument(args[i])) {
convertedArgs[i] = convertToType(parameterTypes[i], args[i]);
} else {
convertedArgs[i] = args[i];
}
}
return convertedArgs;
}
/**
* @param args
* @return
*/
private boolean shouldConvert(Object[] args) {
return args != null;
}
private boolean isArrayArgument(Object object) {
return object.getClass().isArray();
}
private Object convertToType(Class<?> clazz, Object object) {
if (clazz == Integer.class || clazz == Integer.TYPE) {
return Integer.valueOf(object.toString());
} else if (clazz == Long.class || clazz == Long.TYPE) {
return Long.valueOf(object.toString());
} else if (clazz == Short.class || clazz == Short.TYPE) {
return Short.valueOf(object.toString());
} else if (clazz == Byte.class || clazz == Byte.TYPE) {
return Byte.valueOf(object.toString());
} else if (clazz == Boolean.class || clazz == Boolean.TYPE) {
return Boolean.valueOf(object.toString());
} else if (clazz == Float.class || clazz == Float.TYPE) {
return Float.valueOf(object.toString());
} else if (clazz == Double.class || clazz == Double.TYPE) {
return Double.valueOf(object.toString());
} else if (clazz == String.class) {
return object.toString();
} else if (clazz.isAssignableFrom(object.getClass())) {
return object;
}
return null;
}
}