package edu.ualberta.med.biobank.common.action.clinic;
import java.util.ArrayList;
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.ActionResult;
import edu.ualberta.med.biobank.common.action.clinic.ClinicGetAllAction.ClinicsInfo;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.permission.clinic.ClinicReadPermission;
import edu.ualberta.med.biobank.model.Clinic;
/**
* This action is meant to be used to get a quick listing of all the clinics
* configured for a server. In version 3.2.0 it is used in the administration
* tree where each node under the "All Clinics" node is a clinic.
*/
public class ClinicGetAllAction implements Action<ClinicsInfo> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("nls")
private static final String CLINIC_INFO_HQL =
" FROM " + Clinic.class.getName();
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return new ClinicReadPermission().isAllowed(context);
}
public static class ClinicsInfo implements ActionResult {
private static final long serialVersionUID = 1L;
private final ArrayList<Clinic> clinics;
public ClinicsInfo(ArrayList<Clinic> clinics) {
this.clinics = clinics;
}
public ArrayList<Clinic> getClinics() {
return clinics;
}
}
@Override
public ClinicsInfo run(ActionContext context) throws ActionException {
Query query = context.getSession().createQuery(CLINIC_INFO_HQL);
@SuppressWarnings("unchecked")
List<Clinic> results = query.list();
ArrayList<Clinic> readableClinics = new ArrayList<Clinic>();
for (Clinic c : results)
if (new ClinicReadPermission(c).isAllowed(context))
readableClinics.add(c);
return new ClinicsInfo(readableClinics);
}
}