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 2014/07/22 22:09:54 UTC

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

Author: oheger
Date: Tue Jul 22 20:09:54 2014
New Revision: 1612685

URL: http://svn.apache.org/r1612685
Log:
Removed BUILDER_OPTIONAL literal from EventSourceSupport.

As ConfigurationBuilder extends EventSource and now all listeners are
registered via the event source methods, all configuration builders provide a
valid EventSource implementation. Thus, the code in
BuilderConfigurationWrapperFactory could be simplified.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderConfigurationWrapperFactory.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/MultiFileConfigurationBuilderProvider.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBuilderConfigurationWrapperFactory.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderConfigurationWrapperFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderConfigurationWrapperFactory.java?rev=1612685&r1=1612684&r2=1612685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderConfigurationWrapperFactory.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderConfigurationWrapperFactory.java Tue Jul 22 20:09:54 2014
@@ -210,26 +210,10 @@ public class BuilderConfigurationWrapper
          * associated {@code ConfigurationBuilder} object. If this option is
          * used, generated {@code Configuration} objects provide a fully
          * functional implementation of {@code EventSource} by delegating to the
-         * builder. It is expected that the builder defines the methods
-         * {@code addConfigurationListener()} and
-         * {@code removeConfigurationListener()}, to which the methods of the
-         * {@code EventSource} interface are mapped. This is the case for all
-         * builder implementations derived from
-         * {@code BasicConfigurationBuilder}. If these methods are not
-         * available, an exception is thrown.
+         * builder. Because the {@code ConfigurationBuilder} interface extends
+         * {@code EventSource} this delegation is always possible.
          */
-        BUILDER,
-
-        /**
-         * {@code EventSource} support is implemented by delegating to the
-         * associated {@code ConfigurationBuilder} object like for the type
-         * {@code BUILDER}. However, if the builder does not define the methods
-         * {@code addConfigurationListener()} and
-         * {@code removeConfigurationListener()}, the builder is used as event
-         * source itself (i.e. the methods {@code addEventListener()} or
-         * {@code removeEventListener()} are called.
-         */
-        BUILDER_OPTIONAL
+        BUILDER
     }
 
     /**
@@ -240,18 +224,6 @@ public class BuilderConfigurationWrapper
     private static class BuilderConfigurationWrapperInvocationHandler implements
             InvocationHandler
     {
-        /** The name of the event source method for removing a listener. */
-        private static final String METHOD_SOURCE_REMOVE =
-                "removeEventListener";
-
-        /** The name of the builder method for adding a listener. */
-        private static final String METHOD_BUILDER_ADD =
-                "addConfigurationListener";
-
-        /** The name of the builder method for removing a listener. */
-        private static final String METHOD_BUILDER_REMOVE =
-                "removeConfigurationListener";
-
         /** The wrapped builder. */
         private final ConfigurationBuilder<? extends Configuration> builder;
 
@@ -331,53 +303,10 @@ public class BuilderConfigurationWrapper
         private Object handleEventSourceInvocation(Method method, Object[] args)
                 throws Exception
         {
-            Object target;
-            Method methodToInvoke;
-            if (EventSourceSupport.DUMMY == eventSourceSupport)
-            {
-                target = ConfigurationUtils.asEventSource(this, true);
-                methodToInvoke = method;
-            }
-            else
-            {
-                target = builder;
-                methodToInvoke = findBuilderMethod(method);
-                if (methodToInvoke == null)
-                {
-                    if (EventSourceSupport.BUILDER == eventSourceSupport)
-                    {
-                        throw new ConfigurationRuntimeException(
-                                "Could not delegate event source operation to builder!");
-                    }
-                    methodToInvoke = method;
-                }
-            }
-
-            return methodToInvoke.invoke(target, args);
-        }
-
-        /**
-         * Determines the method on the builder to be called for the specified
-         * event source method. If no such method can be found, result is
-         * <b>null</b>.
-         *
-         * @param method the event source method to be called
-         * @return the corresponding builder method or <b>null</b>
-         */
-        private Method findBuilderMethod(Method method)
-        {
-            String builderMethodName =
-                    METHOD_SOURCE_REMOVE.equals(method.getName()) ? METHOD_BUILDER_REMOVE
-                            : METHOD_BUILDER_ADD;
-            try
-            {
-                return builder.getClass().getMethod(builderMethodName,
-                        method.getParameterTypes());
-            }
-            catch (NoSuchMethodException e)
-            {
-                return null;
-            }
+            Object target =
+                    (EventSourceSupport.DUMMY == eventSourceSupport) ? ConfigurationUtils
+                            .asEventSource(this, true) : builder;
+            return method.invoke(target, args);
         }
     }
 }

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/MultiFileConfigurationBuilderProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/MultiFileConfigurationBuilderProvider.java?rev=1612685&r1=1612684&r2=1612685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/MultiFileConfigurationBuilderProvider.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/MultiFileConfigurationBuilderProvider.java Tue Jul 22 20:09:54 2014
@@ -120,7 +120,7 @@ public class MultiFileConfigurationBuild
                         : Configuration.class;
         return BuilderConfigurationWrapperFactory
                 .createBuilderConfigurationWrapper(ifcClass, builder,
-                        EventSourceSupport.BUILDER_OPTIONAL);
+                        EventSourceSupport.BUILDER);
     }
 
     /**

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBuilderConfigurationWrapperFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBuilderConfigurationWrapperFactory.java?rev=1612685&r1=1612684&r2=1612685&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBuilderConfigurationWrapperFactory.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBuilderConfigurationWrapperFactory.java Tue Jul 22 20:09:54 2014
@@ -34,7 +34,6 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.event.EventListenerTestImpl;
 import org.apache.commons.configuration.event.EventSource;
 import org.apache.commons.configuration.ex.ConfigurationException;
-import org.apache.commons.configuration.ex.ConfigurationRuntimeException;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
@@ -144,31 +143,10 @@ public class TestBuilderConfigurationWra
     }
 
     /**
-     * Tests EventSource support level 'builder'.
-     */
-    @Test(expected = ConfigurationRuntimeException.class)
-    public void testEventSourceSupportBuilder()
-    {
-        BaseHierarchicalConfiguration conf =
-                new BaseHierarchicalConfiguration();
-        ConfigurationBuilder<BaseHierarchicalConfiguration> builder =
-                createBuilderMock(conf);
-        EasyMock.replay(builder);
-        BuilderConfigurationWrapperFactory factory =
-                new BuilderConfigurationWrapperFactory(
-                        EventSourceSupport.BUILDER);
-        EventSource src =
-                (EventSource) factory.createBuilderConfigurationWrapper(
-                        HierarchicalConfiguration.class, builder);
-        src.addEventListener(ConfigurationEvent.ANY, null);
-    }
-
-    /**
      * Tests whether EventSource methods can be delegated to the builder.
      */
     @Test
-    public void testEventSourceSupportBuilderOptionalSupported()
-            throws ConfigurationException
+    public void testEventSourceSupportBuilder() throws ConfigurationException
     {
         BasicConfigurationBuilder<PropertiesConfiguration> builder =
                 new BasicConfigurationBuilder<PropertiesConfiguration>(
@@ -177,7 +155,7 @@ public class TestBuilderConfigurationWra
         EventListener<ConfigurationEvent> l2 = new EventListenerTestImpl(null);
         BuilderConfigurationWrapperFactory factory =
                 new BuilderConfigurationWrapperFactory(
-                        EventSourceSupport.BUILDER_OPTIONAL);
+                        EventSourceSupport.BUILDER);
         EventSource src =
                 (EventSource) factory.createBuilderConfigurationWrapper(
                         Configuration.class, builder);
@@ -198,26 +176,25 @@ public class TestBuilderConfigurationWra
     }
 
     /**
-     * Tests EventSource support level 'builder optional' if the builder does
-     * not provide support.
+     * Tests whether event source support of level builder is possible even for a
+     * mock builder.
      */
     @Test
-    public void testEventSourceSupportBuilderOptionalNotSupported()
+    public void testEventSourceSupportMockBuilder()
     {
         BaseHierarchicalConfiguration conf =
                 new BaseHierarchicalConfiguration();
-        EventListener<ConfigurationEvent> listener = new EventListenerTestImpl(null);
         ConfigurationBuilder<BaseHierarchicalConfiguration> builder =
                 createBuilderMock(conf);
+        EventListenerTestImpl listener = new EventListenerTestImpl(null);
         builder.addEventListener(ConfigurationEvent.ANY, listener);
         EasyMock.replay(builder);
+
         BuilderConfigurationWrapperFactory factory =
-                new BuilderConfigurationWrapperFactory(
-                        EventSourceSupport.BUILDER_OPTIONAL);
+                new BuilderConfigurationWrapperFactory(EventSourceSupport.BUILDER);
         EventSource src =
                 (EventSource) factory.createBuilderConfigurationWrapper(
                         HierarchicalConfiguration.class, builder);
-
         src.addEventListener(ConfigurationEvent.ANY, listener);
         EasyMock.verify(builder);
     }
@@ -230,7 +207,7 @@ public class TestBuilderConfigurationWra
     {
         BuilderConfigurationWrapperFactory factory =
                 new BuilderConfigurationWrapperFactory(
-                        EventSourceSupport.BUILDER_OPTIONAL);
+                        EventSourceSupport.BUILDER);
         factory.createBuilderConfigurationWrapper(null,
                 createBuilderMock(new BaseHierarchicalConfiguration()));
     }