/** * */ package org.nightlabs.jfire.reporting.ui.viewer; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.nightlabs.base.ui.app.AbstractApplication; import org.nightlabs.jfire.reporting.layout.render.RenderedReportLayout; import org.nightlabs.jfire.reporting.ui.ReportingPlugin; import org.nightlabs.jfire.reporting.ui.layout.PreparedRenderedReportLayout; import org.nightlabs.jfire.reporting.ui.resource.Messages; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.util.IOUtil; /** * @author Alexander Bieber <alex [AT] nightlabs [DOT] de> * */ public abstract class AbstractRenderedReportHandler implements RenderedReportHandler { public File createRenderedReportFolder(RenderedReportLayout layout) { File file = new File( AbstractApplication.getRootDir()+File.separator+ "report_tmp"+File.separator+ //$NON-NLS-1$ "rendered"+File.separator+ //$NON-NLS-1$ layout.getHeader().getReportRegistryItemID().organisationID+"_"+layout.getHeader().getReportRegistryItemID().reportRegistryItemID+File.separator+ //$NON-NLS-1$ layout.getHeader().getOutputFormat().toString()+File.separator+ Long.toHexString(layout.getHeader().getTimestamp().getTime()) ); ReportingPlugin.createReportTempFolder(); // if (file.exists()) { // if (!Utils.deleteDirectoryRecursively(file)) // throw new IllegalStateException("Could not delete rendered report tmp folder "+file); // } if (file.exists()) return file; if (!file.exists()) { if (!file.mkdirs()) throw new IllegalStateException("Could not create rendered report tmp folder "+file); //$NON-NLS-1$ } return file; } /** * Default implementation returns the URL to the layouts entry file (see {@link RenderedReportLayout#getHeader()}). * It will unzip the data first if the header indicates that the entries are zipped. * * * @see org.nightlabs.jfire.reporting.ui.viewer.RenderedReportHandler#prepareRenderedReportLayout(ProgressMonitor, RenderedReportLayout) */ public PreparedRenderedReportLayout prepareRenderedReportLayout(ProgressMonitor monitor, RenderedReportLayout layout) { File folder = createRenderedReportFolder(layout); File zip = new File(folder, "renderedLayout.zip"); //$NON-NLS-1$ File file = new File(folder, layout.getHeader().getEntryFileName()); if (!layout.getHeader().isZipped()) { // redirect writing to entry file zip = file; } try { monitor.setTaskName(Messages.getString("org.nightlabs.jfire.reporting.ui.viewer.AbstractRenderedReportHandler.saveProgressMonitor.storeLayoutToDiskTask.name")); //$NON-NLS-1$ if (!zip.exists()) { // if (!zip.delete()) // throw new IllegalStateException("Could not delete zip file "+zip); // } BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(zip)); out.write((byte[])layout.getData()); out.close(); } } catch (Exception e) { throw new RuntimeException(e); } if (layout.getHeader().isZipped()) { monitor.setTaskName(Messages.getString("org.nightlabs.jfire.reporting.ui.viewer.AbstractRenderedReportHandler.saveProgressMonitor.unzipLayoutTask.name")); //$NON-NLS-1$ try { IOUtil.unzipArchive(zip, folder); } catch (IOException e) { throw new IllegalStateException("Could not unzip rendered report layout", e); //$NON-NLS-1$ } } // URL fileURL = null; // try { // fileURL = file.toURL(); // } catch (MalformedURLException e) { // throw new RuntimeException(e); // } return new PreparedRenderedReportLayout(layout, file); } }