use of org.pentaho.reporting.engine.classic.core.modules.output.table.base.FlowReportProcessor in project pentaho-kettle by pentaho.
the class PentahoReportingOutput method processReport.
private void processReport(Object[] r, String sourceFilename, String targetFilename, ProcessorType outputProcessorType, Boolean createParentFolder) throws KettleException {
try {
// Load the master report from the PRPT
//
MasterReport report = loadMasterReport(sourceFilename);
// Set the parameters values that are present in the various fields...
//
ReportParameterValues values = report.getParameterValues();
ReportParameterDefinition definition = report.getParameterDefinition();
for (String parameterName : meta.getParameterFieldMap().keySet()) {
String fieldName = meta.getParameterFieldMap().get(parameterName);
if (fieldName != null) {
int index = getInputRowMeta().indexOfValue(fieldName);
if (index < 0) {
throw new KettleException(BaseMessages.getString(PKG, "PentahoReportingOutput.Exception.CanNotFindField", fieldName));
}
Class<?> clazz = findParameterClass(definition, parameterName);
Object value = null;
if (clazz != null) {
if (clazz.equals(String.class)) {
value = getInputRowMeta().getString(r, index);
} else if (clazz.equals((new String[0]).getClass())) {
value = getInputRowMeta().getString(r, index).split("\t");
} else if (clazz.equals(Date.class)) {
value = getInputRowMeta().getDate(r, index);
} else if (clazz.equals(byte.class) || clazz.equals(Byte.class)) {
value = getInputRowMeta().getInteger(r, index).byteValue();
} else if (clazz.equals(Short.class) || clazz.equals(short.class)) {
value = getInputRowMeta().getInteger(r, index).shortValue();
} else if (clazz.equals(Integer.class) || clazz.equals(int.class)) {
value = getInputRowMeta().getInteger(r, index).intValue();
} else if (clazz.equals(Long.class) || clazz.equals(long.class)) {
value = getInputRowMeta().getInteger(r, index);
} else if (clazz.equals(Double.class) || clazz.equals(double.class)) {
value = getInputRowMeta().getNumber(r, index);
} else if (clazz.equals(Float.class) || clazz.equals(float.class)) {
value = getInputRowMeta().getNumber(r, index).floatValue();
} else if (clazz.equals(Number.class)) {
value = getInputRowMeta().getBigNumber(r, index).floatValue();
} else if (clazz.equals(Boolean.class) || clazz.equals(boolean.class)) {
value = getInputRowMeta().getBoolean(r, index);
} else if (clazz.equals(BigDecimal.class)) {
value = getInputRowMeta().getBigNumber(r, index);
} else if (clazz.equals((new byte[0]).getClass())) {
value = getInputRowMeta().getBinary(r, index);
} else {
value = getInputRowMeta().getValueMeta(index).convertToNormalStorageType(r[index]);
}
values.put(parameterName, value);
} else {
// This parameter was not found, log this as a warning...
//
logBasic(BaseMessages.getString(PKG, "PentahoReportingOutput.Log.ParameterNotFoundInReport", parameterName, sourceFilename));
}
}
}
Runnable exportTask;
PentahoReportingSwingGuiContext context = new PentahoReportingSwingGuiContext();
switch(outputProcessorType) {
case PDF:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
PdfOutputProcessor outputProcessor = new PdfOutputProcessor(report.getConfiguration(), fout, report.getResourceManager());
return new PageableReportProcessor(report, outputProcessor);
}
};
break;
case CSV:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
ReportStructureValidator validator = new ReportStructureValidator();
if (validator.isValidForFastProcessing(report) == false) {
StreamCSVOutputProcessor target = new StreamCSVOutputProcessor(fout);
return new StreamReportProcessor(report, target);
} else {
return new FastCsvExportProcessor(report, fout);
}
}
};
break;
case Excel:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
ReportStructureValidator validator = new ReportStructureValidator();
if (validator.isValidForFastProcessing(report) == false) {
final FlowExcelOutputProcessor target = new FlowExcelOutputProcessor(report.getConfiguration(), fout, report.getResourceManager());
target.setUseXlsxFormat(false);
return new FlowReportProcessor(report, target);
} else {
return new FastExcelExportProcessor(report, fout, false);
}
}
};
break;
case Excel_2007:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
ReportStructureValidator validator = new ReportStructureValidator();
if (validator.isValidForFastProcessing(report) == false) {
final FlowExcelOutputProcessor target = new FlowExcelOutputProcessor(report.getConfiguration(), fout, report.getResourceManager());
target.setUseXlsxFormat(true);
return new FlowReportProcessor(report, target);
} else {
return new FastExcelExportProcessor(report, fout, true);
}
}
};
break;
case StreamingHTML:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected String filename, suffix;
protected ContentLocation targetRoot;
@Override
protected void execute() throws Exception {
FileObject targetDirectory = targetFile.getParent();
FileObjectRepository targetRepository = new FileObjectRepository(targetDirectory);
targetRoot = targetRepository.getRoot();
suffix = getSuffix(targetPath);
filename = IOUtils.getInstance().stripFileExtension(targetFile.getName().toString());
ReportProcessor reportProcessor = createReportProcessor(null);
try {
reportProcessor.processReport();
} finally {
reportProcessor.close();
}
}
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
ReportStructureValidator validator = new ReportStructureValidator();
if (validator.isValidForFastProcessing(report) == false) {
final HtmlOutputProcessor outputProcessor = new StreamHtmlOutputProcessor(report.getConfiguration());
final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, filename, suffix));
// $NON-NLS-1$
printer.setDataWriter(null, null);
printer.setUrlRewriter(new FileSystemURLRewriter());
outputProcessor.setPrinter(printer);
return new StreamReportProcessor(report, outputProcessor);
} else {
FastHtmlContentItems printer = new FastHtmlContentItems();
printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, filename, suffix));
// $NON-NLS-1$
printer.setDataWriter(null, null);
printer.setUrlRewriter(new FileSystemURLRewriter());
return new FastHtmlExportProcessor(report, printer);
}
}
};
break;
case PagedHTML:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected String filename, suffix;
protected ContentLocation targetRoot;
@Override
protected void execute() throws Exception {
FileObject targetDirectory = targetFile.getParent();
FileObjectRepository targetRepository = new FileObjectRepository(targetDirectory);
targetRoot = targetRepository.getRoot();
suffix = getSuffix(targetPath);
filename = IOUtils.getInstance().stripFileExtension(targetFile.getName().toString());
ReportProcessor reportProcessor = createReportProcessor(null);
try {
reportProcessor.processReport();
} finally {
reportProcessor.close();
}
}
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
final FlowHtmlOutputProcessor outputProcessor = new FlowHtmlOutputProcessor();
final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, filename, suffix));
printer.setDataWriter(targetRoot, new DefaultNameGenerator(targetRoot, "content"));
printer.setUrlRewriter(new FileSystemURLRewriter());
outputProcessor.setPrinter(printer);
return new FlowReportProcessor(report, outputProcessor);
}
};
break;
case RTF:
exportTask = new ReportExportTask(report, context, targetFilename, createParentFolder) {
protected ReportProcessor createReportProcessor(OutputStream fout) throws Exception {
StreamRTFOutputProcessor target = new StreamRTFOutputProcessor(report.getConfiguration(), fout, report.getResourceManager());
return new StreamReportProcessor(report, target);
}
};
break;
default:
exportTask = null;
break;
}
if (exportTask != null) {
exportTask.run();
}
if (context.getStatusType() == StatusType.ERROR) {
KettleVFS.getFileObject(targetFilename, getTransMeta()).delete();
if (context.getCause() != null) {
throw context.getCause();
}
throw new KettleStepException(context.getMessage());
}
ResultFile resultFile = new ResultFile(ResultFile.FILE_TYPE_GENERAL, KettleVFS.getFileObject(targetFilename, getTransMeta()), getTransMeta().getName(), getStepname());
resultFile.setComment("This file was created with a Pentaho Reporting Output step");
addResultFile(resultFile);
} catch (Throwable e) {
throw new KettleException(BaseMessages.getString(PKG, "PentahoReportingOutput.Exception.UnexpectedErrorRenderingReport", sourceFilename, targetFilename, outputProcessorType.getDescription()), e);
}
}
use of org.pentaho.reporting.engine.classic.core.modules.output.table.base.FlowReportProcessor in project pentaho-platform by pentaho.
the class JFreeReportDirectoryHtmlComponent method performExport.
@Override
protected boolean performExport(final MasterReport report) {
try {
final File targetFile = getInputFileValue(AbstractJFreeReportComponent.REPORTDIRECTORYHTML_TARGETFILE);
if (targetFile == null) {
return false;
}
File dataDirectory = getInputFileValue(AbstractJFreeReportComponent.REPORTDIRECTORYHTML_DATADIR);
if (dataDirectory == null) {
// $NON-NLS-1$
dataDirectory = new File(targetFile, "data/");
}
final File targetDirectory = targetFile.getParentFile();
if (dataDirectory.exists() && (dataDirectory.isDirectory() == false)) {
dataDirectory = dataDirectory.getParentFile();
if (dataDirectory.isDirectory() == false) {
String msg = // $NON-NLS-1$
Messages.getInstance().getErrorString(// $NON-NLS-1$
"JFreeReportDirectoryComponent.ERROR_0001_INVALID_DIR", dataDirectory.getPath());
throw new ReportProcessingException(msg);
}
} else if (dataDirectory.exists() == false) {
dataDirectory.mkdirs();
}
final FileRepository targetRepository = new FileRepository(targetDirectory);
final ContentLocation targetRoot = targetRepository.getRoot();
final FileRepository dataRepository = new FileRepository(dataDirectory);
final ContentLocation dataRoot = dataRepository.getRoot();
final FlowHtmlOutputProcessor outputProcessor = new FlowHtmlOutputProcessor();
final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, targetFile.getName()));
// $NON-NLS-1$
printer.setDataWriter(dataRoot, new DefaultNameGenerator(targetRoot, "content"));
printer.setUrlRewriter(new FileSystemURLRewriter());
outputProcessor.setPrinter(printer);
final FlowReportProcessor sp = new FlowReportProcessor(report, outputProcessor);
final int yieldRate = getYieldRate();
if (yieldRate > 0) {
sp.addReportProgressListener(new YieldReportListener(yieldRate));
}
sp.processReport();
sp.close();
return true;
} catch (ReportProcessingException e) {
return false;
} catch (ContentIOException e) {
return false;
}
}
use of org.pentaho.reporting.engine.classic.core.modules.output.table.base.FlowReportProcessor in project pentaho-platform by pentaho.
the class JFreeReportExcelComponent method performExport.
@Override
protected boolean performExport(final MasterReport report, final OutputStream outputStream) {
try {
final FlowExcelOutputProcessor target = new FlowExcelOutputProcessor(report.getConfiguration(), outputStream, report.getResourceManager());
final FlowReportProcessor reportProcessor = new FlowReportProcessor(report, target);
if (isDefinedInput(AbstractJFreeReportComponent.WORKBOOK_PARAM)) {
try {
final InputStream inputStream = getInputStream(AbstractJFreeReportComponent.WORKBOOK_PARAM);
target.setTemplateInputStream(inputStream);
} catch (Exception e) {
error(Messages.getInstance().getString("JFreeReportExcelComponent.ERROR_0037_ERROR_READING_REPORT_INPUT"), // $NON-NLS-1$
e);
return false;
}
}
final int yieldRate = getYieldRate();
if (yieldRate > 0) {
reportProcessor.addReportProgressListener(new YieldReportListener(yieldRate));
}
reportProcessor.processReport();
reportProcessor.close();
outputStream.flush();
close();
return true;
} catch (ReportProcessingException e) {
return false;
} catch (IOException e) {
return false;
}
}
use of org.pentaho.reporting.engine.classic.core.modules.output.table.base.FlowReportProcessor in project pentaho-platform by pentaho.
the class JFreeReportZipHtmlComponent method performExport.
@Override
protected boolean performExport(final MasterReport report, final OutputStream outputStream) {
try {
String dataDirectory = getInputStringValue(AbstractJFreeReportComponent.REPORTDIRECTORYHTML_DATADIR);
if (dataDirectory == null) {
// $NON-NLS-1$
dataDirectory = "data";
}
final ZipRepository zipRepository = new ZipRepository();
final ContentLocation root = zipRepository.getRoot();
final ContentLocation data = // $NON-NLS-1$
RepositoryUtilities.createLocation(zipRepository, RepositoryUtilities.split(dataDirectory, "/"));
final FlowHtmlOutputProcessor outputProcessor = new FlowHtmlOutputProcessor();
final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
// $NON-NLS-1$
printer.setContentWriter(root, new DefaultNameGenerator(root, "report.html"));
// $NON-NLS-1$
printer.setDataWriter(data, new DefaultNameGenerator(data, "content"));
printer.setUrlRewriter(new SingleRepositoryURLRewriter());
outputProcessor.setPrinter(printer);
final FlowReportProcessor sp = new FlowReportProcessor(report, outputProcessor);
final int yieldRate = getYieldRate();
if (yieldRate > 0) {
sp.addReportProgressListener(new YieldReportListener(yieldRate));
}
sp.processReport();
zipRepository.write(outputStream);
close();
return true;
} catch (ReportProcessingException e) {
// $NON-NLS-1$
error(Messages.getInstance().getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e);
return false;
} catch (IOException e) {
// $NON-NLS-1$
error(Messages.getInstance().getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e);
return false;
} catch (ContentIOException e) {
// $NON-NLS-1$
error(Messages.getInstance().getString("JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT"), e);
return false;
}
}
use of org.pentaho.reporting.engine.classic.core.modules.output.table.base.FlowReportProcessor in project pentaho-platform by pentaho.
the class JFreeReportComponent method writeXls.
protected boolean writeXls(final MasterReport report, final OutputStream outputStream, final int yieldRate) {
boolean result = false;
try {
final FlowExcelOutputProcessor target = new FlowExcelOutputProcessor(report.getConfiguration(), outputStream, report.getResourceManager());
final FlowReportProcessor reportProcessor = new FlowReportProcessor(report, target);
if (isDefinedInput(AbstractJFreeReportComponent.WORKBOOK_PARAM)) {
target.setTemplateInputStream(getInputStream(AbstractJFreeReportComponent.WORKBOOK_PARAM));
}
if (yieldRate > 0) {
reportProcessor.addReportProgressListener(new YieldReportListener(yieldRate));
}
reportProcessor.processReport();
reportProcessor.close();
outputStream.flush();
result = true;
} catch (Exception e) {
// $NON-NLS-1$
error(Messages.getInstance().getString("JFreeReportExcelComponent.ERROR_0037_ERROR_READING_REPORT_INPUT"), e);
}
return result;
}
Aggregations