package jadex.commons;
import java.beans.PropertyChangeListener;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
/**
* Basic IPropertyObject implementation.
*/
public class SimplePropertyObject implements IPropertyObject
{
//-------- attributes --------
/** The properties */
protected Map properties;
/** The property change support. */
protected SimplePropertyChangeSupport pcs;
//-------- constructors --------
/**
* Create a new property object.
*/
public SimplePropertyObject()
{
}
//-------- methods --------
/**
* Returns a property.
* @param name name of the property
* @return the property
*/
public Object getProperty(String name)
{
return properties==null? null: properties.get(name);
}
/**
* Returns all of the properties.
* @return the properties
*/
public Set getPropertyNames()
{
return properties==null? Collections.EMPTY_SET: properties.keySet();
}
/**
* Sets a property
* @param name name of the property
* @param value value of the property
*/
public void setProperty(String name, Object value)
{
if(properties==null)
properties = new LinkedHashMap(); // preserve order for EIS :-( parameters
Object oldval = properties.get(name);
properties.put(name, value);
if(pcs!=null)
pcs.firePropertyChange(name, oldval, value);
}
/*
* (non-Javadoc)
* @see jadex.commons.IPropertyObject#hasProperty(java.lang.String)
*/
public boolean hasProperty(String name) {
return properties != null && properties.containsKey(name);
}
//-------- bean accessors --------
/**
* Get the properties (bean accessor).
*/
public Map getProperties()
{
return this.properties;
}
/**
* Set the properties (bean accessor).
*/
public void setProperties(Map properties)
{
this.properties = properties;
}
//-------- property methods --------
/**
* Add a PropertyChangeListener to the listener list.
* The listener is registered for all properties.
* @param listener The PropertyChangeListener to be added.
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
if(pcs==null)
this.pcs = new SimplePropertyChangeSupport(this);
pcs.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
* @param listener The PropertyChangeListener to be removed.
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
if(pcs!=null)
pcs.removePropertyChangeListener(listener);
}
}