001: /*
002: * Copyright 2006 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
007: * BI Platform. The Initial Developer is Pentaho Corporation.
008: *
009: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
010: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
011: * the license for the specific language governing your rights and limitations.
012: */
013: package org.pentaho.plugin.jfreereport.outputs;
014:
015: import java.io.IOException;
016: import java.io.OutputStream;
017:
018: import org.jfree.report.JFreeReport;
019: import org.jfree.report.ReportProcessingException;
020: import org.jfree.report.layout.output.YieldReportListener;
021: import org.jfree.report.modules.output.table.html.FlowHtmlOutputProcessor;
022: import org.jfree.report.modules.output.table.html.HtmlPrinter;
023: import org.jfree.report.modules.output.table.html.AllItemsHtmlPrinter;
024: import org.jfree.report.modules.output.table.html.SingleRepositoryURLRewriter;
025: import org.jfree.report.modules.output.table.base.FlowReportProcessor;
026: import org.jfree.repository.zipwriter.ZipRepository;
027: import org.jfree.repository.ContentLocation;
028: import org.jfree.repository.RepositoryUtilities;
029: import org.jfree.repository.DefaultNameGenerator;
030: import org.jfree.repository.ContentIOException;
031: import org.pentaho.messages.Messages;
032:
033: /**
034: * Creation-Date: 07.07.2006, 20:42:17
035: *
036: * @author Thomas Morgner
037: */
038: public class JFreeReportZipHtmlComponent extends
039: AbstractGenerateStreamContentComponent {
040: private static final long serialVersionUID = -3904516365257691828L;
041:
042: public JFreeReportZipHtmlComponent() {
043: }
044:
045: protected String getMimeType() {
046: return "application/zip"; //$NON-NLS-1$
047: }
048:
049: protected String getExtension() {
050: return ".zip"; //$NON-NLS-1$
051: }
052:
053: protected boolean performExport(final JFreeReport report,
054: final OutputStream outputStream) {
055: try {
056: String dataDirectory = getInputStringValue(REPORTDIRECTORYHTML_DATADIR);
057: if (dataDirectory == null) {
058: dataDirectory = "data"; //$NON-NLS-1$
059: }
060:
061: final ZipRepository zipRepository = new ZipRepository(
062: outputStream);
063: final ContentLocation root = zipRepository.getRoot();
064: final ContentLocation data = RepositoryUtilities
065: .createLocation(zipRepository, RepositoryUtilities
066: .split(dataDirectory, "/"));//$NON-NLS-1$
067:
068: final FlowHtmlOutputProcessor outputProcessor = new FlowHtmlOutputProcessor(
069: report.getConfiguration());
070:
071: final HtmlPrinter printer = new AllItemsHtmlPrinter(report
072: .getResourceManager());
073: printer.setContentWriter(root, new DefaultNameGenerator(
074: root, "report.html"));//$NON-NLS-1$
075: printer.setDataWriter(data, new DefaultNameGenerator(data,
076: "content"));//$NON-NLS-1$
077: printer.setUrlRewriter(new SingleRepositoryURLRewriter());
078: outputProcessor.setPrinter(printer);
079:
080: final FlowReportProcessor sp = new FlowReportProcessor(
081: report, outputProcessor);
082: final int yieldRate = getYieldRate();
083: if (yieldRate > 0) {
084: sp.addReportProgressListener(new YieldReportListener(
085: yieldRate));
086: }
087: sp.processReport();
088: zipRepository.close();
089: close();
090: return true;
091: } catch (ReportProcessingException e) {
092: error(
093: Messages
094: .getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e); //$NON-NLS-1$
095: return false;
096: } catch (IOException e) {
097: error(
098: Messages
099: .getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e); //$NON-NLS-1$
100: return false;
101: } catch (ContentIOException e) {
102: error(
103: Messages
104: .getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e); //$NON-NLS-1$
105: return false;
106: }
107: }
108: }
|