package fitnesse.slim;
import java.beans.PropertyEditor;
import java.beans.PropertyEditorManager;
import java.util.List;
import fitnesse.slim.converters.ConverterRegistry;
import fitnesse.slim.converters.PropertyEditorConverter;
class ConverterSupport {
public static Converter getConverter(Class<?> k) {
Converter c = ConverterRegistry.getConverterForClass(k);
if (c != null)
return c;
PropertyEditor pe = PropertyEditorManager.findEditor(k);
if (pe != null) {
return new PropertyEditorConverter(pe);
}
return null;
}
public static Object[] convertArgs(Object[] args, Class<?>[] argumentTypes) {
Object[] convertedArgs = new Object[args.length];
for (int i = 0; i < argumentTypes.length; i++) {
convertedArgs[i] = convertArg(args[i], argumentTypes[i]);
}
return convertedArgs;
}
private static Object convertArg(Object arg, Class<?> argumentType) throws SlimError {
if (arg == null || argumentType.isInstance(arg)) {
// arg may be a List or an instance that comes from the variable store
return arg;
}
Converter converter = getConverter(argumentType);
if (converter != null) {
return converter.fromString(arg.toString());
}
throw new SlimError(String.format("message:<<NO_CONVERTER_FOR_ARGUMENT_NUMBER %s.>>",
argumentType.getName()));
}
}