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/13 22:03:18 UTC

svn commit: r1610291 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/event/BaseEventSource.java test/java/org/apache/commons/configuration/event/TestEventSource.java

Author: oheger
Date: Sun Jul 13 20:03:18 2014
New Revision: 1610291

URL: http://svn.apache.org/r1610291
Log:
Added a fireError() method compatible with the new listener mechanism.

The method calls regular EventListeners supporting the current error event
type.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/event/BaseEventSource.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/event/TestEventSource.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/event/BaseEventSource.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/event/BaseEventSource.java?rev=1610291&r1=1610290&r2=1610291&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/event/BaseEventSource.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/event/BaseEventSource.java Sun Jul 13 20:03:18 2014
@@ -318,6 +318,36 @@ public class BaseEventSource implements 
     }
 
     /**
+     * Creates an error event object and delivers it to all registered error
+     * listeners of a matching type.
+     *
+     * @param eventType the event's type
+     * @param operationType the type of the failed operation
+     * @param propertyName the name of the affected property (can be
+     *        <b>null</b>)
+     * @param propertyValue the value of the affected property (can be
+     *        <b>null</b>)
+     * @param cause the {@code Throwable} object that caused this error event
+     */
+    public <T extends ConfigurationErrorEvent> void fireError(
+            EventType<T> eventType, EventType<?> operationType,
+            String propertyName, Object propertyValue, Throwable cause)
+    {
+        EventListenerList.EventListenerIterator<T> iterator =
+                eventListeners.getEventListenerIterator(eventType);
+        if (iterator.hasNext())
+        {
+            ConfigurationErrorEvent event =
+                    createErrorEvent(eventType, operationType, propertyName,
+                            propertyValue, cause);
+            while (iterator.hasNext())
+            {
+                iterator.invokeNext(event);
+            }
+        }
+    }
+
+    /**
      * Creates a {@code ConfigurationErrorEvent} object based on the
      * passed in parameters. This is called by {@code fireError()} if it
      * decides that an event needs to be generated.
@@ -329,13 +359,35 @@ public class BaseEventSource implements 
      * event
      * @return the event object
      * @since 1.4
+     * @deprecated Use the method expecting an EventType
      */
+    @Deprecated
     protected ConfigurationErrorEvent createErrorEvent(int type, String propName, Object propValue, Throwable ex)
     {
         return new ConfigurationErrorEvent(this, type, propName, propValue, ex);
     }
 
     /**
+     * Creates a {@code ConfigurationErrorEvent} object based on the passed in
+     * parameters. This is called by {@code fireError()} if it decides that an
+     * event needs to be generated.
+     *
+     * @param type the event's type
+     * @param opType the operation type related to this error
+     * @param propName the name of the affected property (can be <b>null</b>)
+     * @param propValue the value of the affected property (can be <b>null</b>)
+     * @param ex the {@code Throwable} object that caused this error event
+     * @return the event object
+     */
+    protected ConfigurationErrorEvent createErrorEvent(
+            EventType<? extends ConfigurationErrorEvent> type,
+            EventType<?> opType, String propName, Object propValue, Throwable ex)
+    {
+        return new ConfigurationErrorEvent(this, type, opType, propName,
+                propValue, ex);
+    }
+
+    /**
      * Overrides the {@code clone()} method to correctly handle so far
      * registered event listeners. This implementation ensures that the clone
      * will have empty event listener lists, i.e. the listeners registered at an

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/event/TestEventSource.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/event/TestEventSource.java?rev=1610291&r1=1610290&r2=1610291&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/event/TestEventSource.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/event/TestEventSource.java Sun Jul 13 20:03:18 2014
@@ -300,20 +300,26 @@ public class TestEventSource
     @Test
     public void testFireError()
     {
-        TestListener l = new TestListener();
-        source.addErrorListener(l);
+        ErrorListenerTestImpl lstRead = new ErrorListenerTestImpl(source);
+        ErrorListenerTestImpl lstWrite = new ErrorListenerTestImpl(source);
+        ErrorListenerTestImpl lstAll = new ErrorListenerTestImpl(source);
+        source.addEventListener(ConfigurationErrorEvent.READ, lstRead);
+        source.addEventListener(ConfigurationErrorEvent.WRITE, lstWrite);
+        source.addEventListener(ConfigurationErrorEvent.ANY, lstAll);
         Exception testException = new Exception("A test");
-        source.fireError(TEST_TYPE, TEST_PROPNAME, TEST_PROPVALUE,
+
+        source.fireError(ConfigurationErrorEvent.WRITE,
+                ConfigurationEvent.ADD_PROPERTY, TEST_PROPNAME, TEST_PROPVALUE,
                 testException);
-        assertEquals("Not 1 event created", 1, source.errorCount);
-        assertEquals("Error listener not called once", 1, l.numberOfErrors);
-        //assertEquals("Wrong event type", TEST_TYPE, l.lastEvent.getType());
-        assertEquals("Wrong property name", TEST_PROPNAME, l.lastEvent
-                .getPropertyName());
-        assertEquals("Wrong property value", TEST_PROPVALUE, l.lastEvent
-                .getPropertyValue());
-        assertEquals("Wrong Throwable object", testException,
-                l.lastEvent.getCause());
+        lstRead.done();
+        lstWrite.checkEvent(ConfigurationErrorEvent.WRITE,
+                ConfigurationEvent.ADD_PROPERTY, TEST_PROPNAME, TEST_PROPVALUE);
+        lstWrite.done();
+        lstAll.checkEvent(ConfigurationErrorEvent.WRITE,
+                ConfigurationEvent.ADD_PROPERTY, TEST_PROPNAME, TEST_PROPVALUE);
+        lstAll.done();
+        assertEquals("Wrong number of error events created", 1,
+                source.errorCount);
     }
 
     /**
@@ -322,8 +328,8 @@ public class TestEventSource
     @Test
     public void testFireErrorNoListeners()
     {
-        source.fireError(TEST_TYPE, TEST_PROPNAME, TEST_PROPVALUE,
-                new Exception());
+        source.fireError(ConfigurationErrorEvent.ANY, ConfigurationEvent.ANY,
+                TEST_PROPNAME, TEST_PROPVALUE, new Exception());
         assertEquals("An error event object was created", 0, source.errorCount);
     }
 
@@ -455,6 +461,17 @@ public class TestEventSource
         }
 
         @Override
+        protected ConfigurationErrorEvent createErrorEvent(
+                EventType<? extends ConfigurationErrorEvent> type,
+                EventType<?> opType, String propName, Object propValue,
+                Throwable ex)
+        {
+            errorCount++;
+            return super
+                    .createErrorEvent(type, opType, propName, propValue, ex);
+        }
+
+        @Override
         protected ConfigurationErrorEvent createErrorEvent(int type,
                 String propName, Object value, Throwable ex)
         {