package com.revolsys.properties;
import java.beans.PropertyChangeSupport;
import java.util.Map;
import com.revolsys.beans.KeyedPropertyChangeEvent;
import com.revolsys.beans.PropertyChangeSupportProxy;
import com.revolsys.datatype.DataType;
import com.revolsys.util.Property;
public class BaseObjectWithPropertiesAndChange extends BaseObjectWithProperties
implements PropertyChangeSupportProxy {
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public BaseObjectWithPropertiesAndChange() {
}
@Override
protected BaseObjectWithPropertiesAndChange clone() {
final BaseObjectWithPropertiesAndChange clone = (BaseObjectWithPropertiesAndChange)super.clone();
clone.propertyChangeSupport = new PropertyChangeSupport(clone);
return clone;
}
@Override
public <C> C getProperty(final String name) {
C value = Property.getSimple(this, name);
if (value == null) {
final Map<String, Object> properties = getProperties();
value = ObjectWithProperties.getProperty(this, properties, name);
}
return value;
}
@Override
public PropertyChangeSupport getPropertyChangeSupport() {
return this.propertyChangeSupport;
}
@Override
public void setProperty(final String name, final Object value) {
final Object oldValue = getProperty(name);
if (!DataType.equal(oldValue, value)) {
super.setProperty(name, value);
final Object newValue = getProperty(name);
final KeyedPropertyChangeEvent event = new KeyedPropertyChangeEvent(this, "property",
oldValue, newValue, name);
firePropertyChange(event);
}
}
}