/**
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations under
* the License.
*
* The Original Code is OpenELIS code.
*
* Copyright (C) CIRG, University of Washington, Seattle WA. All Rights Reserved.
*
*/
package us.mn.state.health.lims.reports.action;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import us.mn.state.health.lims.common.action.BaseAction;
import us.mn.state.health.lims.common.action.BaseActionForm;
import us.mn.state.health.lims.common.log.LogEvent;
import us.mn.state.health.lims.common.services.ReportTrackingService;
import us.mn.state.health.lims.common.services.ReportTrackingService.ReportType;
import us.mn.state.health.lims.reports.action.implementation.IReportCreator;
import us.mn.state.health.lims.reports.action.implementation.ReportImplementationFactory;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
public class CommonReportPrintAction extends BaseAction {
private static String reportPath = null;
private static String imagesPath = null;
@SuppressWarnings("unchecked")
@Override
protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
BaseActionForm dynaForm = (BaseActionForm) form;
PropertyUtils.setProperty(dynaForm, "reportType", request.getParameter("type"));
IReportCreator reportCreator = ReportImplementationFactory.getReportCreator(request.getParameter("report"));
String forward = FWD_FAIL;
if (reportCreator != null) {
reportCreator.setRequestedReport(request.getParameter("report"));
reportCreator.initializeReport(dynaForm);
reportCreator.setReportPath(getReportPath());
HashMap<String, String> parameterMap = (HashMap<String, String>) reportCreator.getReportParameters();
parameterMap.put("SUBREPORT_DIR", getReportPath());
parameterMap.put("imagesPath", getImagesPath());
try {
response.setContentType(reportCreator.getContentType());
String responseHeaderName = reportCreator.getResponseHeaderName();
String responseHeaderContent = reportCreator.getResponseHeaderContent();
if( !GenericValidator.isBlankOrNull(responseHeaderName) && !GenericValidator.isBlankOrNull(responseHeaderContent) ){
response.setHeader(responseHeaderName, responseHeaderContent);
}
byte[] bytes = reportCreator.runReport();
response.setContentLength(bytes.length);
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.write(bytes, 0, bytes.length);
servletOutputStream.flush();
servletOutputStream.close();
} catch (Exception e) {
LogEvent.logErrorStack("CommonReportPrintAction", "performAction", e);
e.printStackTrace();
}
}
if("patient".equals(request.getParameter("type"))){
trackReports( reportCreator, request.getParameter("report"), ReportType.PATIENT);
}
return mapping.findForward(forward);
}
private void trackReports(IReportCreator reportCreator, String reportName, ReportType reportType) {
new ReportTrackingService().addReports(reportCreator.getReportedOrders(), reportType, reportName, currentUserId);
}
@Override
protected String getPageSubtitleKey() {
return "qaevent.add.title";
}
@Override
protected String getPageTitleKey() {
return "qaevent.add.title";
}
public String getReportPath() {
if (reportPath == null) {
reportPath = getServlet().getServletContext().getRealPath("") + "/WEB-INF/reports/";
}
return reportPath;
}
public String getImagesPath() {
if (imagesPath == null) {
imagesPath = getServlet().getServletContext().getRealPath("") + "/images/" ;
}
return imagesPath;
}
}