in birt/src/main/java/org/apache/ofbiz/birt/webapp/view/BirtViewHandler.java [76:164]
public void render(String name, String page, String info,
String contentType, String encoding, HttpServletRequest request,
HttpServletResponse response) throws ViewHandlerException {
try {
IReportEngine engine = org.apache.ofbiz.birt.BirtFactory.getReportEngine();
// open report design
IReportRunnable design = null;
// add dynamic parameter for page
if (UtilValidate.isEmpty(page) || "ExecuteFlexibleReport".equals(page)) {
page = request.getParameter("rptDesignFile");
}
if (UtilValidate.isEmpty(page)) {
Locale locale = request.getLocale();
throw new ViewHandlerException(UtilProperties.getMessage(RES_ERROR, "BirtErrorNotPublishedReport", locale));
}
if (page.startsWith("component://")) {
InputStream reportInputStream = BirtFactory.getReportInputStreamFromLocation(page);
design = engine.openReportDesign(reportInputStream);
} else {
design = engine.openReportDesign(page);
}
Map<String, Object> appContext = UtilGenerics.cast(engine.getConfig().getAppContext());
BirtWorker.setWebContextObjects(appContext, request, response);
Map<String, Object> context = new HashMap<>();
// set parameters from request
Map<String, Object> parameters = UtilGenerics.cast(request.getAttribute(BirtWorker.getBirtParameters()));
if (parameters != null) {
context.put(BirtWorker.getBirtParameters(), parameters);
} else {
context.put(BirtWorker.getBirtParameters(), UtilHttp.getParameterMap(request));
}
// set locale from request
Locale locale = (Locale) request.getAttribute(BirtWorker.getBirtLocale());
if (locale == null) {
locale = UtilHttp.getLocale(request);
}
// set override content type
String overrideContentType = request.getParameter(BirtWorker.getBirtContentType());
if (UtilValidate.isNotEmpty(overrideContentType)) {
contentType = overrideContentType;
}
// set output file name to get also file extension
String outputFileName = request.getParameter(BirtWorker.getBirtOutputFileName());
if (UtilValidate.isNotEmpty(outputFileName)) {
outputFileName = BirtUtil.encodeReportName(outputFileName);
String format = BirtUtil.getMimeTypeFileExtension(contentType);
if (!outputFileName.endsWith(format)) {
outputFileName = outputFileName.concat(format);
}
outputFileName = UtilHttp.canonicalizeParameter(outputFileName);
response.setHeader("Content-Disposition", "attachment; filename=" + outputFileName);
}
// checking consistency between Birt content type and response content type
if (!contentType.equals(response.getContentType())) {
response.setContentType(contentType);
}
context.put(BirtWorker.getBirtLocale(), locale);
Delegator delegator = (Delegator) request.getAttribute("delegator");
String birtImageDirectory = EntityUtilProperties.getPropertyValue("birt", "birt.html.image.directory", delegator);
context.put(BirtWorker.getBirtImageDirectory(), birtImageDirectory);
BirtWorker.exportReport(design, context, contentType, response.getOutputStream());
} catch (BirtException e) {
throw new ViewHandlerException("Birt Error create engine: " + e.toString(), e);
} catch (IOException e) {
throw new ViewHandlerException("Error in the response writer/output stream: " + e.toString(), e);
} catch (SQLException e) {
throw new ViewHandlerException("get connection error: " + e.toString(), e);
} catch (GenericEntityException e) {
throw new ViewHandlerException("generic entity error: " + e.toString(), e);
} catch (GeneralException e) {
throw new ViewHandlerException("general error: " + e.toString(), e);
} catch (SAXException se) {
String errMsg = "Error SAX rendering " + page + " view handler: " + se.toString();
Debug.logError(se, errMsg, MODULE);
throw new ViewHandlerException(errMsg, se);
} catch (ParserConfigurationException pe) {
String errMsg = "Error parser rendering " + page + " view handler: " + pe.toString();
Debug.logError(pe, errMsg, MODULE);
throw new ViewHandlerException(errMsg, pe);
}
}