/** * Copyright (C) 2015 Valkyrie RCP * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.valkyriercp.core.support; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.ObjectUtils; import org.valkyriercp.core.PropertyChangePublisher; import java.beans.*; /** * Base implementation of the {@link PropertyChangePublisher} interface * providing basic listener support. */ public abstract class AbstractPropertyChangePublisher implements PropertyChangePublisher { protected final Log logger = LogFactory.getLog(getClass()); private transient PropertyChangeSupport changeSupport; private transient VetoableChangeSupport vetoSupport; public final void addPropertyChangeListener(PropertyChangeListener listener) { if (listener == null) { return; } if (changeSupport == null) { changeSupport = new PropertyChangeSupport(this); } changeSupport.addPropertyChangeListener(listener); } public final void removePropertyChangeListener(PropertyChangeListener listener) { if (listener == null || changeSupport == null) { return; } changeSupport.removePropertyChangeListener(listener); } public final void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { if (listener == null) { return; } if (changeSupport == null) { changeSupport = new PropertyChangeSupport(this); } changeSupport.addPropertyChangeListener(propertyName, listener); } public final void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { if (listener == null || changeSupport == null) { return; } changeSupport.removePropertyChangeListener(propertyName, listener); } public final void addVetoableChangeListener(VetoableChangeListener listener) { if (listener == null) { return; } if (vetoSupport == null) { vetoSupport = new VetoableChangeSupport(this); } vetoSupport.addVetoableChangeListener(listener); } public final void removeVetoableChangeListener(VetoableChangeListener listener) { if (listener == null || vetoSupport == null) { return; } vetoSupport.removeVetoableChangeListener(listener); } public final void addVetoableChangeListener(String propertyName, VetoableChangeListener listener) { if (listener == null) { return; } if (vetoSupport == null) { vetoSupport = new VetoableChangeSupport(this); } vetoSupport.addVetoableChangeListener(propertyName, listener); } public final void removeVetoableChangeListener(String propertyName, VetoableChangeListener listener) { if (listener == null || vetoSupport == null) { return; } vetoSupport.removeVetoableChangeListener(propertyName, listener); } public final PropertyChangeListener[] getPropertyChangeListeners() { if (changeSupport == null) { return new PropertyChangeListener[0]; } return changeSupport.getPropertyChangeListeners(); } public final PropertyChangeListener[] getPropertyChangeListeners(String propertyName) { if (changeSupport == null) { return new PropertyChangeListener[0]; } return changeSupport.getPropertyChangeListeners(propertyName); } public final VetoableChangeListener[] getVetoableChangeListeners() { if (vetoSupport == null) { return new VetoableChangeListener[0]; } return vetoSupport.getVetoableChangeListeners(); } public final VetoableChangeListener[] getVetoableChangeListeners(String propertyName) { if (vetoSupport == null) { return new VetoableChangeListener[0]; } return vetoSupport.getVetoableChangeListeners(propertyName); } protected final void firePropertyChange(String propertyName, Object oldValue, Object newValue) { PropertyChangeSupport aChangeSupport = this.changeSupport; if (aChangeSupport == null) { return; } aChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } protected final void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) { PropertyChangeSupport aChangeSupport = this.changeSupport; if (aChangeSupport == null) { return; } aChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } protected final void firePropertyChange(String propertyName, double oldValue, double newValue) { firePropertyChange(propertyName, new Double(oldValue), new Double(newValue)); } protected final void firePropertyChange(String propertyName, float oldValue, float newValue) { firePropertyChange(propertyName, new Float(oldValue), new Float(newValue)); } protected final void firePropertyChange(String propertyName, int oldValue, int newValue) { PropertyChangeSupport aChangeSupport = this.changeSupport; if (aChangeSupport == null) { return; } aChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } protected final void firePropertyChange(String propertyName, long oldValue, long newValue) { firePropertyChange(propertyName, new Long(oldValue), new Long(newValue)); } protected final void firePropertiesChanged() { firePropertyChange(null, null, null); } protected final void fireVetoableChange(String propertyName, Object oldValue, Object newValue) throws PropertyVetoException { VetoableChangeSupport aVetoSupport = this.vetoSupport; if (aVetoSupport == null) { return; } aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue); } protected final void fireVetoableChange(String propertyName, boolean oldValue, boolean newValue) throws PropertyVetoException { VetoableChangeSupport aVetoSupport = this.vetoSupport; if (aVetoSupport == null) { return; } aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue); } protected final void fireVetoableChange(String propertyName, double oldValue, double newValue) throws PropertyVetoException { fireVetoableChange(propertyName, new Double(oldValue), new Double(newValue)); } protected final void fireVetoableChange(String propertyName, int oldValue, int newValue) throws PropertyVetoException { VetoableChangeSupport aVetoSupport = this.vetoSupport; if (aVetoSupport == null) { return; } aVetoSupport.fireVetoableChange(propertyName, oldValue, newValue); } protected final void fireVetoableChange(String propertyName, float oldValue, float newValue) throws PropertyVetoException { fireVetoableChange(propertyName, new Float(oldValue), new Float(newValue)); } protected final void fireVetoableChange(String propertyName, long oldValue, long newValue) throws PropertyVetoException { fireVetoableChange(propertyName, new Long(oldValue), new Long(newValue)); } protected boolean hasChanged(Object currentValue, Object proposedValue) { return !ObjectUtils.nullSafeEquals(currentValue, proposedValue); } protected final boolean hasChanged(boolean currentValue, boolean proposedValue) { return currentValue != proposedValue; } protected final boolean hasChanged(int currentValue, int proposedValue) { return currentValue != proposedValue; } protected final boolean hasChanged(long currentValue, long proposedValue) { return currentValue != proposedValue; } protected final boolean hasChanged(float currentValue, float proposedValue) { return currentValue != proposedValue; } protected final boolean hasChanged(double currentValue, double proposedValue) { return currentValue != proposedValue; } }