package com.dubture.getcomposer.core.entities;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class Entity {
protected transient PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
/**
* Adds a listener to be notified when a property changes
*
* @param listener
*/
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
/**
* Removes a listener that no longer receives notification about property changes
*
* @param listener
*/
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
/**
* Adds a listener to be notified when the passed property changes
*
* @param propertyName the property upon which the listener will be notified
* @param listener
*/
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(propertyName, listener);
}
/**
* Removes a listener that no longer receives notification about changes from
* the passed property
*
* @param propertyName the property upon which the listener has been notified
* @param listener
*/
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(propertyName, listener);
}
/**
* Notify listeners that a property has changed its value
*
* @param propertyName
* @param oldValue
* @param newValue
*/
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
if (oldValue instanceof JsonValue) {
oldValue = getRawObject((JsonValue)oldValue);
}
if (newValue instanceof JsonValue) {
newValue = getRawObject((JsonValue)newValue);
}
changeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
private Object getRawObject(JsonValue value) {
if (value.isArray()) {
return value.getAsArray();
} else if (value.isObject()) {
return value.getAsObject();
} else if (value.isNumber()) {
return value.getAsNumber();
} else if (value.isBoolean()) {
return value.getAsBoolean();
} else {
return value.getAsString();
}
}
}