001: /*
002: * Copyright 2006-2007 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.
007: *
008: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
009: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
010: * the license for the specific language governing your rights and limitations.
011: *
012: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
013: */
014: package org.pentaho.reportdesigner.crm.report.reportexporter.jfreereport;
015:
016: import org.jetbrains.annotations.NotNull;
017: import org.jfree.report.JFreeReport;
018: import org.jfree.report.modules.parser.ext.factory.base.ArrayClassFactory;
019: import org.jfree.report.modules.parser.ext.factory.base.URLClassFactory;
020: import org.jfree.report.modules.parser.ext.factory.datasource.DefaultDataSourceFactory;
021: import org.jfree.report.modules.parser.ext.factory.elements.DefaultElementFactory;
022: import org.jfree.report.modules.parser.ext.factory.objects.BandLayoutClassFactory;
023: import org.jfree.report.modules.parser.ext.factory.objects.DefaultClassFactory;
024: import org.jfree.report.modules.parser.ext.factory.stylekey.DefaultStyleKeyFactory;
025: import org.jfree.report.modules.parser.ext.factory.stylekey.PageableLayoutStyleKeyFactory;
026: import org.jfree.report.modules.parser.ext.factory.templates.DefaultTemplateCollection;
027: import org.jfree.report.modules.parser.extwriter.ReportWriter;
028: import org.jfree.report.util.ReportConfiguration;
029: import org.jfree.xmlns.parser.AbstractXmlResourceFactory;
030: import org.pentaho.reportdesigner.crm.report.model.Report;
031: import org.pentaho.reportdesigner.crm.report.reportexporter.ReportExporter;
032: import org.pentaho.reportdesigner.lib.common.xml.XMLConstants;
033:
034: import java.io.File;
035: import java.io.StringWriter;
036:
037: /**
038: * User: Martin
039: * Date: 28.10.2005
040: * Time: 08:37:52
041: */
042: public class JFreeReportExporter extends ReportExporter {
043:
044: @NotNull
045: private String result = "";
046:
047: public JFreeReportExporter() {
048: }
049:
050: @NotNull
051: public String getExtendedReportDefinition() {
052: return result;
053: }
054:
055: public void exportReport(boolean isSubReport, @NotNull
056: Report report) throws Exception {
057: //noinspection ConstantConditions
058: if (report == null) {
059: throw new IllegalArgumentException(
060: "report must not be null");
061: }
062:
063: JFreeReportVisitor reportVisitor = new JFreeReportVisitor();
064:
065: report.accept(null, reportVisitor);
066:
067: JFreeReport jFreeReport = reportVisitor.getJFreeReport();
068:
069: final ReportConfiguration config = new ReportConfiguration(
070: jFreeReport.getReportConfiguration());
071: config.setConfigProperty(
072: AbstractXmlResourceFactory.CONTENTBASE_KEY, new File(
073: ".").toURI().toURL().toExternalForm());
074: jFreeReport.getReportConfiguration().setConfigProperty(
075: "org.jfree.report.NoPrinterAvailable",
076: Boolean.TRUE.toString());
077: if (report.isUseMaxCharBounds()) {
078: config
079: .setConfigProperty(
080: "org.jfree.report.layout.fontrenderer.UseMaxCharBounds",
081: Boolean.TRUE.toString());//NON-NLS
082: }
083:
084: final ReportWriter writer = new ReportWriter(jFreeReport,
085: XMLConstants.ENCODING, config);
086: writer.addClassFactoryFactory(new URLClassFactory());
087: writer.addClassFactoryFactory(new DefaultClassFactory());
088: writer.addClassFactoryFactory(new BandLayoutClassFactory());
089: writer.addClassFactoryFactory(new ArrayClassFactory());
090:
091: writer.addStyleKeyFactory(new DefaultStyleKeyFactory());
092: writer.addStyleKeyFactory(new PageableLayoutStyleKeyFactory());
093: writer.addTemplateCollection(new DefaultTemplateCollection());
094: writer.addElementFactory(new DefaultElementFactory());
095: writer.addDataSourceFactory(new DefaultDataSourceFactory());
096:
097: StringWriter stringWriter = new StringWriter();
098: writer.write(stringWriter);
099:
100: result = stringWriter.toString();
101: }
102:
103: }
|