You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ay...@apache.org on 2006/12/06 16:56:13 UTC

svn commit: r483130 - /harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java

Author: ayza
Date: Wed Dec  6 07:56:12 2006
New Revision: 483130

URL: http://svn.apache.org/viewvc?view=rev&rev=483130
Log:
Several fixes were applied to make Harmony implementation compatible with RI. Now we have only two test failures on Harmony for tests from PropertyChangeSupportTest.

Modified:
    harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java

Modified: harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java?view=diff&rev=483130&r1=483129&r2=483130
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java (original)
+++ harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PropertyChangeSupport.java Wed Dec  6 07:56:12 2006
@@ -34,9 +34,12 @@
 
     private transient Object sourceBean;
 
-    private transient List<PropertyChangeListener> allPropertiesChangeListeners = new ArrayList<PropertyChangeListener>();
+    private transient List<PropertyChangeListener> allPropertiesChangeListeners =
+            new ArrayList<PropertyChangeListener>();
 
-    private transient Map<String, List<PropertyChangeListener>> selectedPropertiesChangeListeners = new HashMap<String, List<PropertyChangeListener>>();
+    private transient Map<String, List<PropertyChangeListener>>
+            selectedPropertiesChangeListeners =
+            new HashMap<String, List<PropertyChangeListener>>();
 
     // fields for serialization compatibility
     private Hashtable<String, List<PropertyChangeListener>> children;
@@ -70,8 +73,8 @@
     public synchronized void removePropertyChangeListener(String propertyName,
             PropertyChangeListener listener) {
         if ((propertyName != null) && (listener != null)) {
-            List<PropertyChangeListener> listeners = selectedPropertiesChangeListeners
-                    .get(propertyName);
+            List<PropertyChangeListener> listeners =
+                    selectedPropertiesChangeListeners.get(propertyName);
 
             if (listeners != null) {
                 listeners.remove(listener);
@@ -82,15 +85,25 @@
     public synchronized void addPropertyChangeListener(String propertyName,
             PropertyChangeListener listener) {
         if ((listener != null) && (propertyName != null)) {
-            List<PropertyChangeListener> listeners = selectedPropertiesChangeListeners
-                    .get(propertyName);
+            List<PropertyChangeListener> listeners =
+                    selectedPropertiesChangeListeners.get(propertyName);
 
             if (listeners == null) {
                 listeners = new ArrayList<PropertyChangeListener>();
                 selectedPropertiesChangeListeners.put(propertyName, listeners);
             }
 
-            listeners.add(listener);
+            // RI compatibility
+            if (listener instanceof PropertyChangeListenerProxy) {
+                PropertyChangeListenerProxy proxy =
+                        (PropertyChangeListenerProxy) listener;
+
+                listeners.add(new PropertyChangeListenerProxy(
+                        proxy.getPropertyName(),
+                        (PropertyChangeListener) proxy.getListener()));
+            } else {
+                listeners.add(listener);
+            }
         }
     }
 
@@ -103,7 +116,8 @@
         }
 
         return (listeners == null) ? new PropertyChangeListener[] {}
-                : getAsPropertyChangeListenerArray(listeners);
+                : listeners.toArray(
+                        new PropertyChangeListener[listeners.size()]);
     }
 
     public void firePropertyChange(String propertyName, boolean oldValue,
@@ -141,8 +155,8 @@
     public synchronized boolean hasListeners(String propertyName) {
         boolean result = allPropertiesChangeListeners.size() > 0;
         if (!result && (propertyName != null)) {
-            List<PropertyChangeListener> listeners = selectedPropertiesChangeListeners
-                    .get(propertyName);
+            List<PropertyChangeListener> listeners =
+                    selectedPropertiesChangeListeners.get(propertyName);
             if (listeners != null) {
                 result = listeners.size() > 0;
             }
@@ -156,8 +170,8 @@
             if (listener instanceof PropertyChangeListenerProxy) {
                 String name = ((PropertyChangeListenerProxy) listener)
                         .getPropertyName();
-                PropertyChangeListener lst = (PropertyChangeListener) ((PropertyChangeListenerProxy) listener)
-                        .getListener();
+                PropertyChangeListener lst = (PropertyChangeListener)
+                        ((PropertyChangeListenerProxy) listener).getListener();
 
                 removePropertyChangeListener(name, lst);
             } else {
@@ -172,8 +186,8 @@
             if (listener instanceof PropertyChangeListenerProxy) {
                 String name = ((PropertyChangeListenerProxy) listener)
                         .getPropertyName();
-                PropertyChangeListener lst = (PropertyChangeListener) ((PropertyChangeListenerProxy) listener)
-                        .getListener();
+                PropertyChangeListener lst = (PropertyChangeListener)
+                        ((PropertyChangeListenerProxy) listener).getListener();
                 addPropertyChangeListener(name, lst);
             } else {
                 allPropertiesChangeListeners.add(listener);
@@ -182,55 +196,49 @@
     }
 
     public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
-        ArrayList<PropertyChangeListener> result = new ArrayList<PropertyChangeListener>(
-                allPropertiesChangeListeners);
-
-        Iterator<String> keysIterator = selectedPropertiesChangeListeners
-                .keySet().iterator();
-        while (keysIterator.hasNext()) {
-            String propertyName = keysIterator.next();
+        ArrayList<PropertyChangeListener> result =
+                new ArrayList<PropertyChangeListener>(
+                        allPropertiesChangeListeners);
+
+        for (String propertyName : selectedPropertiesChangeListeners.keySet()) {
+            List<PropertyChangeListener> selectedListeners =
+                    selectedPropertiesChangeListeners.get(propertyName);
 
-            List<PropertyChangeListener> selectedListeners = selectedPropertiesChangeListeners
-                    .get(propertyName);
             if (selectedListeners != null) {
 
-                Iterator<PropertyChangeListener> i = selectedListeners
-                        .iterator();
-                while (i.hasNext()) {
-                    PropertyChangeListener listener = i.next();
+                for (PropertyChangeListener listener : selectedListeners) {
                     result.add(new PropertyChangeListenerProxy(propertyName,
                             listener));
                 }
             }
         }
 
-        return getAsPropertyChangeListenerArray(result);
+        return result.toArray(new PropertyChangeListener[result.size()]);
     }
 
     private void writeObject(ObjectOutputStream oos) throws IOException {
-        List<PropertyChangeListener> allSerializedPropertiesChangeListeners = new ArrayList<PropertyChangeListener>();
-        Iterator<PropertyChangeListener> i = allPropertiesChangeListeners
-                .iterator();
-        while (i.hasNext()) {
-            PropertyChangeListener pcl = i.next();
+        List<PropertyChangeListener> allSerializedPropertiesChangeListeners =
+                new ArrayList<PropertyChangeListener>();
+
+        for (PropertyChangeListener pcl : allPropertiesChangeListeners) {
             if (pcl instanceof Serializable) {
                 allSerializedPropertiesChangeListeners.add(pcl);
             }
         }
 
-        Map<String, List<PropertyChangeListener>> selectedSerializedPropertiesChangeListeners = new HashMap<String, List<PropertyChangeListener>>();
-        Iterator<String> keyIterator = selectedPropertiesChangeListeners
-                .keySet().iterator();
-        while (keyIterator.hasNext()) {
-            String propertyName = keyIterator.next();
-            List<PropertyChangeListener> keyValues = selectedPropertiesChangeListeners
-                    .get(propertyName);
+        Map<String, List<PropertyChangeListener>>
+                selectedSerializedPropertiesChangeListeners =
+                        new HashMap<String, List<PropertyChangeListener>>();
+
+        for (String propertyName : selectedPropertiesChangeListeners.keySet()) {
+            List<PropertyChangeListener> keyValues =
+                    selectedPropertiesChangeListeners.get(propertyName);
+
             if (keyValues != null) {
-                List<PropertyChangeListener> serializedPropertiesChangeListeners = new ArrayList<PropertyChangeListener>();
+                List<PropertyChangeListener> serializedPropertiesChangeListeners
+                        = new ArrayList<PropertyChangeListener>();
 
-                Iterator<PropertyChangeListener> j = keyValues.iterator();
-                while (j.hasNext()) {
-                    PropertyChangeListener pcl = j.next();
+                for (PropertyChangeListener pcl : keyValues) {
                     if (pcl instanceof Serializable) {
                         serializedPropertiesChangeListeners.add(pcl);
                     }
@@ -287,14 +295,14 @@
 
     private PropertyChangeEvent createPropertyChangeEvent(String propertyName,
             boolean oldValue, boolean newValue) {
-        return new PropertyChangeEvent(sourceBean, propertyName, new Boolean(
-                oldValue), new Boolean(newValue));
+        return new PropertyChangeEvent(sourceBean, propertyName, oldValue,
+                newValue);
     }
 
     private PropertyChangeEvent createPropertyChangeEvent(String propertyName,
             int oldValue, int newValue) {
-        return new PropertyChangeEvent(sourceBean, propertyName, new Integer(
-                oldValue), new Integer(newValue));
+        return new PropertyChangeEvent(sourceBean, propertyName, oldValue,
+                newValue);
     }
 
     private void doFirePropertyChange(PropertyChangeEvent event) {
@@ -340,15 +348,4 @@
         }
     }
 
-    private static PropertyChangeListener[] getAsPropertyChangeListenerArray(
-            List<PropertyChangeListener> listeners) {
-        Object[] objects = listeners.toArray();
-        PropertyChangeListener[] arrayResult = new PropertyChangeListener[objects.length];
-
-        for (int i = 0; i < objects.length; ++i) {
-            arrayResult[i] = (PropertyChangeListener) objects[i];
-        }
-
-        return arrayResult;
-    }
 }