package org.tessell.util;
import org.tessell.model.Model;
import org.tessell.model.events.ValueAddedEvent;
import org.tessell.model.events.ValueAddedHandler;
import org.tessell.model.events.ValueRemovedEvent;
import org.tessell.model.events.ValueRemovedHandler;
import org.tessell.model.properties.BasicProperty;
import org.tessell.model.properties.ListProperty;
import org.tessell.model.properties.Property;
import org.tessell.model.properties.PropertyGroup;
import org.tessell.model.values.DerivedValue;
public class PropertyUtils {
/** @return a property that will use {@code defaultValue} if {@code original} is {@code null} */
public static <T> Property<T> defaultValue(final Property<T> original, final T defaultValue) {
return original.addDerived(new BasicProperty<T>(new DerivedValue<T>() {
public T get() {
return ObjectUtils.defaultValue(original.get(), defaultValue);
}
}));
}
/** Adds/removes the model's {@code allValid} property in {@code models} to/from {@code all}. */
public static <M extends Model> void syncModelsToGroup(final PropertyGroup all, final ListProperty<M> models) {
models.addValueAddedHandler(new ValueAddedHandler<M>() {
public void onValueAdded(ValueAddedEvent<M> event) {
all.add(event.getValue().allValid());
}
});
models.addValueRemovedHandler(new ValueRemovedHandler<M>() {
public void onValueRemoved(ValueRemovedEvent<M> event) {
all.remove(event.getValue().allValid());
}
});
if (models.get() != null) {
for (M model : models.get()) {
all.add(model.allValid());
}
}
}
}