public void printMaterialRequirement(
     final ViewDefinitionState view, final ComponentState state, final String[] args) {
   reportService.printGeneratedReport(
       view,
       state,
       new String[] {
         args[0],
         MaterialRequirementsConstants.PLUGIN_IDENTIFIER,
         MaterialRequirementsConstants.MODEL_MATERIAL_REQUIREMENT
       });
 }
 public void printSimpleMaterialBalance(
     final ViewDefinitionState viewDefinitionState,
     final ComponentState state,
     final String[] args) {
   reportService.printGeneratedReport(
       viewDefinitionState,
       state,
       new String[] {
         args[0],
         SimpleMaterialBalanceConstants.PLUGIN_IDENTIFIER,
         SimpleMaterialBalanceConstants.MODEL_SIMPLE_MATERIAL_BALANCE
       });
 }
  @RequestMapping(value = "developReport/generate", method = RequestMethod.POST)
  public ModelAndView generateReport(
      @RequestParam(value = L_TEMPLATE) final String template,
      @RequestParam(value = "type") final String type,
      @RequestParam(value = L_LOCALE) final String locale,
      final HttpServletRequest request,
      final HttpServletResponse response) {
    if (!showReportDevelopment) {
      return new ModelAndView(new RedirectView("/"));
    }

    List<ReportParameter> params = null;

    try {
      params = getReportParameters(template);
    } catch (Exception e) {
      LOG.error(e.getMessage(), e);
      return showException(L_QCADOO_REPORT_REPORT, e)
          .addObject(L_TEMPLATE, template)
          .addObject("isParameter", true)
          .addObject(L_LOCALE, locale);
    }

    try {
      ReportType reportType = ReportType.valueOf(type.toUpperCase(Locale.ENGLISH));
      Locale reportLocale = new Locale(locale);

      Map<String, Object> parameters = new HashMap<String, Object>();

      for (ReportParameter param : params) {
        param.setValue(request.getParameter("params[" + param.getName() + "]"));
        parameters.put(param.getName(), param.getRawValue());
      }

      byte[] report = reportService.generateReport(template, reportType, parameters, reportLocale);

      response.setContentLength(report.length);
      response.setContentType(reportType.getMimeType());
      response.setHeader("Content-disposition", "attachment; filename=report." + type);
      response.addHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
      response.addHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
      response.addHeader("Cache-Control", "post-check=0, pre-check=0");
      response.addHeader("Pragma", "no-cache");

      OutputStream out = response.getOutputStream();

      try {
        IOUtils.copy(new ByteArrayInputStream(report), out);
      } catch (IOException e) {
        LOG.error(e.getMessage(), e);
        throw new ReportException(ReportException.Type.ERROR_WHILE_COPYING_REPORT_TO_RESPONSE, e);
      }

      out.flush();

      return null;
    } catch (Exception e) {
      LOG.error(e.getMessage(), e);
      return showException(L_QCADOO_REPORT_REPORT, e)
          .addObject(L_TEMPLATE, template)
          .addObject("isParameter", true)
          .addObject(L_PARAMS, params)
          .addObject(L_LOCALE, locale);
    }
  }