package edu.ualberta.med.biobank.common.wrappers.actions;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException;
import gov.nih.nci.system.query.hql.SearchHQLQuery;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
/**
* Extends {@code SearchHQLQuery} so it can use/ pass through the existing
* security features. Implements {@code BiobankSessionAction} so this class is
* executed as a different type of query.
*
* @author jferland
*
*/
public abstract class BiobankHQLAction extends SearchHQLQuery implements
BiobankSessionAction {
private static final long serialVersionUID = 1L;
public BiobankHQLAction(String hql, Object... parameters) {
super(hql, Arrays.asList(parameters));
}
@Override
public Object doAction(Session session) throws BiobankSessionException {
Query query = session.createQuery(getHqlString());
int i = 0;
for (Object param : getParameters()) {
query.setParameter(i, param);
i++;
}
List<?> results = query.list();
return doResults(results);
}
/**
* This method is called with the results of the HQL String with given
* parameters.
*
* @param results
* @return whatever you want.
* @throws BiobankSessionException
*/
public abstract Object doResults(List<?> results)
throws BiobankSessionException;
}