You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by eb...@apache.org on 2007/04/18 12:09:37 UTC
svn commit: r529948 - in /jakarta/commons/proper/configuration/trunk: ./
src/java/org/apache/commons/configuration/
src/test/org/apache/commons/configuration/ xdocs/
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>{@link java.net.URL}</li>
+ * <li>{@link java.util.Locale}</li>
+ * <li>{@link java.util.Date}</li>
+ * <li>{@link java.util.Calendar}</li>
+ * <li>{@link java.awt.Color}</li>
+ * <li>{@link java.net.InetAddress}</li>
+ * <li>{@link 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 = ebourg@apache.org, oheger@apache.org
* </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", "ebourg@apache.org");
+ conf.addProperty("email.string.interpolated", "${email.string}");
+ conf.addProperty("email.object", new InternetAddress("ebourg@apache.org"));
}
public void testGetConfiguration()
@@ -1683,6 +1690,31 @@
}
}
+ public void testGetInternetAddress() throws Exception
+ {
+ InternetAddress expected = new InternetAddress("ebourg@apache.org");
+
+ // 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", "ebourg@apache@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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org