Author: oheger Date: Wed Mar 28 18:21:55 2018 New Revision: 1827941 URL: http://svn.apache.org/viewvc?rev=1827941&view=rev Log: CONFIGURATION-693: Added conversion to files and paths.
PropertyConverter now supports conversions to the types File and Path. Thanks to l dot wolter at his dot de for the patch. Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java?rev=1827941&r1=1827940&r2=1827941&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java Wed Mar 28 18:21:55 2018 @@ -18,6 +18,7 @@ package org.apache.commons.configuration2.convert; import java.awt.Color; +import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; @@ -28,6 +29,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.UnknownHostException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -152,6 +155,14 @@ final class PropertyConverter { return toCalendar(value, convHandler.getDateFormat()); } + else if (File.class.equals(cls)) + { + return toFile(value); + } + else if (Path.class.equals(cls)) + { + return toPath(value); + } else if (URI.class.equals(cls)) { return toURI(value); @@ -475,6 +486,62 @@ final class PropertyConverter } } + /** + * Convert the specified object into a File. + * + * @param value the value to convert + * @return the converted value + * @throws ConversionException thrown if the value cannot be converted to a File + * @since 2.3 + */ + public static File toFile(Object value) throws ConversionException + { + if (value instanceof File) + { + return (File) value; + } + else if (value instanceof Path) + { + return ((Path) value).toFile(); + } + else if (value instanceof String) + { + return new File((String) value); + } + else + { + throw new ConversionException("The value " + value + " can't be converted to a File"); + } + } + + /** + * Convert the specified object into a Path. + * + * @param value the value to convert + * @return the converted value + * @throws ConversionException thrown if the value cannot be converted to a Path + * @since 2.3 + */ + public static Path toPath(Object value) throws ConversionException + { + if (value instanceof File) + { + return ((File) value).toPath(); + } + else if (value instanceof Path) + { + return (Path) value; + } + else if (value instanceof String) + { + return Paths.get((String) value); + } + else + { + throw new ConversionException("The value " + value + " can't be converted to a Path"); + } + } + /** * Convert the specified object into an URI. * Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java?rev=1827941&r1=1827940&r2=1827941&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java (original) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java Wed Mar 28 18:21:55 2018 @@ -20,8 +20,11 @@ package org.apache.commons.configuration import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; +import java.io.File; import java.lang.annotation.ElementType; import java.math.BigDecimal; +import java.nio.file.Path; +import java.nio.file.Paths; import org.apache.commons.configuration2.ex.ConversionException; import org.junit.Test; @@ -38,6 +41,68 @@ public class TestPropertyConverter private static final Class<ElementType> ENUM_CLASS = ElementType.class; /** + * Tests conversion to files when the passed in objects are already + * files. + */ + @Test + public void testToFileDirect() + { + File f = new File("dir", "file"); + assertSame("Wrong file", f, PropertyConverter.toFile(f)); + } + + /** + * Tests conversion to file when the passed in objects have a compatible + * string representation. + */ + @Test + public void testToFileFromString() + { + assertEquals("Wrong conversion result", new File("dir", "file"), PropertyConverter.toFile("dir/file")); + } + + /** + * Tests conversion to file when the passed in objects are paths. + */ + @Test + public void testToFileFromPath() + { + Path p = Paths.get("dir", "file"); + assertEquals("Wrong conversion result", new File("dir", "file"), PropertyConverter.toFile(p)); + } + + /** + * Tests conversion to paths when the passed in objects are already + * paths. + */ + @Test + public void testToPathDirect() + { + Path p = Paths.get("dir", "file"); + assertSame("Wrong path", p, PropertyConverter.toPath(p)); + } + + /** + * Tests conversion to file when the passed in objects have a compatible + * string representation. + */ + @Test + public void testToPathFromString() + { + assertEquals("Wrong conversion result", Paths.get("dir", "file"), PropertyConverter.toPath("dir/file")); + } + + /** + * Tests conversion to path when the passed in objects are files. + */ + @Test + public void testToPathFromFile() + { + File f = new File("dir", "file"); + assertEquals("Wrong conversion result", Paths.get("dir", "file"), PropertyConverter.toPath(f)); + } + + /** * Tests conversion to numbers when the passed in objects are already * numbers. */