1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.beans; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashMap; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Hashtable; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This utility class 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PropertyChangeSupport implements Serializable { 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 6401253773779951803l; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private transient Object sourceBean; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private transient List<PropertyChangeListener> allPropertiesChangeListeners = 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ArrayList<PropertyChangeListener>(); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private transient Map<String, List<PropertyChangeListener>> 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners = 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new HashMap<String, List<PropertyChangeListener>>(); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // fields for serialization compatibility 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Hashtable<String, List<PropertyChangeListener>> children; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object source; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private int propertyChangeSupportSerializedDataVersion = 1; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a new instance that uses the source bean as source for any event. 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param sourceBean 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the bean used as source for all events. 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PropertyChangeSupport(Object sourceBean) { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sourceBean == null) { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.sourceBean = sourceBean; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a {@link PropertyChangeEvent} with the given name, old value and 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * new value. As source the bean used to initialize this instance is used. 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the old value and the new value are not null and equal the event will 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not be fired. 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value of the property 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value of the property 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void firePropertyChange(String propertyName, Object oldValue, 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object newValue) { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeEvent event = createPropertyChangeEvent(propertyName, 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oldValue, newValue); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project doFirePropertyChange(event); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires an {@link IndexedPropertyChangeEvent} with the given name, old 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * value, new value and index. As source the bean used to initialize this 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instance is used. If the old value and the new value are not null and 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * equal the event will not be fired. 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value of the property 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value of the property 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void fireIndexedPropertyChange(String propertyName, int index, 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object oldValue, Object newValue) { 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // nulls and equals check done in doFire... 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project doFirePropertyChange(new IndexedPropertyChangeEvent(sourceBean, 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propertyName, oldValue, newValue, index)); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes the listener from the specific property. This only happens if it 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * was registered to this property. Nothing happens if it was not 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * registered with this property or if the property name or the listener is 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * null. 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the property name the listener is listening to 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param listener 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the listener to remove 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized void removePropertyChangeListener(String propertyName, 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener listener) { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((propertyName != null) && (listener != null)) { 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> listeners = 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.get(propertyName); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listeners != null) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listeners.remove(listener); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Adds a listener to a specific property. Nothing happens if the property 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * name or the listener is null. 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param listener 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the listener to register for the property with the given name 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized void addPropertyChangeListener(String propertyName, 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener listener) { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((listener != null) && (propertyName != null)) { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> listeners = 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.get(propertyName); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listeners == null) { 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listeners = new ArrayList<PropertyChangeListener>(); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.put(propertyName, listeners); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // RI compatibility 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listener instanceof PropertyChangeListenerProxy) { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListenerProxy proxy = 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (PropertyChangeListenerProxy) listener; 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listeners.add(new PropertyChangeListenerProxy( 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project proxy.getPropertyName(), 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (PropertyChangeListener) proxy.getListener())); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listeners.add(listener); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns an array of listeners that registered to the property with the 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given name. If the property name is null an empty array is returned. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property whose listeners should be returned 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the array of listeners to the property with the given name. 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized PropertyChangeListener[] getPropertyChangeListeners( 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String propertyName) { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> listeners = null; 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (propertyName != null) { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listeners = selectedPropertiesChangeListeners.get(propertyName); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (listeners == null) ? new PropertyChangeListener[] {} 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : listeners.toArray( 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PropertyChangeListener[listeners.size()]); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a property change of a boolean property with the given name. If the 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * old value and the new value are not null and equal the event will not be 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fired. 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the property name 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void firePropertyChange(String propertyName, boolean oldValue, 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean newValue) { 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeEvent event = createPropertyChangeEvent(propertyName, 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oldValue, newValue); 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project doFirePropertyChange(event); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a property change of a boolean property with the given name. If the 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * old value and the new value are not null and equal the event will not be 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * fired. 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the property name 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the changed property 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void fireIndexedPropertyChange(String propertyName, int index, 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean oldValue, boolean newValue) { 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (oldValue != newValue) { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fireIndexedPropertyChange(propertyName, index, Boolean 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .valueOf(oldValue), Boolean.valueOf(newValue)); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a property change of an integer property with the given name. If 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value and the new value are not null and equal the event will not 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be fired. 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the property name 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void firePropertyChange(String propertyName, int oldValue, 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int newValue) { 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeEvent event = createPropertyChangeEvent(propertyName, 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oldValue, newValue); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project doFirePropertyChange(event); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a property change of an integer property with the given name. If 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value and the new value are not null and equal the event will not 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be fired. 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the property name 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the changed property 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oldValue 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the old value 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param newValue 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the new value 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void fireIndexedPropertyChange(String propertyName, int index, 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int oldValue, int newValue) { 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (oldValue != newValue) { 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fireIndexedPropertyChange(propertyName, index, 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Integer(oldValue), new Integer(newValue)); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns true if there are listeners registered to the property with the 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * given name. 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param propertyName 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the name of the property 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return true if there are listeners registered to that property, false 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized boolean hasListeners(String propertyName) { 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean result = allPropertiesChangeListeners.size() > 0; 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!result && (propertyName != null)) { 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> listeners = 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.get(propertyName); 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listeners != null) { 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = listeners.size() > 0; 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * removes a property change listener that was registered to all properties. 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param listener 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the listener to remove 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized void removePropertyChangeListener( 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener listener) { 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listener != null) { 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listener instanceof PropertyChangeListenerProxy) { 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String name = ((PropertyChangeListenerProxy) listener) 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getPropertyName(); 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener lst = (PropertyChangeListener) 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((PropertyChangeListenerProxy) listener).getListener(); 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project removePropertyChangeListener(name, lst); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allPropertiesChangeListeners.remove(listener); 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Registers a listener with all properties. 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param listener 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the listener to register 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized void addPropertyChangeListener( 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener listener) { 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listener != null) { 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listener instanceof PropertyChangeListenerProxy) { 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String name = ((PropertyChangeListenerProxy) listener) 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getPropertyName(); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener lst = (PropertyChangeListener) 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((PropertyChangeListenerProxy) listener).getListener(); 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addPropertyChangeListener(name, lst); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allPropertiesChangeListeners.add(listener); 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns an array with the listeners that registered to all properties. 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the array of listeners 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public synchronized PropertyChangeListener[] getPropertyChangeListeners() { 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayList<PropertyChangeListener> result = 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ArrayList<PropertyChangeListener>( 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allPropertiesChangeListeners); 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (String propertyName : selectedPropertiesChangeListeners.keySet()) { 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> selectedListeners = 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.get(propertyName); 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (selectedListeners != null) { 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (PropertyChangeListener listener : selectedListeners) { 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(new PropertyChangeListenerProxy(propertyName, 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listener)); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(new PropertyChangeListener[result.size()]); 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream oos) throws IOException { 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> allSerializedPropertiesChangeListeners = 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new ArrayList<PropertyChangeListener>(); 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (PropertyChangeListener pcl : allPropertiesChangeListeners) { 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (pcl instanceof Serializable) { 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allSerializedPropertiesChangeListeners.add(pcl); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map<String, List<PropertyChangeListener>> 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedSerializedPropertiesChangeListeners = 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new HashMap<String, List<PropertyChangeListener>>(); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (String propertyName : selectedPropertiesChangeListeners.keySet()) { 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> keyValues = 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners.get(propertyName); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (keyValues != null) { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> serializedPropertiesChangeListeners 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project = new ArrayList<PropertyChangeListener>(); 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (PropertyChangeListener pcl : keyValues) { 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (pcl instanceof Serializable) { 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project serializedPropertiesChangeListeners.add(pcl); 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!serializedPropertiesChangeListeners.isEmpty()) { 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedSerializedPropertiesChangeListeners.put( 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propertyName, serializedPropertiesChangeListeners); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project children = new Hashtable<String, List<PropertyChangeListener>>( 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedSerializedPropertiesChangeListeners); 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project children.put("", allSerializedPropertiesChangeListeners); //$NON-NLS-1$ 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(children); 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object source = null; 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sourceBean instanceof Serializable) { 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project source = sourceBean; 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(source); 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeInt(propertyChangeSupportSerializedDataVersion); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void readObject(ObjectInputStream ois) throws IOException, 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ClassNotFoundException { 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project children = (Hashtable<String, List<PropertyChangeListener>>) ois 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .readObject(); 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project selectedPropertiesChangeListeners = new HashMap<String, List<PropertyChangeListener>>( 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project children); 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allPropertiesChangeListeners = selectedPropertiesChangeListeners 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .remove(""); //$NON-NLS-1$ 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (allPropertiesChangeListeners == null) { 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project allPropertiesChangeListeners = new ArrayList<PropertyChangeListener>(); 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sourceBean = ois.readObject(); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propertyChangeSupportSerializedDataVersion = ois.readInt(); 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Fires a property change event to all listeners of that property. 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param event 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the event to fire 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void firePropertyChange(PropertyChangeEvent event) { 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project doFirePropertyChange(event); 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PropertyChangeEvent createPropertyChangeEvent(String propertyName, 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object oldValue, Object newValue) { 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new PropertyChangeEvent(sourceBean, propertyName, oldValue, 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newValue); 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PropertyChangeEvent createPropertyChangeEvent(String propertyName, 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean oldValue, boolean newValue) { 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new PropertyChangeEvent(sourceBean, propertyName, oldValue, 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newValue); 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PropertyChangeEvent createPropertyChangeEvent(String propertyName, 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int oldValue, int newValue) { 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new PropertyChangeEvent(sourceBean, propertyName, oldValue, 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newValue); 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void doFirePropertyChange(PropertyChangeEvent event) { 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String propertyName = event.getPropertyName(); 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object oldValue = event.getOldValue(); 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object newValue = event.getNewValue(); 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((newValue != null) && (oldValue != null) 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && newValue.equals(oldValue)) { 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copy the listeners collections so they can be modified while we fire 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * events. 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Listeners to all property change events 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener[] listensToAll; 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Listens to a given property change 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PropertyChangeListener[] listensToOne = null; 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (this) { 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listensToAll = allPropertiesChangeListeners 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .toArray(new PropertyChangeListener[allPropertiesChangeListeners 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .size()]); 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<PropertyChangeListener> listeners = selectedPropertiesChangeListeners 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .get(propertyName); 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listeners != null) { 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listensToOne = listeners 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .toArray(new PropertyChangeListener[listeners.size()]); 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Fire the listeners 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (PropertyChangeListener listener : listensToAll) { 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listener.propertyChange(event); 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (listensToOne != null) { 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (PropertyChangeListener listener : listensToOne) { 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project listener.propertyChange(event); 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 502