184 lines
7.6 KiB
Java
184 lines
7.6 KiB
Java
package net.sf.jasperreports.engine;
|
|
|
|
import java.io.File;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.util.Collection;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstab;
|
|
import net.sf.jasperreports.engine.design.JRCompiler;
|
|
import net.sf.jasperreports.engine.design.JRJavacCompiler;
|
|
import net.sf.jasperreports.engine.design.JRJdk13Compiler;
|
|
import net.sf.jasperreports.engine.design.JRJdtCompiler;
|
|
import net.sf.jasperreports.engine.design.JRVerifier;
|
|
import net.sf.jasperreports.engine.design.JasperDesign;
|
|
import net.sf.jasperreports.engine.fill.JREvaluator;
|
|
import net.sf.jasperreports.engine.util.JRClassLoader;
|
|
import net.sf.jasperreports.engine.util.JRLoader;
|
|
import net.sf.jasperreports.engine.util.JRProperties;
|
|
import net.sf.jasperreports.engine.util.JRSaver;
|
|
import net.sf.jasperreports.engine.xml.JRXmlLoader;
|
|
import net.sf.jasperreports.engine.xml.JRXmlWriter;
|
|
|
|
public class JasperCompileManager {
|
|
public static String compileReportToFile(String sourceFileName) throws JRException {
|
|
File sourceFile = new File(sourceFileName);
|
|
JasperDesign jasperDesign = JRXmlLoader.load(sourceFileName);
|
|
File destFile = new File(sourceFile.getParent(), jasperDesign.getName() + ".jasper");
|
|
String destFileName = destFile.toString();
|
|
compileReportToFile(jasperDesign, destFileName);
|
|
return destFileName;
|
|
}
|
|
|
|
public static void compileReportToFile(String sourceFileName, String destFileName) throws JRException {
|
|
JasperDesign jasperDesign = JRXmlLoader.load(sourceFileName);
|
|
compileReportToFile(jasperDesign, destFileName);
|
|
}
|
|
|
|
public static void compileReportToFile(JasperDesign jasperDesign, String destFileName) throws JRException {
|
|
JasperReport jasperReport = compileReport(jasperDesign);
|
|
JRSaver.saveObject(jasperReport, destFileName);
|
|
}
|
|
|
|
public static JasperReport compileReport(String sourceFileName) throws JRException {
|
|
JasperDesign jasperDesign = JRXmlLoader.load(sourceFileName);
|
|
return compileReport(jasperDesign);
|
|
}
|
|
|
|
public static void compileReportToStream(InputStream inputStream, OutputStream outputStream) throws JRException {
|
|
JasperDesign jasperDesign = JRXmlLoader.load(inputStream);
|
|
compileReportToStream(jasperDesign, outputStream);
|
|
}
|
|
|
|
public static void compileReportToStream(JasperDesign jasperDesign, OutputStream outputStream) throws JRException {
|
|
JasperReport jasperReport = compileReport(jasperDesign);
|
|
JRSaver.saveObject(jasperReport, outputStream);
|
|
}
|
|
|
|
public static JasperReport compileReport(InputStream inputStream) throws JRException {
|
|
JasperDesign jasperDesign = JRXmlLoader.load(inputStream);
|
|
return compileReport(jasperDesign);
|
|
}
|
|
|
|
public static JasperReport compileReport(JasperDesign jasperDesign) throws JRException {
|
|
return getCompiler(jasperDesign).compileReport(jasperDesign);
|
|
}
|
|
|
|
public static Collection verifyDesign(JasperDesign jasperDesign) {
|
|
return JRVerifier.verifyDesign(jasperDesign);
|
|
}
|
|
|
|
public static JREvaluator loadEvaluator(JasperReport jasperReport, JRDataset dataset) throws JRException {
|
|
JRCompiler compiler = getCompiler(jasperReport);
|
|
return compiler.loadEvaluator(jasperReport, dataset);
|
|
}
|
|
|
|
public static JREvaluator loadEvaluator(JasperReport jasperReport, JRCrosstab crosstab) throws JRException {
|
|
JRCompiler compiler = getCompiler(jasperReport);
|
|
return compiler.loadEvaluator(jasperReport, crosstab);
|
|
}
|
|
|
|
public static JREvaluator loadEvaluator(JasperReport jasperReport) throws JRException {
|
|
return loadEvaluator(jasperReport, jasperReport.getMainDataset());
|
|
}
|
|
|
|
public static String writeReportToXmlFile(String sourceFileName) throws JRException {
|
|
File sourceFile = new File(sourceFileName);
|
|
JRReport report = (JRReport)JRLoader.loadObject(sourceFile);
|
|
File destFile = new File(sourceFile.getParent(), report.getName() + ".jasper.jrxml");
|
|
String destFileName = destFile.toString();
|
|
writeReportToXmlFile(report, destFileName);
|
|
return destFileName;
|
|
}
|
|
|
|
public static void writeReportToXmlFile(String sourceFileName, String destFileName) throws JRException {
|
|
JRReport report = (JRReport)JRLoader.loadObject(sourceFileName);
|
|
writeReportToXmlFile(report, destFileName);
|
|
}
|
|
|
|
public static void writeReportToXmlFile(JRReport report, String destFileName) throws JRException {
|
|
JRXmlWriter.writeReport(report, destFileName, "UTF-8");
|
|
}
|
|
|
|
public static void writeReportToXmlStream(InputStream inputStream, OutputStream outputStream) throws JRException {
|
|
JRReport report = (JRReport)JRLoader.loadObject(inputStream);
|
|
writeReportToXmlStream(report, outputStream);
|
|
}
|
|
|
|
public static void writeReportToXmlStream(JRReport report, OutputStream outputStream) throws JRException {
|
|
JRXmlWriter.writeReport(report, outputStream, "UTF-8");
|
|
}
|
|
|
|
public static String writeReportToXml(JRReport report) {
|
|
return JRXmlWriter.writeReport(report, "UTF-8");
|
|
}
|
|
|
|
private static JRCompiler getJavaCompiler() {
|
|
JRJdtCompiler jRJdtCompiler;
|
|
JRJdk13Compiler jRJdk13Compiler;
|
|
JRJavacCompiler jRJavacCompiler;
|
|
JRCompiler compiler = null;
|
|
try {
|
|
JRClassLoader.loadClassForRealName("org.eclipse.jdt.internal.compiler.Compiler");
|
|
jRJdtCompiler = new JRJdtCompiler();
|
|
} catch (Exception e) {}
|
|
if (jRJdtCompiler == null)
|
|
try {
|
|
JRClassLoader.loadClassForRealName("com.sun.tools.javac.Main");
|
|
jRJdk13Compiler = new JRJdk13Compiler();
|
|
} catch (Exception e) {}
|
|
if (jRJdk13Compiler == null)
|
|
jRJavacCompiler = new JRJavacCompiler();
|
|
return (JRCompiler)jRJavacCompiler;
|
|
}
|
|
|
|
private static JRCompiler getCompiler(JasperReport jasperReport) throws JRException {
|
|
JRCompiler compiler = null;
|
|
String compilerClassName = jasperReport.getCompilerClass();
|
|
Class compilerClass = null;
|
|
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
|
if (classLoader != null)
|
|
try {
|
|
compilerClass = classLoader.loadClass(compilerClassName);
|
|
} catch (ClassNotFoundException e) {}
|
|
if (compilerClass == null) {
|
|
classLoader = JasperCompileManager.class.getClassLoader();
|
|
try {
|
|
if (classLoader == null) {
|
|
compilerClass = Class.forName(compilerClassName);
|
|
} else {
|
|
compilerClass = classLoader.loadClass(compilerClassName);
|
|
}
|
|
} catch (ClassNotFoundException e) {
|
|
throw new JRException("Report compiler class not found : " + compilerClassName);
|
|
}
|
|
}
|
|
try {
|
|
compiler = (JRCompiler)compilerClass.newInstance();
|
|
} catch (Exception e) {
|
|
throw new JRException("Could not instantiate report compiler : " + compilerClassName, e);
|
|
}
|
|
return compiler;
|
|
}
|
|
|
|
private static JRCompiler getCompiler(JasperDesign jasperDesign) throws JRException {
|
|
JRCompiler compiler = null;
|
|
String compilerClassName = JRProperties.getProperty("net.sf.jasperreports.compiler.class");
|
|
if (compilerClassName == null || compilerClassName.trim().length() == 0) {
|
|
String language = jasperDesign.getLanguage();
|
|
compilerClassName = JRProperties.getProperty("net.sf.jasperreports.compiler." + language);
|
|
if (compilerClassName == null || compilerClassName.trim().length() == 0) {
|
|
if ("java".equals(language))
|
|
return getJavaCompiler();
|
|
throw new JRException("No report compiler set for language : " + language);
|
|
}
|
|
}
|
|
try {
|
|
Class clazz = JRClassLoader.loadClassForName(compilerClassName);
|
|
compiler = clazz.newInstance();
|
|
} catch (Exception e) {
|
|
throw new JRException("Could not instantiate report compiler : " + compilerClassName, e);
|
|
}
|
|
return compiler;
|
|
}
|
|
}
|