package edu.ualberta.med.biobank.common.wrappers;
import java.util.ArrayList;
import java.util.Collection;
import edu.ualberta.med.biobank.common.wrappers.actions.BiobankSessionAction;
import edu.ualberta.med.biobank.common.wrappers.actions.IfAction;
import edu.ualberta.med.biobank.common.wrappers.actions.IfAction.Is;
import edu.ualberta.med.biobank.common.wrappers.checks.CollectionIsEmptyCheck;
import edu.ualberta.med.biobank.common.wrappers.checks.LegalOptionCheck;
import edu.ualberta.med.biobank.common.wrappers.checks.NotNullPreCheck;
import edu.ualberta.med.biobank.common.wrappers.checks.NotUsedCheck;
import edu.ualberta.med.biobank.common.wrappers.checks.UniquePreCheck;
import edu.ualberta.med.biobank.common.wrappers.tasks.PreQueryTask;
import edu.ualberta.med.biobank.common.wrappers.util.LazyMessage;
public class WrapperChecker<E> {
private final ModelWrapper<E> wrapper;
WrapperChecker(ModelWrapper<E> wrapper) {
this.wrapper = wrapper;
}
public UniquePreCheck<E> unique(Property<?, ? super E> property) {
Collection<Property<?, ? super E>> properties = new ArrayList<Property<?, ? super E>>();
properties.add(property);
return new UniquePreCheck<E>(wrapper, properties);
}
public UniquePreCheck<E> unique(
Collection<Property<?, ? super E>> properties) {
// make our own copy that is not exposed
properties = new ArrayList<Property<?, ? super E>>(properties);
return new UniquePreCheck<E>(wrapper, properties);
}
public NotNullPreCheck<E> notNull(Property<?, ? super E> property) {
// TODO: check on the client and on the server?
return new NotNullPreCheck<E>(wrapper, property);
}
public CollectionIsEmptyCheck<E> empty(
Property<? extends Collection<?>, ? super E> property) {
return new CollectionIsEmptyCheck<E>(wrapper, property, null);
}
public CollectionIsEmptyCheck<E> empty(
Property<? extends Collection<?>, ? super E> property,
String exceptionMessage) {
return new CollectionIsEmptyCheck<E>(wrapper, property,
exceptionMessage);
}
public <T> LegalOptionCheck<E> legalOption(
Property<? extends Collection<? extends T>, ? super E> legalOptions,
Property<? extends T, ? super E> selectedOption,
LazyMessage exceptionMessage) {
return new LegalOptionCheck<E>(wrapper, legalOptions, selectedOption,
exceptionMessage);
}
public <T> NotUsedCheck<E> notUsedBy(Class<T> propertyClass,
Property<? super E, ? super T> property) {
return new NotUsedCheck<E>(wrapper, property, propertyClass, null);
}
public <T> NotUsedCheck<E> notUsedBy(Class<T> propertyClass,
Property<? super E, ? super T> property, String exceptionMessage) {
return new NotUsedCheck<E>(wrapper, property, propertyClass,
exceptionMessage);
}
public <T> IfAction<E> ifProperty(Property<?, ? super E> property, Is is,
BiobankSessionAction action) {
return new IfAction<E>(wrapper, property, is, action);
}
public PreQueryTask stringLengths() {
return new CheckStringLengthsPreQueryTask<E>(wrapper);
}
}