package edu.ualberta.med.biobank.common.action.site;
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.ListResult;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.permission.site.SiteReadPermission;
import edu.ualberta.med.biobank.model.Site;
public class SiteGetAllAction implements Action<ListResult<Site>> {
private static final String ALL_SITES = "from "
+ Site.class.getName();
private static final long serialVersionUID = 1L;
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
// any user can call this, but will only receive permitted results
return true;
}
@SuppressWarnings("unchecked")
@Override
public ListResult<Site> run(ActionContext context) throws ActionException {
Query q = context.getSession().createQuery(ALL_SITES);
List<Site> sites = q.list();
List<Site> readableSites = new ArrayList<Site>();
for (Site site : sites)
if (new SiteReadPermission(site).isAllowed(context))
readableSites.add(site);
return new ListResult<Site>(readableSites);
}
}