Return-Path: Delivered-To: apmail-incubator-harmony-commits-archive@www.apache.org Received: (qmail 50094 invoked from network); 25 Apr 2006 12:34:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 25 Apr 2006 12:34:52 -0000 Received: (qmail 35956 invoked by uid 500); 25 Apr 2006 12:34:44 -0000 Delivered-To: apmail-incubator-harmony-commits-archive@incubator.apache.org Received: (qmail 35880 invoked by uid 500); 25 Apr 2006 12:34:44 -0000 Mailing-List: contact harmony-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-commits@incubator.apache.org Received: (qmail 35861 invoked by uid 99); 25 Apr 2006 12:34:44 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Apr 2006 05:34:44 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Tue, 25 Apr 2006 05:34:43 -0700 Received: (qmail 48959 invoked by uid 65534); 25 Apr 2006 12:32:58 -0000 Message-ID: <20060425123258.48908.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r396863 - in /incubator/harmony/enhanced/classlib/trunk/modules/beans/src: main/java/java/beans/VetoableChangeSupport.java test/java/tests/api/java/beans/VetoableChangeSupportTest.java Date: Tue, 25 Apr 2006 12:32:41 -0000 To: harmony-commits@incubator.apache.org From: mloenko@apache.org X-Mailer: svnmailer-1.0.8 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: mloenko Date: Tue Apr 25 05:32:38 2006 New Revision: 396863 URL: http://svn.apache.org/viewcvs?rev=396863&view=rev Log: fixes for HARMONY-321: VetoableChangeSupport: the reverting event is not fired if the change is vetoed Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/VetoableChangeSupportTest.java Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java?rev=396863&r1=396862&r2=396863&view=diff ============================================================================== --- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java (original) +++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/VetoableChangeSupport.java Tue Apr 25 05:32:38 2006 @@ -318,7 +318,7 @@ private void doFirePropertyChange(PropertyChangeEvent event) throws PropertyVetoException { - String propertyName = event.getPropertyName(); + String propName = event.getPropertyName(); Object oldValue = event.getOldValue(); Object newValue = event.getNewValue(); @@ -326,23 +326,38 @@ return; } - Iterator iterator = allVetoableChangeListeners.iterator(); + try { + notifyAllListeners(event); + } catch (PropertyVetoException pve) { + PropertyChangeEvent rEvent = createPropertyChangeEvent(propName, + newValue, oldValue); + notifyAllListeners(rEvent); + throw pve; + } + } + + private void notifyListeners(Iterator iterator, PropertyChangeEvent event) + throws PropertyVetoException { + + VetoableChangeListener listener = null; while (iterator.hasNext()) { - VetoableChangeListener listener = - (VetoableChangeListener) iterator.next(); + listener = (VetoableChangeListener) iterator.next(); listener.vetoableChange(event); } - - ArrayList listeners = (ArrayList) selectedVetoableChangeListeners.get( - propertyName); - if (listeners != null) { - iterator = listeners.iterator(); - while (iterator.hasNext()) { - VetoableChangeListener listener = - (VetoableChangeListener) iterator.next(); - listener.vetoableChange(event); - } + + } + + private void notifyAllListeners(PropertyChangeEvent event) + throws PropertyVetoException { + + notifyListeners(allVetoableChangeListeners.iterator(), event); + String propertyName = event.getPropertyName(); + ArrayList listeners = (ArrayList) selectedVetoableChangeListeners + .get(propertyName); + if (listeners == null) { + return; } + notifyListeners(listeners.iterator(), event); } private static VetoableChangeListener[] getAsVetoableChangeListenerArray( Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/VetoableChangeSupportTest.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/VetoableChangeSupportTest.java?rev=396863&r1=396862&r2=396863&view=diff ============================================================================== --- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/VetoableChangeSupportTest.java (original) +++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/tests/api/java/beans/VetoableChangeSupportTest.java Tue Apr 25 05:32:38 2006 @@ -1510,6 +1510,24 @@ assertEquals(0, support.getVetoableChangeListeners().length); } + /* + * Regression test for HARMONY-321 + */ + public void testFireVetoableChange_regression() { + VetoableChangeSupport vcs = new VetoableChangeSupport(this); + MockVetoListener2 vlistener = new MockVetoListener2(); + + vcs.addVetoableChangeListener(vlistener); + try { + vcs.fireVetoableChange(vlistener.vetoedPropName, 0, 1); + fail("PropertyVetoException expected"); + } catch (PropertyVetoException ok) {} + + assertEquals(1, vlistener.event.getOldValue()); + assertEquals(0, vlistener.event.getNewValue()); + } + + /* * no this listener */ @@ -1747,5 +1765,26 @@ } } + + public static class MockVetoListener2 implements VetoableChangeListener { + + public PropertyChangeEvent event; + + public final String vetoedPropName = "prop"; + + public void vetoableChange(PropertyChangeEvent e) + throws PropertyVetoException { + + event = e; + String propName = e.getPropertyName(); + + if (propName.equals(vetoedPropName) + && e.getNewValue().equals(new Integer(1))) { + throw new PropertyVetoException( + propName + " change is vetoed!", e); + } + } + + } }