/*
* Copyright 2004 - 2008 Christian Sprajc. All rights reserved.
*
* This file is part of PowerFolder.
*
* PowerFolder is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* PowerFolder is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PowerFolder. If not, see <http://www.gnu.org/licenses/>.
*
* $Id$
*/
package de.dal33t.powerfolder;
import de.dal33t.powerfolder.util.Reject;
import de.dal33t.powerfolder.util.logging.Loggable;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
/**
* Base class for all classes, which use the Controller (most classes in
* PowerFolder do).
*
* @see Controller
* @author <a href="mailto:totmacher@powerfolder.com">Christian Sprajc </a>
* @version $Revision: 1.13 $
*/
public abstract class PFComponent extends Loggable {
/** The controller instance this is linked to */
private Controller controller;
private PropertyChangeSupport changeSupport;
/**
* Constructor for Controller ONLY.
* <p>
* WARNING: Never us this contructor
*/
protected PFComponent() {
// controller not set
}
protected PFComponent(Controller controller) {
Reject.ifNull(controller, "Controller");
this.controller = controller;
}
/**
* Returns the controller where this componentent belongs to, gives acces to
* all PowerFolder core classes.
*
* @return the controller
*/
public Controller getController() {
return controller;
}
// Property change event codes ********************************************
/**
* Fires a property change event on a property
*
* @param propName
* @param oldValue
* @param newValue
*/
protected void firePropertyChange(String propName, Object oldValue,
Object newValue)
{
getPropertyChangeSupport().firePropertyChange(propName, oldValue,
newValue);
}
/**
* Fires a property change event on a property for <code>boolean</code>
*
* @param propName
* @param oldValue
* @param newValue
*/
protected void firePropertyChange(String propName, boolean oldValue,
boolean newValue)
{
getPropertyChangeSupport().firePropertyChange(propName, oldValue,
newValue);
}
/**
* Fires a property change event on a property for <code>int</code>
*
* @param propName
* @param oldValue
* @param newValue
*/
protected void firePropertyChange(String propName, int oldValue,
int newValue)
{
getPropertyChangeSupport().firePropertyChange(propName, oldValue,
newValue);
}
/**
* Adds a property change listener
*
* @param listener
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
getPropertyChangeSupport().addPropertyChangeListener(listener);
}
/**
* Adds a property change listener on a property
*
* @param propertyName
* @param listener
*/
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener)
{
getPropertyChangeSupport().addPropertyChangeListener(propertyName,
listener);
}
/**
* removes a property change listener
*
* @param listener
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
getPropertyChangeSupport().removePropertyChangeListener(listener);
}
// General listener code **************************************************
/**
* Method to remove all listeners from this instance. Overwrite if you have
* additional listers management
*/
protected void removeAllListeners() {
// Remove all property change listener
PropertyChangeListener[] listener = getPropertyChangeSupport()
.getPropertyChangeListeners();
for (int i = 0; i < listener.length; i++) {
removePropertyChangeListener(listener[i]);
}
}
private synchronized PropertyChangeSupport getPropertyChangeSupport() {
if (changeSupport == null) {
changeSupport = new PropertyChangeSupport(this);
}
return changeSupport;
}
}