package edu.ualberta.med.biobank.common.action.reports;
import java.lang.reflect.Constructor;
import edu.ualberta.med.biobank.common.action.Action;
import edu.ualberta.med.biobank.common.action.ActionContext;
import edu.ualberta.med.biobank.common.action.ProxiedListResult;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.permission.reports.ReportsPermission;
import edu.ualberta.med.biobank.common.reports.BiobankReport;
import edu.ualberta.med.biobank.server.reports.AbstractReport;
public class ReportAction implements Action<ProxiedListResult<Object>> {
/**
*
*/
private static final long serialVersionUID = 1L;
BiobankReport report;
public ReportAction(BiobankReport report) {
this.report = report;
}
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return new ReportsPermission().isAllowed(context);
}
@Override
public ProxiedListResult<Object> run(ActionContext context)
throws ActionException {
try {
Class<?> cls =
Class.forName("edu.ualberta.med.biobank.server.reports."
+ report.getClassName());
Class<?> partypes[] = new Class[] { BiobankReport.class };
Constructor<?> constructor = cls.getConstructor(partypes);
AbstractReport runReport =
(AbstractReport) constructor.newInstance(report);
return new ProxiedListResult<Object>(
runReport.generate(context
.getAppService()));
} catch (Exception e) {
throw new ActionException(e);
}
}
}