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.File;
016:
017: import org.jfree.report.JFreeReport;
018: import org.jfree.report.ReportProcessingException;
019: import org.jfree.report.layout.output.YieldReportListener;
020: import org.jfree.report.modules.output.table.base.FlowReportProcessor;
021: import org.jfree.report.modules.output.table.html.AllItemsHtmlPrinter;
022: import org.jfree.report.modules.output.table.html.FileSystemURLRewriter;
023: import org.jfree.report.modules.output.table.html.FlowHtmlOutputProcessor;
024: import org.jfree.report.modules.output.table.html.HtmlPrinter;
025: import org.jfree.repository.ContentIOException;
026: import org.jfree.repository.ContentLocation;
027: import org.jfree.repository.DefaultNameGenerator;
028: import org.jfree.repository.file.FileRepository;
029: import org.pentaho.messages.Messages;
030:
031: /**
032: * Creation-Date: 07.07.2006, 20:42:17
033: *
034: * @author Thomas Morgner
035: */
036: public class JFreeReportDirectoryHtmlComponent extends
037: AbstractGenerateContentComponent {
038: private static final long serialVersionUID = -7511578647689368225L;
039:
040: public JFreeReportDirectoryHtmlComponent() {
041: }
042:
043: private File getInputFileValue(final String inputName) {
044: final Object input = getInputValue(inputName);
045: if (input == null) {
046: return null;
047: }
048: if (input instanceof File) {
049: return (File) input;
050: }
051: if (input instanceof String) {
052: return new File((String) input);
053: }
054: return null;
055: }
056:
057: protected boolean performExport(final JFreeReport report) {
058: try {
059: final File targetFile = getInputFileValue(REPORTDIRECTORYHTML_TARGETFILE);
060: if (targetFile == null) {
061: return false;
062: }
063:
064: File dataDirectory = getInputFileValue(REPORTDIRECTORYHTML_DATADIR);
065: if (dataDirectory == null) {
066: dataDirectory = new File(targetFile, "data/"); //$NON-NLS-1$
067: }
068:
069: final File targetDirectory = targetFile.getParentFile();
070: if (dataDirectory.exists()
071: && dataDirectory.isDirectory() == false) {
072: dataDirectory = dataDirectory.getParentFile();
073: if (dataDirectory.isDirectory() == false) {
074: String msg = Messages
075: .getErrorString(
076: "JFreeReportDirectoryComponent.ERROR_0001_INVALID_DIR", //$NON-NLS-1$
077: dataDirectory.getPath());
078: throw new ReportProcessingException(msg);
079: }
080: } else if (dataDirectory.exists() == false) {
081: dataDirectory.mkdirs();
082: }
083:
084: final FileRepository targetRepository = new FileRepository(
085: targetDirectory);
086: final ContentLocation targetRoot = targetRepository
087: .getRoot();
088:
089: final FileRepository dataRepository = new FileRepository(
090: dataDirectory);
091: final ContentLocation dataRoot = dataRepository.getRoot();
092:
093: final FlowHtmlOutputProcessor outputProcessor = new FlowHtmlOutputProcessor(
094: report.getConfiguration());
095:
096: final HtmlPrinter printer = new AllItemsHtmlPrinter(report
097: .getResourceManager());
098: printer.setContentWriter(targetRoot,
099: new DefaultNameGenerator(targetRoot, targetFile
100: .getName()));
101: printer.setDataWriter(dataRoot, new DefaultNameGenerator(
102: targetRoot, "content")); //$NON-NLS-1$
103: printer.setUrlRewriter(new FileSystemURLRewriter());
104: outputProcessor.setPrinter(printer);
105:
106: final FlowReportProcessor sp = new FlowReportProcessor(
107: report, outputProcessor);
108: final int yieldRate = getYieldRate();
109: if (yieldRate > 0) {
110: sp.addReportProgressListener(new YieldReportListener(
111: yieldRate));
112: }
113: sp.processReport();
114: sp.close();
115: return true;
116: } catch (ReportProcessingException e) {
117: return false;
118: } catch (ContentIOException e) {
119: return false;
120: }
121: }
122: }
|