package org.drugis.common.validation; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import com.jgoodies.binding.value.AbstractValueModel; import com.jgoodies.binding.value.ValueModel; public abstract class AbstractBooleanModel extends AbstractValueModel { private static final long serialVersionUID = -9103843138797710602L; protected Boolean d_val = null; protected final List<ValueModel> d_models; private PropertyChangeListener d_listener; public AbstractBooleanModel(List<ValueModel> models) { d_models = new ArrayList<ValueModel>(models); d_listener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { update(); } }; for (ValueModel model : d_models) { model.addValueChangeListener(d_listener); } update(); } private void update() { Object oldVal = d_val; d_val = calc(); fireValueChange(oldVal, d_val); } public void add(ValueModel vm) { if (!d_models.contains(vm)) { d_models.add(vm); vm.addValueChangeListener(d_listener); update(); } } public void remove(ValueModel vm) { boolean removed = d_models.remove(vm); if (removed) { vm.removeValueChangeListener(d_listener); update(); } } public Boolean getValue() { return d_val; } public void setValue(Object value) { throw new UnsupportedOperationException(); } protected boolean isBoolean(ValueModel model) { return model.getValue() != null && model.getValue() instanceof Boolean; } abstract protected Boolean calc(); }