1 13 package org.pentaho.plugin.jfreereport.outputs; 14 15 import java.awt.Dialog ; 16 import java.awt.Frame ; 17 import java.awt.event.WindowAdapter ; 18 import java.awt.event.WindowEvent ; 19 20 import org.jfree.report.JFreeReport; 21 import org.jfree.report.ReportProcessingException; 22 import org.jfree.report.modules.gui.base.PreviewDialog; 23 import org.jfree.report.modules.gui.base.ReportControler; 24 import org.jfree.report.util.CloseableTableModel; 25 import org.jfree.ui.RefineryUtilities; 26 27 32 public class JFreeReportPreviewSwingComponent extends 33 AbstractGenerateContentComponent { 34 private static final long serialVersionUID = -8158403113060631980L; 35 36 private static class CloseReportListener extends WindowAdapter { 37 private CloseableTableModel reportData; 38 39 public CloseReportListener(CloseableTableModel reportData) { 40 if (reportData == null) { 41 throw new NullPointerException (); 42 } 43 this.reportData = reportData; 44 } 45 46 49 public void windowClosed(WindowEvent e) { 50 this.reportData.close(); 51 } 52 } 53 54 public JFreeReportPreviewSwingComponent() { 55 } 56 57 public void done() { 58 } 60 61 protected boolean performExport(final JFreeReport report) { 62 try { 63 PreviewDialog dialog = createDialog(report); 64 65 final boolean progressBar = getInputBooleanValue(REPORTSWING_PROGRESSBAR, 66 true); 67 final boolean progressDialog = getInputBooleanValue( 68 REPORTSWING_PROGRESSDIALOG, true); 69 70 dialog.getBase().setProgressDialogEnabled(progressBar); 71 dialog.getBase().setProgressDialogEnabled(progressDialog); 72 final ReportControler reportControler = getReportControler(); 73 if (reportControler != null) { 74 dialog.getBase().setReportControler(reportControler); 75 } 76 dialog.pack(); 77 if (dialog.getParent() != null) { 78 RefineryUtilities.centerDialogInParent(dialog); 79 } else { 80 RefineryUtilities.centerFrameOnScreen(dialog); 81 } 82 83 if (dialog.isModal() == false 84 && (report.getData() instanceof CloseableTableModel)) { 85 dialog.addWindowListener(new CloseReportListener( 86 (CloseableTableModel) report.getData())); 87 } 88 dialog.setVisible(true); 89 90 if (dialog.isModal() && (report.getData() instanceof CloseableTableModel)) { 91 CloseableTableModel ctm = (CloseableTableModel) report.getData(); 92 ctm.close(); 93 } 94 95 return true; 96 } catch (ReportProcessingException e) { 97 return false; 98 } 99 } 100 101 private ReportControler getReportControler() { 102 if (isDefinedInput(REPORTSWING_REPORTCONTROLLER)) { 103 Object controler = getInputValue(REPORTSWING_REPORTCONTROLLER); 104 if (controler instanceof ReportControler) { 105 return (ReportControler) controler; 106 } 107 } 108 return null; 109 } 110 111 private PreviewDialog createDialog(final JFreeReport report) 112 throws ReportProcessingException { 113 final boolean modal = getInputBooleanValue(REPORTSWING_MODAL, true); 114 115 if (isDefinedInput(REPORTSWING_PARENTDIALOG)) { 116 Object parent = getInputValue(REPORTSWING_PARENTDIALOG); 117 if (parent instanceof Dialog ) { 118 return new PreviewDialog(report, (Dialog ) parent, modal); 119 } else if (parent instanceof Frame ) { 120 return new PreviewDialog(report, (Frame ) parent, modal); 121 } 122 } 123 124 final PreviewDialog previewDialog = new PreviewDialog(report); 125 previewDialog.setModal(modal); 126 return previewDialog; 127 } 128 } 129 | Popular Tags |