package fr.openwide.core.wicket.more.model;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import fr.openwide.core.commons.util.collections.PartitionDiscreteDomain;
public class ContiguousSetModel<C extends Comparable<?>> extends AbstractReadOnlyModel<ContiguousSet<C>> {
private static final long serialVersionUID = 6151543937199662328L;
public static <C extends Comparable<C>> ContiguousSetModel<C> create(
IModel<? extends Range<C>> rangeModel, DiscreteDomain<C> discreteDomain) {
return new ContiguousSetModel<>(rangeModel, discreteDomain);
}
private final IModel<? extends Range<C>> rangeModel;
private final DiscreteDomain<C> discreteDomain;
public ContiguousSetModel(IModel<? extends Range<C>> rangeModel, DiscreteDomain<C> discreteDomain) {
super();
this.rangeModel = rangeModel;
this.discreteDomain = discreteDomain;
}
@Override
public ContiguousSet<C> getObject() {
Range<C> range = rangeModel.getObject();
if (range == null) {
return null;
} else {
if (discreteDomain instanceof PartitionDiscreteDomain) {
range = ((PartitionDiscreteDomain<C>) discreteDomain).alignOut(range);
}
return ContiguousSet.create(range, discreteDomain);
}
}
}