package com.ynet.life.controller;
import com.ynet.gene.core.Context;
import com.ynet.gene.core.GENEConstance;
import com.ynet.gene.session.InvalidSessionException;
import com.ynet.gene.session.Session;
import com.ynet.gene.web.servlet.ModelAndView;
import com.ynet.gene.web.servlet.mvc.BizLogicException;
import com.ynet.gene.web.servlet.mvc.GENEFlowExecuteResult;
import com.ynet.gene.web.servlet.mvc.InvalidInputException;
import com.ynet.life.base.LifeConstants;
import com.ynet.life.base.LifeStandard;
import com.ynet.life.base.Trace;
import com.ynet.life.exception.TranFailException;
import com.ynet.life.format.LifeStringFilter;
import com.ynet.life.util.BirtEngine;
import com.ynet.util.algorithm.RandomStringUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.model.api.ScalarParameterHandle;
/* loaded from: com_ynet_life_controller.jar:com/ynet/life/controller/LifeReportRequestController.class */
public class LifeReportRequestController extends LifeRequestController {
private static final String HTML_CHAR_ENCODE = "";
private static final String HTML_STYLE = "";
private static final String HTML_SCRIPT = "";
private static final String HTML_TABLE_HEAD = "
";
private static final String HTML_PARAMETER_HEAD = "";
private static final String HTML_PARAMETER_TAIL = "
";
private static final String HTML_IFRAME = "";
@Override // com.ynet.life.controller.LifeRequestController
public ModelAndView doRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
if (this.openMonitor) {
this.accessInfo.newAccess();
}
Session session = doSessionCheck(request, response);
if (session == null) {
Trace.logError("LifeSession", "Session not exist or timeout");
throw LifeConstants.EXCEPTION_SESSION_TIMEOUT;
}
Context sessionContext = (Context) session.getAttribute(GENEConstance.ATTR_CONTEXT);
if (sessionContext != null) {
preActionWork(request, sessionContext);
}
Map model = new HashMap();
model.put(GENEConstance.ATTR_CONTEXT, sessionContext);
GENEFlowExecuteResult result = executeGENELogic(sessionContext, request, response);
model.put(GENEConstance.ATTR_CONTEXT, result.context);
if (result.e != null) {
if (result.e instanceof InvalidInputException) {
throw result.e;
}
if (result.e instanceof InvalidSessionException) {
this.sessionManager.removeSession(session);
throw new BizLogicException(model, result.e);
}
throw new BizLogicException(model, result.e);
}
Context context = result.context;
try {
ServletContext sc = request.getSession().getServletContext();
String designFile = (String) context.getDataValue("designFile");
String format = (String) context.getDataValue("format");
String reportFile = (String) context.getDataValue("reportFile");
try {
try {
ServletOutputStream outputStream = response.getOutputStream();
IReportEngine birtReportEngine = BirtEngine.getBirtEngine(sc);
IReportRunnable design = birtReportEngine.openReportDesign(String.valueOf(sc.getRealPath("WEB-INF/mvcs" + request.getContextPath() + "/reports")) + "/" + designFile);
List allParameter = design.getDesignHandle().getAllParameters();
for (int i = 0; i < allParameter.size(); i++) {
ScalarParameterHandle phandle = (ScalarParameterHandle) allParameter.get(i);
String parameterName = phandle.getName();
String parameterValue = ((String) context.getDataValue(parameterName)) == null ? "" : (String) context.getDataValue(parameterName);
phandle.setDefaultValue(parameterValue);
}
IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask(design);
HTMLRenderOption options = new HTMLRenderOption();
options.setBaseImageURL(String.valueOf(request.getContextPath()) + "/images");
options.setImageDirectory(sc.getRealPath("/images"));
if (format == null || "html".equalsIgnoreCase(format)) {
response.setContentType("text/html");
options.setOutputFormat("html");
options.setEmbeddable(true);
outputStream.write(HTML_CHAR_ENCODE.getBytes());
outputStream.write(HTML_STYLE.getBytes());
outputStream.write(HTML_SCRIPT.getBytes());
outputStream.write(HTML_TABLE_HEAD.getBytes());
outputStream.write(HTML_EXPORT_TOOL.getBytes());
outputStream.write(HTML_PRINT_TOOL.getBytes());
outputStream.write(HTML_OTHER_TOOL.getBytes());
outputStream.write(HTML_TABLE_TAIL.getBytes());
outputStream.write(("").getBytes());
outputStream.write(HTML_PARAMETER_HEAD.getBytes());
Iterator it = request.getParameterMap().keySet().iterator();
while (it.hasNext()) {
String paramName = LifeStringFilter.filterHtmlTag((String) it.next());
String paramValue = LifeStringFilter.filterHtmlTag(request.getParameter(paramName));
outputStream.write(("").getBytes());
}
outputStream.write(HTML_PARAMETER_TAIL.getBytes());
outputStream.write(HTML_IFRAME.getBytes());
outputStream.flush();
} else {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=" + getFileName(String.valueOf(reportFile) + ".pdf"));
options.setOutputFormat("pdf");
}
options.setOutputStream(outputStream);
task.setRenderOption(options);
task.run();
task.close();
context.terminate();
return null;
} catch (BirtException be) {
Trace.logError(GENEConstance.GENE_MVC, "报表生成失败", be);
throw new TranFailException("EBLN0000", be.getMessage(), be);
}
} catch (IOException ex) {
Trace.logError(GENEConstance.GENE_MVC, "报表生成失败", ex);
throw new TranFailException("EBLN0000", ex.getMessage(), ex);
}
} catch (Throwable th) {
context.terminate();
throw th;
}
}
@Override // com.ynet.life.controller.LifeRequestController
protected void preActionWork(HttpServletRequest request, Context sessionContext) throws TranFailException {
LifeAccessCenter.checkUserPrivilege(request, getName(), sessionContext);
LifeAccessCenter.checkSubmitTimestamp(request, sessionContext);
}
protected String getFileName(String fileName) {
return String.valueOf(LifeStandard.getServerTime("yyyyMMddHHmmssSSS")) + RandomStringUtils.random(5, "0-9|A-Z|a-z", (String) null) + "_" + fileName;
}
}