Author: ebourg Date: Wed Apr 18 03:09:35 2007 New Revision: 529948 URL: http://svn.apache.org/viewvc?view=rev&rev=529948 Log: DataConfiguration now supports the javax.mail.internet.InternetAddress type for email adresses
Modified: jakarta/commons/proper/configuration/trunk/project.xml jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/PropertyConverter.java jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Modified: jakarta/commons/proper/configuration/trunk/project.xml URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/project.xml?view=diff&rev=529948&r1=529947&r2=529948 ============================================================================== --- jakarta/commons/proper/configuration/trunk/project.xml (original) +++ jakarta/commons/proper/configuration/trunk/project.xml Wed Apr 18 03:09:35 2007 @@ -333,6 +333,16 @@ </properties> </dependency> + <dependency> + <groupId>javax.mail</groupId> + <artifactId>mail</artifactId> + <version>1.4</version> + <url>http://java.sun.com/products/javamail/</url> + <properties> + <optional>true</optional> + </properties> + </dependency> + <!-- Needed for testing --> <dependency> Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java?view=diff&rev=529948&r1=529947&r2=529948 ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DataConfiguration.java Wed Apr 18 03:09:35 2007 @@ -37,16 +37,27 @@ /** * Decorator providing additional getters for any Configuration. This extended - * Configuration supports more types: URL, Locale, Date, Calendar, Color, - * InetAddress, as well as lists and arrays for all types. + * Configuration supports more types: + * <ul> + * <li>[EMAIL PROTECTED] java.net.URL}</li> + * <li>[EMAIL PROTECTED] java.util.Locale}</li> + * <li>[EMAIL PROTECTED] java.util.Date}</li> + * <li>[EMAIL PROTECTED] java.util.Calendar}</li> + * <li>[EMAIL PROTECTED] java.awt.Color}</li> + * <li>[EMAIL PROTECTED] java.net.InetAddress}</li> + * <li>[EMAIL PROTECTED] javax.mail.internet.InternetAddress} (requires Javamail in the classpath)</li> + * </ul> + * + * Lists and arrays are available for all types. * * <h4>Example</h4> * * Configuration file <tt>config.properties</tt>: * <pre> * title.color = #0000FF - * default.locales = fr,en,de * remote.host = 192.168.0.53 + * default.locales = fr,en,de + * email.contact = [EMAIL PROTECTED], [EMAIL PROTECTED] * </pre> * * Usage: @@ -58,8 +69,9 @@ * Color color = config.getColor("title.color"); * * // retrieve a property using a generic getter - * Locale[] locales = (Locale[]) config.getArray(Locale.class, "default.locales"); * InetAddress host = (InetAddress) config.get(InetAddress.class, "remote.host"); + * Locale[] locales = (Locale[]) config.getArray(Locale.class, "default.locales"); + * List contacts = config.getList(InternetAddress.class, "email.contact"); * </pre> * * <h4>Dates</h4> Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/PropertyConverter.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/PropertyConverter.java?view=diff&rev=529948&r1=529947&r2=529948 ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/PropertyConverter.java (original) +++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/PropertyConverter.java Wed Apr 18 03:09:35 2007 @@ -20,12 +20,11 @@ import java.awt.Color; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.BigInteger; +import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; -import java.net.InetAddress; import java.net.UnknownHostException; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -42,7 +41,6 @@ import org.apache.commons.collections.iterators.SingletonIterator; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.SystemUtils; /** * A utility class to convert the configuration properties into any type. @@ -149,6 +147,10 @@ { return PropertyConverter.toColor(value); } + else if (cls.getName().equals("javax.mail.internet.InternetAddress")) + { + return PropertyConverter.toInternetAddress(value); + } else if (InetAddress.class.isAssignableFrom(cls)) { return PropertyConverter.toInetAddress(value); @@ -648,6 +650,39 @@ else { throw new ConversionException("The value " + value + " can't be converted to a InetAddress"); + } + } + + /** + * Convert the specified value into an email address. + * + * @param value the value to convert + * @return the converted value + * @throws ConversionException thrown if the value cannot be converted to an email address + * + * @since 1.5 + */ + static Object toInternetAddress(Object value) throws ConversionException + { + if (value.getClass().getName().equals("javax.mail.internet.InternetAddress")) + { + return value; + } + else if (value instanceof String) + { + try + { + Constructor ctor = Class.forName("javax.mail.internet.InternetAddress").getConstructor(new Class[] { String.class }); + return ctor.newInstance(new Object[] { value }); + } + catch (Exception e) + { + throw new ConversionException("The value " + value + " can't be converted to a InternetAddress", e); + } + } + else + { + throw new ConversionException("The value " + value + " can't be converted to a InternetAddress"); } } Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java?view=diff&rev=529948&r1=529947&r2=529948 ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestDataConfiguration.java Wed Apr 18 03:09:35 2007 @@ -20,8 +20,8 @@ import java.awt.Color; import java.math.BigDecimal; import java.math.BigInteger; -import java.net.URL; import java.net.InetAddress; +import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -31,6 +31,7 @@ import java.util.List; import java.util.Locale; import java.util.NoSuchElementException; +import javax.mail.internet.InternetAddress; import junit.framework.TestCase; import junitx.framework.ArrayAssert; @@ -291,9 +292,15 @@ conf.addProperty("calendar.list.interpolated", "${calendar.string},2004-12-31"); conf.addPropertyDirect("calendar.list7", new String[] { "2004-01-01", "2004-12-31" }); + // host address conf.addProperty("ip.string", "127.0.0.1"); conf.addProperty("ip.string.interpolated", "${ip.string}"); conf.addProperty("ip.object", InetAddress.getByName("127.0.0.1")); + + // email address + conf.addProperty("email.string", "[EMAIL PROTECTED]"); + conf.addProperty("email.string.interpolated", "${email.string}"); + conf.addProperty("email.object", new InternetAddress("[EMAIL PROTECTED]")); } public void testGetConfiguration() @@ -1683,6 +1690,31 @@ } } + public void testGetInternetAddress() throws Exception + { + InternetAddress expected = new InternetAddress("[EMAIL PROTECTED]"); + + // address as string + assertEquals(expected, conf.get(InternetAddress.class, "email.string")); + + // address object + assertEquals(expected, conf.get(InternetAddress.class, "email.object")); + + // interpolated value + assertEquals(expected, conf.get(InternetAddress.class, "email.string.interpolated")); + + conf.setProperty("email.invalid", "[EMAIL PROTECTED]@org"); + try + { + conf.get(InternetAddress.class, "email.invalid"); + fail("ConversionException should be thrown for invalid emails"); + } + catch (ConversionException e) + { + // expected + } + } + public void testConversionException() { conf.addProperty("key1", new Object()); @@ -2292,6 +2324,16 @@ { conf.get(InetAddress.class, "key1"); fail("getInetAddress didn't throw a ConversionException"); + } + catch (ConversionException e) + { + // expected + } + + try + { + conf.get(InternetAddress.class, "key1"); + fail("getInternetAddress didn't throw a ConversionException"); } catch (ConversionException e) { Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?view=diff&rev=529948&r1=529947&r2=529948 ============================================================================== --- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original) +++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Wed Apr 18 03:09:35 2007 @@ -24,8 +24,9 @@ <body> <release version="1.5-SNAPSHOT" date="in SVN" description=""> <action dev="ebourg" type="add"> - DataConfiguration now supports the InetAddress type, properties are - converted to this type using the new generic getters. + DataConfiguration now supports the java.net.InetAddress and + javax.mail.internet.InternetAddress types. Properties are + converted to these types using the new generic getters. </action> <action dev="ebourg" type="fix"> The object getters in DataConfiguration with no default value --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]