package edu.ualberta.med.biobank.common.action.patient;
import java.util.List;
import org.hibernate.Query;
import edu.ualberta.med.biobank.common.action.Action;
import edu.ualberta.med.biobank.common.action.ActionContext;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.model.CollectionEvent;
public class PatientNextVisitNumberAction implements
Action<PatientNextVisitNumberResult> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("nls")
private static final String NEXT_NUMBER_QRY =
"select coalesce(max(ce.visitNumber),0) from "
+ CollectionEvent.class.getName() + " ce where ce.patient.id=?";
private Integer patientId;
public PatientNextVisitNumberAction(Integer patientId) {
this.patientId = patientId;
}
@Override
public boolean isAllowed(ActionContext context) {
return true;
}
@Override
public PatientNextVisitNumberResult run(ActionContext context)
throws ActionException {
Query query = context.getSession().createQuery(NEXT_NUMBER_QRY);
query.setParameter(0, patientId);
@SuppressWarnings("unchecked")
List<Integer> rows = query.list();
Integer nextVisitNumber = null;
if (rows.size() == 0) {
nextVisitNumber = 1;
} else {
nextVisitNumber = rows.get(0) + 1;
}
return new PatientNextVisitNumberResult(nextVisitNumber);
}
}