package edu.ualberta.med.biobank.common.action.study;
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.exception.ActionException;
import edu.ualberta.med.biobank.common.action.study.StudyGetAllAction.StudiesInfo;
import edu.ualberta.med.biobank.common.permission.study.StudyReadPermission;
import edu.ualberta.med.biobank.model.Study;
public class StudyGetAllAction implements Action<StudiesInfo> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("nls")
private static final String STUDY_INFO_HQL =
" FROM " + Study.class.getName();
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return new StudyReadPermission().isAllowed(context);
}
public static class StudiesInfo implements ActionResult {
private static final long serialVersionUID = 1L;
private final ArrayList<Study> studies;
public StudiesInfo(ArrayList<Study> studys) {
this.studies = studys;
}
public ArrayList<Study> getStudies() {
return studies;
}
}
@Override
public StudiesInfo run(ActionContext context) throws ActionException {
Query query = context.getSession().createQuery(STUDY_INFO_HQL);
@SuppressWarnings("unchecked")
List<Study> results = query.list();
ArrayList<Study> readableStudies = new ArrayList<Study>();
if (results != null) {
for (Study s : results)
if (new StudyReadPermission(s.getId()).isAllowed(context))
readableStudies.add(s);
}
return new StudiesInfo(readableStudies);
}
}