Index: lutinutil/src/java/org/codelutin/util/ConverterUtil.java diff -u lutinutil/src/java/org/codelutin/util/ConverterUtil.java:1.2 lutinutil/src/java/org/codelutin/util/ConverterUtil.java:1.3 --- lutinutil/src/java/org/codelutin/util/ConverterUtil.java:1.2 Tue Jan 1 23:24:21 2008 +++ lutinutil/src/java/org/codelutin/util/ConverterUtil.java Thu Jan 3 05:57:18 2008 @@ -22,6 +22,7 @@ import org.apache.commons.beanutils.Converter; import java.net.URL; +import java.util.Arrays; /** * Une classe contenant des méthodes utiles sur les converters @@ -29,6 +30,8 @@ * @author tony */ public class ConverterUtil { + + private static final Class[] AUTO_REGISTRED_CONVERTER = new Class[]{URL.class,VersionNumber.class}; /** * Cherche un converter pour un type donné. *

@@ -38,33 +41,39 @@ * Si le type est URL, et qu'aucun converter n'a été trouvé, * on enregistre un URLConverter. * + * Si le type est VersionNumber, et qu'aucun converter n'a été trouvé, + * on enregistre un VersionNumberConverter. + * * @param type le type à convertir * @return le converter trouvé, ou null si non trouvé * @see Converter * @see EnumConverter * @see URLConverter + * @see VersionNumberConverter */ public static Converter getConverter(Class type) { Converter converter = ConvertUtils.lookup(type); - if (type.isEnum() && converter == null) { - registerEnumConverter(type); - converter = ConvertUtils.lookup(type); + if (converter!=null) { + return converter; } - if (type==URL.class && converter==null) { - registerURLConverter(); + if (type.isEnum()) { + registerEnumConverter(type); converter = ConvertUtils.lookup(type); - } + } else if (Arrays.asList(AUTO_REGISTRED_CONVERTER).contains(type)) { + try { + registerConverter(type); + converter = ConvertUtils.lookup(type); + } catch (Exception e) { + throw new RuntimeException(e); + } + } return converter; } - /** - * Enregistre le converter d'url. - */ - public static void registerURLConverter() { - if (ConvertUtils.lookup(URL.class)== null) { - URLConverter converter = new URLConverter(); - ConvertUtils.register(converter, URL.class); - URLConverter.log.info(converter); + public static void registerConverter(Class type) throws ClassNotFoundException, IllegalAccessException, InstantiationException { + if (ConvertUtils.lookup(type)== null) { + Converter converter = (Converter) Class.forName("org.codelutin.util."+type.getSimpleName()+"Converter").newInstance(); + ConvertUtils.register(converter, type); } } @@ -77,9 +86,8 @@ */ public static void registerEnumConverter(Class type, Object defaultValue) { if (EnumConverter.isEnabled(type, type) && ConvertUtils.lookup(type) == null) { - EnumConverter converter = new EnumConverter(type, defaultValue); + Converter converter = new EnumConverter(type, defaultValue); ConvertUtils.register(converter, type); - EnumConverter.log.info(converter + "<" + type + ">"); } }