/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.components.reports; import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JCheckBox; import javax.swing.filechooser.FileNameExtensionFilter; import com.opendoorlogistics.api.ui.UIFactory.FilenameChangeListener; import com.opendoorlogistics.api.ui.UIFactory.TextChangedListener; import com.opendoorlogistics.core.utils.ui.FileBrowserPanel; import com.opendoorlogistics.core.utils.ui.ShowPanel; import com.opendoorlogistics.core.utils.ui.TextEntryPanel; import com.opendoorlogistics.core.utils.ui.TextEntryPanel.EntryType; import com.opendoorlogistics.core.utils.ui.VerticalLayoutPanel; final class ReporterConfigPanel extends VerticalLayoutPanel { final private ReporterConfig rc; final private FileBrowserPanel compiledReport; // Export options final private JCheckBox exportCheckBox; final private FileBrowserPanel exportDirectory; final private TextEntryPanel exportFilenamePrefix; // Export checkboxes... final private JCheckBox showViewerCheckbox; final private JCheckBox csv; final private JCheckBox docx; final private JCheckBox odt; final private JCheckBox html; final private JCheckBox pdf; final private JCheckBox xls; final private JCheckBox openFileAfterwords; private void updateEnabled() { exportDirectory.setEnabled(rc.isExportToFile()); exportFilenamePrefix.setEnabled(rc.isExportToFile()); csv.setEnabled(rc.isExportToFile()); docx.setEnabled(rc.isExportToFile()); odt.setEnabled(rc.isExportToFile()); html.setEnabled(rc.isExportToFile()); pdf.setEnabled(rc.isExportToFile()); xls.setEnabled(rc.isExportToFile()); openFileAfterwords.setEnabled(rc.isExportToFile()); } ReporterConfigPanel(ReporterConfig rc){ this.rc = rc; TextChangedListener listener = new TextChangedListener() { @Override public void textChange(String newText) { readFromPanel(); } }; ItemListener itemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { readFromPanel(); } }; FilenameChangeListener filenameListener = new FilenameChangeListener() { @Override public void filenameChanged(String newFilename) { readFromPanel(); } }; FileNameExtensionFilter jasperFilter = new FileNameExtensionFilter("Compile Jasper report (.jasper)", "jasper"); compiledReport = new FileBrowserPanel("Compiled report template (.jasper) ", rc.getCompiledReport(), filenameListener, false, "OK", jasperFilter); compiledReport.setToolTipText("Compiled reports can be generated by editing and then exporting the jrxml file in JasperReport's iReport application."); showViewerCheckbox = new JCheckBox("Show report viewer control", rc.isShowViewer()); showViewerCheckbox.setBorder(null); showViewerCheckbox.addItemListener(itemListener); exportCheckBox = new JCheckBox("Export generated report to file", rc.isExportToFile()); exportCheckBox.addItemListener(itemListener); exportCheckBox.setBorder(null); exportDirectory = new FileBrowserPanel("Export directory ", rc.getExportDirectory(), filenameListener, true, "OK"); exportFilenamePrefix = new TextEntryPanel("Export filename prefix ", null, rc.getExportFilenamePrefix(), null, EntryType.String, listener); openFileAfterwords = new JCheckBox("Open file after exporting", rc.isOpenExportFile()); openFileAfterwords.addItemListener(itemListener); csv = new JCheckBox("CSV ", rc.isCsv()); docx = new JCheckBox("Word ", rc.isDocx()); odt = new JCheckBox("OpenOffice ", rc.isOdt()); html = new JCheckBox("HTML ", rc.isHtml()); pdf = new JCheckBox("PDF ", rc.isPdf()); xls = new JCheckBox("Excel ", rc.isXls()); csv.addItemListener(itemListener); docx.addItemListener(itemListener); odt.addItemListener(itemListener); html.addItemListener(itemListener); pdf.addItemListener(itemListener); xls.addItemListener(itemListener); // have separate panel for generation options // add everything to the panel add( compiledReport); addWhitespace(); add(showViewerCheckbox); addWhitespace(); // create a separate panel for export options VerticalLayoutPanel exportPanel = new VerticalLayoutPanel(); add(exportCheckBox); exportPanel.add( exportDirectory); exportPanel.addHalfWhitespace(); exportPanel.addLine(openFileAfterwords,Box.createRigidArea(new Dimension(40, 2)),exportFilenamePrefix, Box.createGlue()); exportPanel.addHalfWhitespace(); // csv.setBorder(null); exportPanel.addLine(csv, xls, html, odt, pdf, docx); exportPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 5)); // exportPanel.setBorder(BorderFactory.createTitledBorder("Report export options")); add(exportPanel); updateEnabled(); } private void readFromPanel() { rc.setCompiledReport(compiledReport.getFilename()); rc.setOpenExportFile(openFileAfterwords.isSelected()); rc.setExportToFile(exportCheckBox.isSelected()); rc.setExportDirectory(exportDirectory.getFilename()); rc.setExportFilenamePrefix(exportFilenamePrefix.getText()); rc.setShowViewer(showViewerCheckbox.isSelected()); rc.setCsv(csv.isSelected()); rc.setDocx(docx.isSelected()); rc.setOdt(odt.isSelected()); rc.setHtml(html.isSelected()); rc.setPdf(pdf.isSelected()); rc.setXls(xls.isSelected()); updateEnabled(); } public static void main(String []args){ ShowPanel.showPanel(new ReporterConfigPanel(new ReporterConfig())); } }