String bName = bProxy.getPropertyName(); b = bProxy.getListener(); if (aName == null) { if (!(a instanceof PropertyChangeListenerProxy)) { aName = aProxy.getPropertyName(); a = aProxy.getListener();
/** * Subscribes {@code listener} to change notifications for the property * named {@code propertyName}. If the listener is already subscribed, it * will receive an additional notification when the property changes. If the * property name or listener is null, this method silently does nothing. */ public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { if (listener != null && propertyName != null) { listeners.add(new PropertyChangeListenerProxy(propertyName, listener)); } }
/** * Returns the subscribers to be notified when {@code propertyName} changes. * This includes both listeners subscribed to all property changes and * listeners subscribed to the named property only. */ public PropertyChangeListener[] getPropertyChangeListeners(String propertyName) { List<PropertyChangeListener> result = new ArrayList<PropertyChangeListener>(); for (PropertyChangeListener p : listeners) { if (p instanceof PropertyChangeListenerProxy && Objects.equal( propertyName, ((PropertyChangeListenerProxy) p).getPropertyName())) { result.add(p); } } return result.toArray(new PropertyChangeListener[result.size()]); }
public void propertyChange(PropertyChangeEvent event) { PropertyChangeListener listener = (PropertyChangeListener) getListener(); listener.propertyChange(event); } }
/** * Returns true if there are listeners registered to the property with the * given name. * * @param propertyName * the name of the property * @return true if there are listeners registered to that property, false * otherwise. */ public boolean hasListeners(String propertyName) { for (PropertyChangeListener p : listeners) { if (!(p instanceof PropertyChangeListenerProxy) || Objects.equal( propertyName, ((PropertyChangeListenerProxy) p).getPropertyName())) { return true; } } return false; }
public void propertyChange(PropertyChangeEvent event) { PropertyChangeListener listener = (PropertyChangeListener) getListener(); listener.propertyChange(event); } }
/** * Publishes a property change event to all listeners of that property. If * the event's old and new values are equal (but non-null), no event will be * published. */ public void firePropertyChange(PropertyChangeEvent event) { String propertyName = event.getPropertyName(); Object oldValue = event.getOldValue(); Object newValue = event.getNewValue(); if (newValue != null && oldValue != null && newValue.equals(oldValue)) { return; } notifyEachListener: for (PropertyChangeListener p : listeners) { // unwrap listener proxies until we get a mismatched name or the real listener while (p instanceof PropertyChangeListenerProxy) { PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) p; if (!Objects.equal(proxy.getPropertyName(), propertyName)) { continue notifyEachListener; } p = (PropertyChangeListener) proxy.getListener(); } p.propertyChange(event); } } }
public boolean hasListeners(String propertyName) { for (PropertyChangeListener p : listeners) { if (!(p instanceof PropertyChangeListenerProxy) || Objects.equals( propertyName, ((PropertyChangeListenerProxy) p).getPropertyName())) { return true; } } return false; }
public void propertyChange(PropertyChangeEvent event) { PropertyChangeListener listener = (PropertyChangeListener) getListener(); listener.propertyChange(event); } }
@SuppressWarnings("unchecked") private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { ObjectInputStream.GetField readFields = in.readFields(); sourceBean = readFields.get("source", null); listeners = new CopyOnWriteArrayList<PropertyChangeListener>(); Map<String, PropertyChangeSupport> children = (Map<String, PropertyChangeSupport>) readFields.get("children", null); if (children != null) { for (Map.Entry<String, PropertyChangeSupport> entry : children.entrySet()) { for (PropertyChangeListener p : entry.getValue().listeners) { listeners.add(new PropertyChangeListenerProxy(entry.getKey(), p)); } } } PropertyChangeListener listener; while ((listener = (PropertyChangeListener) in.readObject()) != null) { listeners.add(listener); } }
if (p instanceof PropertyChangeListenerProxy && !(p instanceof Serializable)) { PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) p; PropertyChangeListener listener = (PropertyChangeListener) proxy.getListener(); if (listener instanceof Serializable) { PropertyChangeSupport list = map.get(proxy.getPropertyName()); if (list == null) { list = new PropertyChangeSupport(sourceBean); map.put(proxy.getPropertyName(), list);
public PropertyChangeListener[] getPropertyChangeListeners(String propertyName) { List<PropertyChangeListener> result = new ArrayList<PropertyChangeListener>(); for (PropertyChangeListener p : listeners) { if (p instanceof PropertyChangeListenerProxy && Objects.equals( propertyName, ((PropertyChangeListenerProxy) p).getPropertyName())) { result.add(p); } } return result.toArray(new PropertyChangeListener[result.size()]); }
/** * Forwards the property change event to the listener delegate. * * @param event the property change event */ public void propertyChange(PropertyChangeEvent event) { getListener().propertyChange(event); }
/** * Creates a {@link PropertyChangeListenerProxy PropertyChangeListenerProxy} * object for the specified property. * * @param name the name of the property to listen on * @param listener the listener to process events * @return a {@code PropertyChangeListenerProxy} object */ @Override protected PropertyChangeListener newProxy(String name, PropertyChangeListener listener) { return new PropertyChangeListenerProxy(name, listener); } }
private boolean equals(String aName, EventListener a, EventListener b) { while (b instanceof PropertyChangeListenerProxy) { PropertyChangeListenerProxy bProxy = (PropertyChangeListenerProxy) b; // unwrap b String bName = bProxy.getPropertyName(); b = bProxy.getListener(); if (aName == null) { if (!(a instanceof PropertyChangeListenerProxy)) return false; PropertyChangeListenerProxy aProxy = (PropertyChangeListenerProxy) a; // unwrap a aName = aProxy.getPropertyName(); a = aProxy.getListener(); } if (!Objects.equals(aName, bName)) return false; // not equal; a and b subscribe to different properties aName = null; } return aName == null && Objects.equals(a, b); }
private void connectAllTo(PROPERTY_TYPE tgt) { for(PropertyChangeListener l:targetPCS.getPropertyChangeListeners()){ if(l instanceof PropertyChangeListenerProxy){ final PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy)l; try{tgt.getClass().getMethod("addPropertyChangeListener", String.class,PropertyChangeListener.class).invoke(tgt, proxy.getPropertyName(), proxy);} catch(Exception e){e.printStackTrace();}} else{try{tgt.getClass().getMethod("addPropertyChangeListener", PropertyChangeListener.class).invoke(tgt, l);} catch(Exception e){e.printStackTrace();}} }//end for(listener) } private void disconnectAllFrom(PROPERTY_TYPE tgt) {
public void propertyChange(PropertyChangeEvent event) { PropertyChangeListener listener = (PropertyChangeListener) getListener(); listener.propertyChange(event); } }
/** * Creates a {@link PropertyChangeListenerProxy PropertyChangeListenerProxy} * object for the specified property. * * @param name the name of the property to listen on * @param listener the listener to process events * @return a {@code PropertyChangeListenerProxy} object */ @Override protected PropertyChangeListener newProxy(String name, PropertyChangeListener listener) { return new PropertyChangeListenerProxy(name, listener); } }
public void firePropertyChange(PropertyChangeEvent event) { String propertyName = event.getPropertyName(); Object oldValue = event.getOldValue(); Object newValue = event.getNewValue(); if (newValue != null && oldValue != null && newValue.equals(oldValue)) return; notifyEachListener: for (PropertyChangeListener p : listeners) { // unwrap listener proxies until we get a mismatched name or the real listener while (p instanceof PropertyChangeListenerProxy) { PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) p; if (!Objects.equals(proxy.getPropertyName(), propertyName)) continue notifyEachListener; p = (PropertyChangeListener) proxy.getListener(); } p.propertyChange(event); } } }
/** * Returns the subscribers to be notified when {@code propertyName} changes. * This includes both listeners subscribed to all property changes and * listeners subscribed to the named property only. */ public PropertyChangeListener[] getPropertyChangeListeners(String propertyName) { List<PropertyChangeListener> result = new ArrayList<PropertyChangeListener>(); for (PropertyChangeListener p : listeners) { if (p instanceof PropertyChangeListenerProxy && Objects.equal( propertyName, ((PropertyChangeListenerProxy) p).getPropertyName())) { result.add(p); } } return result.toArray(new PropertyChangeListener[result.size()]); }