Esempio n. 1
0
  public void testRunWithArchiveView() throws Exception {
    // 1. create document from ORIGINAL_REPORT_DESIGN_RESOURCE first
    copyResource(ORIGINAL_REPORT_DESIGN_RESOURCE, ORIGINAL_REPORT_DESIGN);
    IReportRunnable report = engine.openReportDesign(ORIGINAL_REPORT_DESIGN);
    IRunTask task = engine.createRunTask(report);
    try {
      task.run(ORIGINAL_REPORT_DOCUMENT);
    } finally {
      task.close();
    }

    // 2. create document from CHANGED_REPORT_DESIGN_RESOURCE
    copyResource(CHANGED_REPORT_DESIGN_RESOURCE, CHANGED_REPORT_DESIGN);

    ArchiveView view = new ArchiveView(ARCHIVE_VIEW_DOCUMENT, ORIGINAL_REPORT_DOCUMENT, "rw");

    try {
      report = engine.openReportDesign(CHANGED_REPORT_DESIGN);
      task = engine.createRunTask(report);
      try {
        // 3. new view archive and render
        ArchiveWriter writer = new ArchiveWriter(view);
        task.setDataSource(new ArchiveReader(view));
        task.run(writer);
      } finally {
        task.close();
      }

      // 3. create golden report document
      report = engine.openReportDesign(CHANGED_REPORT_DESIGN);
      task = engine.createRunTask(report);
      try {
        task.run(CHANGED_REPORT_DOCUMENT);
      } finally {
        task.close();
      }
      IReportDocument goldenDocument = engine.openReportDocument(CHANGED_REPORT_DOCUMENT);
      try {
        IReportDocument ivDocument =
            engine.openReportDocument(null, new ArchiveReader(view), new HashMap());

        try {
          // 5. compare two report document
          compare(goldenDocument, ivDocument);
        } finally {
          ivDocument.close();
        }
      } finally {
        goldenDocument.close();
      }
    } finally {
      view.close();
    }
  }
Esempio n. 2
0
  /** Заполнение отчёта */
  private void fillReport(RptMain report, RptProperties properties) {
    String reportDoc = generateReportFileName(report, properties);

    IReportDocument rd = null;
    byte[] reportResult = null;

    try {
      IRunTask runTask = engine.createRunTask(design);
      setupEngineTask(runTask, properties);
      try {
        runTask.run(reportDoc);
      } finally {
        runTask.close();
      }

      rd = engine.openReportDocument(reportDoc);

      IRenderTask rendTask = engine.createRenderTask(rd);
      setupRenderTask(rendTask, properties);

      try {
        rendTask.render();

        reportResult =
            ((ByteArrayOutputStream) rendTask.getRenderOption().getOutputStream()).toByteArray();
      } finally {
        rendTask.close();
      }
    } catch (EngineException e) {
      if (e.getCause() instanceof ApplicationException) throw (ApplicationException) e.getCause();
      else throw new ReportException(Messages.getInstance().getMessage(Messages.BIRT_ERROR), e);
    } finally {
      if (rd != null) rd.close();
      File f = new File(reportDoc);
      f.delete();
      f = null;
    }

    showReport(report, reportResult, properties);
  }
  @SuppressWarnings("unchecked")
  protected void renderMergedOutputModel(
      Map<String, Object> modelData, HttpServletRequest request, HttpServletResponse response)
      throws Exception {
    FileInputStream fis = null;
    IReportRunnable runnable = null;
    IReportDocument document = null;
    try {

      if (this.reportParameters == null) this.reportParameters = new HashMap<String, Object>();

      for (String k : modelData.keySet()) this.reportParameters.put(k, modelData.get(k));

      // 2) reportName property
      // 1) report name parameter is available, use that

      String reportName;
      reportName =
          StringUtils.hasText(this.reportName)
              ? this.reportName
              : request.getParameter(this.reportNameRequestParameter); // 'cat'
      String fullReportName = canonicalizeName(reportName);

      String documentName;
      documentName =
          StringUtils.hasText(this.documentName)
              ? this.documentName
              : request.getParameter(this.documentNameRequestParameter); // 'cat'
      String fullDocumentName = canonicalizeDocName(documentName);
      if (documentName == null) {
        fullDocumentName = reportName.replaceAll(".rptdesign", ".rptdocument");
      }

      String format;
      if (this.reportOutputFormat != null) {
        format = this.reportOutputFormat;
      } else {
        format = request.getParameter(this.reportFormatRequestParameter);
      }
      ServletContext sc =
          request.getServletContext(); // / avoid creating an HTTP session if possible.

      if (format == null) {
        format = "html";
      }

      Map<String, Object> mapOfOptions = new HashMap<String, Object>();
      mapOfOptions.put(
          IModuleOption.RESOURCE_FOLDER_KEY,
          birtViewResourcePathCallback.resourceDirectory(sc, request, reportName));
      mapOfOptions.put(IModuleOption.PARSER_SEMANTIC_CHECK_KEY, Boolean.FALSE);

      // set content type
      String contentType = birtEngine.getMIMEType(format);
      response.setContentType(contentType);
      setContentType(contentType);

      Map<String, Object> appContextMap = new HashMap<String, Object>();
      appContextMap.put(EngineConstants.APPCONTEXT_BIRT_VIEWER_HTTPSERVET_REQUEST, request);

      if (this.dataSource != null) {
        appContextMap.put(IConnectionFactory.PASS_IN_CONNECTION, this.dataSource.getConnection());

        if (this.closeDataSourceConnection)
          appContextMap.put(IConnectionFactory.CLOSE_PASS_IN_CONNECTION, Boolean.TRUE);
      }

      IEngineTask task = null;
      String pathForReport =
          birtViewResourcePathCallback.pathForReport(sc, request, fullReportName);
      fis = new FileInputStream(pathForReport);
      runnable = birtEngine.openReportDesign(fullReportName, fis, mapOfOptions);

      if (runnable != null && this.taskType == AbstractSingleFormatBirtView.RUNRENDERTASK) {
        task = birtEngine.createRunAndRenderTask(runnable);
        task.setParameterValues(discoverAndSetParameters(runnable, request));
        IRunAndRenderTask runAndRenderTask = (IRunAndRenderTask) task;
        IRenderOption options = null == this.renderOption ? new RenderOption() : this.renderOption;
        options.setActionHandler(actionHandler);
        IRenderOption returnedRenderOptions =
            renderReport(
                modelData,
                request,
                response,
                this.birtViewResourcePathCallback,
                appContextMap,
                reportName,
                format,
                options);
        for (String k : appContextMap.keySet())
          runAndRenderTask.getAppContext().put(k, appContextMap.get(k));
        runAndRenderTask.setRenderOption(returnedRenderOptions);
        runAndRenderTask.run();
        runAndRenderTask.close();
      } else {

        // Run then Render
        if (runnable != null) {
          task = birtEngine.createRunTask(runnable);
          task.setParameterValues(discoverAndSetParameters(runnable, request));
          IRunTask runTask = (IRunTask) task;
          for (String k : appContextMap.keySet())
            runTask.getAppContext().put(k, appContextMap.get(k));
          String pathForDocument =
              birtViewResourcePathCallback.pathForDocument(sc, request, fullDocumentName);
          runTask.run(pathForDocument);
          runTask.close();
          document = birtEngine.openReportDocument(fullDocumentName, pathForDocument, mapOfOptions);
          task = birtEngine.createRenderTask(document);
          IRenderTask renderTask = (IRenderTask) task;
          IRenderOption options =
              null == this.renderOption ? new RenderOption() : this.renderOption;
          options.setActionHandler(actionHandler);
          IRenderOption returnedRenderOptions =
              renderReport(
                  modelData,
                  request,
                  response,
                  this.birtViewResourcePathCallback,
                  appContextMap,
                  reportName,
                  format,
                  options);
          for (String k : appContextMap.keySet())
            renderTask.getAppContext().put(k, appContextMap.get(k));
          if (renderRange != null) {

            renderTask.setPageRange(renderRange);
          }
          renderTask.setRenderOption(returnedRenderOptions);
          renderTask.render();
          renderTask.close();
          document.close();
        }
      }

    } catch (Throwable th) {
      throw new RuntimeException(th); // nothing useful to do here
    } finally {
      if (null != fis) IOUtils.closeQuietly(fis);
      if (null != document) document.close();
    }
  }