package edu.ualberta.med.biobank.common.wrappers.checks;
import java.text.MessageFormat;
import org.hibernate.Session;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.Property;
import edu.ualberta.med.biobank.common.wrappers.actions.UncachedAction;
import edu.ualberta.med.biobank.common.wrappers.property.GetterInterceptor;
import edu.ualberta.med.biobank.common.wrappers.property.LazyLoaderInterceptor;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.NullPropertyException;
/**
* Check that a {@link Property} of the {@link ModelWrapper}'s wrapped object is
* not null.
*
* @author jferland
*
* @param <E>
*/
public class NotNullPreCheck<E> extends UncachedAction<E> {
private static final long serialVersionUID = 1L;
private static final String EXCEPTION_STRING = Messages.getString("NotNullPreCheck.exception.string"); //$NON-NLS-1$
private final Property<?, ? super E> property;
private final String modelString;
/**
*
* @param wrapper
* @param property
*/
public NotNullPreCheck(ModelWrapper<E> wrapper,
Property<?, ? super E> property) {
super(wrapper);
this.property = property;
this.modelString = wrapper.toString();
}
@Override
public void doUncachedAction(Session session) throws BiobankSessionException {
E model = getModel();
GetterInterceptor lazyLoad = new LazyLoaderInterceptor(session, 1);
Object value = property.get(model, lazyLoad);
if (value == null) {
String propertyName = Format.propertyName(property);
String modelClass = Format.modelClass(getModelClass());
String msg = MessageFormat.format(EXCEPTION_STRING, propertyName,
modelClass, modelString);
throw new NullPropertyException(msg);
}
}
}