You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2018/09/05 15:29:33 UTC

svn commit: r1840137 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration2/convert/PropertyConverter.java test/java/org/apache/commons/configuration2/convert/TestPropertyConverter.java

Author: oheger
Date: Wed Sep  5 15:29:33 2018
New Revision: 1840137

URL: http://svn.apache.org/viewvc?rev=1840137&view=rev
Log:
[CONFIGURATION-713] Added support for Regex patterns.

Thanks to Lars W 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=1840137&r1=1840136&r2=1840137&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 Sep  5 15:29:33 2018
@@ -36,6 +36,8 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 import org.apache.commons.configuration2.ex.ConversionException;
 import org.apache.commons.lang3.BooleanUtils;
@@ -171,6 +173,10 @@ final class PropertyConverter
         {
             return toURL(value);
         }
+        else if (Pattern.class.equals(cls))
+        {
+            return toPattern(value);
+        }
         else if (Locale.class.equals(cls))
         {
             return toLocale(value);
@@ -602,6 +608,36 @@ final class PropertyConverter
         }
     }
 
+    /**
+     * Convert the specified object into a Pattern.
+     *
+     * @param value the value to convert
+     * @return the converted value
+     * @throws ConversionException thrown if the value cannot be converted to a Pattern
+     */
+    public static Pattern toPattern(Object value) throws ConversionException
+    {
+        if (value instanceof Pattern)
+        {
+            return (Pattern) value;
+        }
+        else if (value instanceof String)
+        {
+            try
+            {
+                return Pattern.compile((String) value);
+            }
+            catch (PatternSyntaxException e)
+            {
+                throw new ConversionException("The value " + value + " can't be converted to a Pattern", e);
+            }
+        }
+        else
+        {
+            throw new ConversionException("The value " + value + " can't be converted to a Pattern");
+        }
+    }
+
     /**
      * Convert the specified object into a Locale.
      *

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=1840137&r1=1840136&r2=1840137&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 Sep  5 15:29:33 2018
@@ -25,6 +25,7 @@ import java.lang.annotation.ElementType;
 import java.math.BigDecimal;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.regex.Pattern;
 
 import org.apache.commons.configuration2.ex.ConversionException;
 import org.junit.Test;
@@ -188,6 +189,28 @@ public class TestPropertyConverter
         PropertyConverter.toNumber("42", Object.class);
     }
 
+    /**
+     * Tests conversion to patterns when the passed in objects are already
+     * patterns.
+     */
+    @Test
+    public void testToPatternDirect()
+    {
+        Pattern p = Pattern.compile(".+");
+        assertSame("Wrong pattern", p, PropertyConverter.toPattern(p));
+    }
+
+    /**
+     * Tests conversion to patterns when the passed in objects have a compatible
+     * string representation.
+     */
+    @Test
+    public void testToPatternFromString()
+    {
+        Pattern p = Pattern.compile(".+");
+        assertEquals("Wrong conversion result", p.pattern(), PropertyConverter.toPattern(".+").pattern());
+    }
+
     @Test
     public void testToEnumFromEnum()
     {