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 2013/07/07 18:47:42 UTC

svn commit: r1500477 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/ test/java/org/apache/commons/configuration/

Author: oheger
Date: Sun Jul  7 16:47:42 2013
New Revision: 1500477

URL: http://svn.apache.org/r1500477
Log:
The methods for escaping values of ListDelimiterHandler now expects a ValueTransformer.

When escaping single values, AbstractListDelimiterHandler already invokes the
transformer.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractListDelimiterHandler.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DisabledListDelimiterHandler.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ListDelimiterHandler.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDisabledListDelimiterHandler.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractListDelimiterHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractListDelimiterHandler.java?rev=1500477&r1=1500476&r2=1500477&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractListDelimiterHandler.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractListDelimiterHandler.java Sun Jul  7 16:47:42 2013
@@ -79,16 +79,16 @@ public abstract class AbstractListDelimi
 
     /**
      * {@inheritDoc} This implementation checks whether the object to be escaped
-     * is a string. If yes, it delegates to {@link #escapeString(String)}. In
-     * all other cases the object is returned unchanged.
+     * is a string. If yes, it delegates to {@link #escapeString(String)},
+     * otherwise no escaping is performed. Eventually, the passed in transformer
+     * is invoked so that additional encoding can be performed.
      */
-    public Object escape(Object value)
+    public Object escape(Object value, ValueTransformer transformer)
     {
-        if (value instanceof String)
-        {
-            return escapeString((String) value);
-        }
-        return value;
+        Object escValue =
+                (value instanceof String) ? escapeString((String) value)
+                        : value;
+        return transformer.transformValue(escValue);
     }
 
     /**

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DisabledListDelimiterHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DisabledListDelimiterHandler.java?rev=1500477&r1=1500476&r2=1500477&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DisabledListDelimiterHandler.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/DisabledListDelimiterHandler.java Sun Jul  7 16:47:42 2013
@@ -47,7 +47,7 @@ public class DisabledListDelimiterHandle
      * {@inheritDoc} This implementation always throws an
      * {@code UnsupportedOperationException} exception.
      */
-    public Object escapeList(List<?> values)
+    public Object escapeList(List<?> values, ValueTransformer transformer)
     {
         throw new UnsupportedOperationException(
                 "Escaping lists is not supported!");

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ListDelimiterHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ListDelimiterHandler.java?rev=1500477&r1=1500476&r2=1500477&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ListDelimiterHandler.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ListDelimiterHandler.java Sun Jul  7 16:47:42 2013
@@ -55,6 +55,20 @@ import java.util.List;
 public interface ListDelimiterHandler
 {
     /**
+     * A specialized {@code ValueTransformer} implementation which does no
+     * transformation. The {@code transformValue()} method just returns the
+     * passed in object without changes. This instance can be used by
+     * configurations which do not require additional encoding.
+     */
+    ValueTransformer NOOP_TRANSFORMER = new ValueTransformer()
+    {
+        public Object transformValue(Object value)
+        {
+            return value;
+        }
+    };
+
+    /**
      * Parses the specified value for list delimiters and splits it if
      * necessary. The passed in object can be either a single value or a complex
      * one, e.g. a collection, an array, or an {@code Iterable}. It is the
@@ -90,9 +104,11 @@ public interface ListDelimiterHandler
      * escape them accordingly.
      *
      * @param value the value to be escaped
+     * @param transformer a {@code ValueTransformer} for an additional encoding
+     *        (must not be <b>null</b>)
      * @return the escaped value
      */
-    Object escape(Object value);
+    Object escape(Object value, ValueTransformer transformer);
 
     /**
      * Escapes all values in the given list and concatenates them to a single
@@ -103,7 +119,9 @@ public interface ListDelimiterHandler
      *
      * @param values the list with all the values to be converted to a single
      *        value
+     * @param transformer a {@code ValueTransformer} for an additional encoding
+     *        (must not be <b>null</b>)
      * @return the resulting escaped value
      */
-    Object escapeList(List<?> values);
+    Object escapeList(List<?> values, ValueTransformer transformer);
 }

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDisabledListDelimiterHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDisabledListDelimiterHandler.java?rev=1500477&r1=1500476&r2=1500477&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDisabledListDelimiterHandler.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestDisabledListDelimiterHandler.java Sun Jul  7 16:47:42 2013
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertFal
 import java.util.Arrays;
 import java.util.Iterator;
 
+import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -119,7 +120,23 @@ public class TestDisabledListDelimiterHa
     public void testEscapeStringValue()
     {
         assertEquals("Wrong escaped string", STR_VALUE,
-                handler.escape(STR_VALUE));
+                handler.escape(STR_VALUE, ListDelimiterHandler.NOOP_TRANSFORMER));
+    }
+
+    /**
+     * Tests whether the transformer is correctly invoked when escaping a
+     * string.
+     */
+    @Test
+    public void testEscapeStringValueTransformer()
+    {
+        ValueTransformer trans = EasyMock.createMock(ValueTransformer.class);
+        String testStr = "Some other string";
+        EasyMock.expect(trans.transformValue(testStr)).andReturn(STR_VALUE);
+        EasyMock.replay(trans);
+        assertEquals("Wrong escaped string", STR_VALUE,
+                handler.escape(testStr, trans));
+        EasyMock.verify(trans);
     }
 
     /**
@@ -130,7 +147,24 @@ public class TestDisabledListDelimiterHa
     public void testEscapeNonStringValue()
     {
         Object value = 42;
-        assertEquals("Wrong escaped object", value, handler.escape(value));
+        assertEquals("Wrong escaped object", value,
+                handler.escape(value, ListDelimiterHandler.NOOP_TRANSFORMER));
+    }
+
+    /**
+     * Tests whether the transformer is correctly called when escaping a non
+     * string value.
+     */
+    @Test
+    public void testEscapeNonStringValueTransformer()
+    {
+        ValueTransformer trans = EasyMock.createMock(ValueTransformer.class);
+        Object value = 42;
+        EasyMock.expect(trans.transformValue(value)).andReturn(STR_VALUE);
+        EasyMock.replay(trans);
+        assertEquals("Wrong escaped object", STR_VALUE,
+                handler.escape(value, trans));
+        EasyMock.verify(trans);
     }
 
     /**
@@ -139,6 +173,7 @@ public class TestDisabledListDelimiterHa
     @Test(expected = UnsupportedOperationException.class)
     public void testEscapeList()
     {
-        handler.escapeList(Arrays.asList(VALUES));
+        handler.escapeList(Arrays.asList(VALUES),
+                ListDelimiterHandler.NOOP_TRANSFORMER);
     }
 }