package org.tessell.model.dsl;
import org.tessell.model.properties.BooleanProperty;
import org.tessell.model.properties.ListProperty;
public class BooleanPropertyToListPropertyBinder<V> {
private final Binder b;
private final BooleanProperty p;
private final ListProperty<V> values;
public BooleanPropertyToListPropertyBinder(Binder b, BooleanProperty p, ListProperty<V> values) {
this.b = b;
this.p = p;
this.values = values;
}
public void has(final V value) {
b.add(p.addPropertyChangedHandler(e -> update(value)));
b.add(values.addPropertyChangedHandler(e -> {
p.set(e.getNewValue().contains(value));
}));
if (b.canSetInitialValue(p)) {
p.setInitialValue(values.get().contains(value));
} else {
update(value); // set initial
}
}
private void update(V value) {
if (p.isTrue() && !values.get().contains(value)) {
values.add(value);
} else if (!p.isTrue() && values.get().contains(value)) {
values.remove(value);
}
}
}