package org.robobinding.viewattribute.property;
import org.robobinding.BindingContext;
import org.robobinding.attribute.ValueModelAttribute;
import org.robobinding.property.PropertyChangeListener;
import org.robobinding.property.ValueModel;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Cheng Wei
*/
public class OneWayBindingProperty extends AbstractBindingProperty {
private final OneWayPropertyViewAttribute<Object, Object> viewAttribute;
@SuppressWarnings("unchecked")
public OneWayBindingProperty(Object view,
OneWayPropertyViewAttribute<?, ?> viewAttribute,
ValueModelAttribute attribute) {
super(view, attribute, isAlwaysPreInitializingView(viewAttribute));
this.viewAttribute = (OneWayPropertyViewAttribute<Object, Object>)viewAttribute;
}
@Override
public void performBind(BindingContext context) {
final ValueModel<Object> valueModel = getPropertyValueModel(context);
PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
@Override
public void propertyChanged() {
updateView(valueModel);
}
};
PropertyChangeListenerInUiThread inUiThread = new PropertyChangeListenerInUiThread(propertyChangeListener);
valueModel.addPropertyChangeListener(inUiThread);
}
@Override
public ValueModel<Object> getPropertyValueModel(BindingContext context) {
return context.getReadOnlyPropertyValueModel(attribute.getPropertyName());
}
@Override
protected void updateView(ValueModel<Object> valueModel) {
viewAttribute.updateView(view, valueModel.getValue());
}
}