package fr.lteconsulting.hexa.databinding.propertyadapters;
import fr.lteconsulting.hexa.databinding.properties.Properties;
import fr.lteconsulting.hexa.databinding.properties.PropertyChangedEvent;
import fr.lteconsulting.hexa.databinding.properties.PropertyChangedHandler;
/**
* A PropertyAdapter that calls its onChange method when a property value changes
* in the currently bound object.
*
* @author Arnaud
*
*/
public abstract class ChangeDetector extends WriteOnlyPropertyAdapter
{
private Object reg;
abstract protected void onChange( Object object, String property );
@Override
public void setValue(Object object) {
if( reg != null )
{
Properties.removeHandler(reg);
reg = null;
}
if( object != null )
{
reg = Properties.register(object, "*", handler);
}
}
PropertyChangedHandler handler = new PropertyChangedHandler() {
@Override
public void onPropertyChanged(PropertyChangedEvent event) {
onChange(event.getSender(), event.getPropertyName());
}
};
}