Example usage for javax.servlet ServletOutputStream write

List of usage examples for javax.servlet ServletOutputStream write

Introduction

In this page you can find the example usage for javax.servlet ServletOutputStream write.

Prototype

public void write(byte b[], int off, int len) throws IOException 

Source Link

Document

Writes len bytes from the specified byte array starting at offset off to this output stream.

Usage

From source file:ro.cs.logaudit.web.servlet.ReportServlet.java

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    logger.debug("doPost START");
    ServletOutputStream sos = null;
    StopWatch sw = new StopWatch();
    sw.start("Retrieve report");
    try {//from w  w  w. ja v  a 2s . c om
        //create the bean containing the report parameters which will be passed to the Report Web Service Client
        AuditEventsReportParams reportParams = new AuditEventsReportParams();

        //Retrieve the start date param for the report request
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
        Date startDate = sdf.parse(ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_START_DATE_PARAM), new ParsePosition(0));
        if (startDate != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_START_DATE_PARAM, startDate);
        }

        //Retrieve the end date param for the report request
        Date endDate = sdf.parse(ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_END_DATE_PARAM), new ParsePosition(0));
        if (endDate != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_END_DATE_PARAM, endDate);
        }

        //Retrieve the personId param for the report request
        String personId = ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_PERSON_ID_PARAM);
        if (personId != null && personId != "") {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_PERSON_ID_PARAM,
                    Integer.valueOf(personId));
        }

        //Retrieve the message param for the report request
        String message = ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MESSAGE_PARAM);
        if (message != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MESSAGE_PARAM, message);
        }

        //Retrieve the event param for the report request
        String event = ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_EVENT_PARAM);
        if (event != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_EVENT_PARAM, event);
        }

        //Retrieve the moduleId param for the report request
        Integer moduleId = ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM);
        if (moduleId != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM, moduleId);
        }

        //Retrieve the reportTitle param for the report request
        String reportTitle = ServletRequestUtils.getStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_PARAM_REPORT_TITLE);
        if (reportTitle != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_PARAM_REPORT_TITLE,
                    reportTitle);
        }

        //Retrieve the orientation param for the report request
        String orientation = ServletRequestUtils.getRequiredStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_ORIENTATION_PARAM);
        if (orientation != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_ORIENTATION_PARAM,
                    orientation);
        }

        //Retrieve the report format param for the report request
        String format = ServletRequestUtils.getRequiredStringParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_FORMAT_PARAM);
        if (format != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_FORMAT_PARAM,
                    format.toLowerCase());
        }

        //Retrieve the organisationId param for the report request
        Integer organisationId = ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_ORGANISATION_ID_PARAM);
        if (organisationId != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_ORGANISATION_ID_PARAM,
                    organisationId);
        }

        reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_LOCALE_PARAM,
                request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME)
                        .toString().toLowerCase().substring(0, 2));

        //if the attachment param exists on the request, it means that the generated report must be a whole html page with head and body tags, 
        //otherwise the report must be embeddable in an existent html page(no head and body tags)
        if (ServletRequestUtils.getBooleanParameters(request, ATTACHMENT) != null) {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_HTML_IS_EMBEDDABLE, false);
        } else {
            reportParams.setProperty(IReportsWsClientConstant.AUDIT_EVENTS_REPORT_HTML_IS_EMBEDDABLE, true);
        }

        //Servlet's OutputStream
        sos = response.getOutputStream();

        //get the requested report
        DataHandler reportFileReceived = ReportsWebServiceClient.getInstance()
                .getAuditEventsReport(reportParams);

        //set the response content type
        if (format.toLowerCase().equals("html")) {
            response.setContentType("text/html");
            if (ServletRequestUtils.getBooleanParameters(request, ATTACHMENT) != null) {
                response.setHeader("Content-Disposition",
                        "attachment; filename=\"".concat(reportTitle).concat(".html\""));
            } else {
                response.setHeader("Content-Disposition",
                        "inline; filename=\"".concat(reportTitle).concat(".html\""));
            }
        } else if (format.toLowerCase().equals("pdf")) {
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition",
                    "inline; filename=\"".concat(reportTitle).concat(".pdf\""));
        } else if (format.toLowerCase().equals("doc")) {
            response.setContentType("application/msword");
            response.setHeader("Content-Disposition",
                    "attachment; filename=\"".concat(reportTitle).concat(".doc\""));
        } else if (format.toLowerCase().equals("xls")) {
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment; filename=\"".concat(reportTitle).concat(".xls\""));
        }

        //write the received report bytes stream to response output stream
        byte buffer[] = new byte[4096];
        BufferedInputStream bis = new BufferedInputStream(reportFileReceived.getInputStream());
        int size = 0;
        int i;
        while ((i = bis.read(buffer, 0, 4096)) != -1) {
            sos.write(buffer, 0, i);
            size += i;
        }

        if (size == 0) {
            response.setContentType("text/plain");
            sos.write("No content !".getBytes());
        }

        bis.close();
        response.setContentLength(size);

        logger.debug("**** report transfer completed !");
    } catch (Exception ex) {
        logger.error("", ex);
        response.setContentType("text/html");
        String exceptionCode = null;
        ;
        if (((Integer) ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM))
                        .equals(new Integer(IConstant.NOM_MODULE_OM_LABEL_KEY))) {
            exceptionCode = ICodeException.AUDITOM_REPORT_CREATE;
        } else if (((Integer) ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM))
                        .equals(new Integer(IConstant.NOM_MODULE_DM_LABEL_KEY))) {
            exceptionCode = ICodeException.AUDITDM_REPORT_CREATE;
        } else if (((Integer) ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM))
                        .equals(new Integer(IConstant.NOM_MODULE_CM_LABEL_KEY))) {
            exceptionCode = ICodeException.AUDITCM_REPORT_CREATE;
        } else if (((Integer) ServletRequestUtils.getIntParameter(request,
                IReportsWsClientConstant.AUDIT_EVENTS_REPORT_MODULE_ID_PARAM))
                        .equals(new Integer(IConstant.NOM_MODULE_TS_LABEL_KEY))) {
            exceptionCode = ICodeException.AUDITTS_REPORT_CREATE;
        }
        response.getWriter().write("<html xmlns=\"http://www.w3.org/1999/xhtml\">"
                + "<head>   <script type=\"text/javascript\" src=\"js/cs/cs_common.js\"></script>"
                + "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/standard/css/style.css\"/> "
                + "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/standard/css/yui/fonts-min.css\" /> "
                + "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/standard/css/yui/container.css\" /> </head> "
                + "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/standard/css/yui/button.css\" />"
                + "<body> <div id=\"errorsContainer\" class=\"errorMessagesDiv\"> "
                + "<table class=\"errorMessagesTable\">" + "<tr>" + "<td>" + "</td>" + "<td>"
                + "<div class=\"hd\">" + "<div id=\"closeErrors\" class=\"messagesCloseButon\"></div>"
                + "</div>" + "</td>" + "</tr>" + "<tr>" + "<td>" + "<div class=\"bd\">"
                + "<div style=\"width:470px\"> "
                + messageSource.getMessage(CREATE_ERROR,
                        new Object[] { exceptionCode, ControllerUtils.getInstance().getFormattedCurrentTime() },
                        (Locale) request.getSession()
                                .getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME))
                + "<br/> " + "</div>" + "</div>" + "</td>" + "<td>" + "</td>" + "</tr>" + "</table>"
                + "<div class=\"ft\">&nbsp;</div>" + "</div>" + "<script> "
                + "if(typeof(YAHOO.widget.Module) != \"undefined\") { "
                + "YAHOO.audit.errorsContainer = new YAHOO.widget.Module(\"errorsContainer\", {visible:true} ); "
                + "YAHOO.audit.errorsContainer.render() ;" + "YAHOO.audit.errorsContainer.show();"
                + "YAHOO.util.Event.addListener(\"closeErrors\", \"click\", function () {   "
                + "YAHOO.audit.errorsContainer.hide();" + "YAHOO.audit.errorsContainer.destroy(); "
                + "}, YAHOO.audit.errorsContainer, true);" + "}" + "</script> </body></html>");
        response.getWriter().flush();
    } finally {
        if (sos != null) {
            //Flushing and Closing OutputStream
            sos.flush();
            sos.close();
            logger.debug("**** servlet output stream closed.");
        }
    }
    logger.debug("doPost END");
    //list all the tasks performed
    logger.debug(sw.prettyPrint());
    sw.stop();
}