// BudgetReportDialog
package org.javamoney.examples.ez.money.gui.dialog;
import static org.javamoney.examples.ez.common.utility.BorderHelper.createTitledBorder;
import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton;
import static org.javamoney.examples.ez.common.utility.I18NHelper.getSharedProperty;
import static org.javamoney.examples.ez.money.ApplicationProperties.includeDetailsInReport;
import static org.javamoney.examples.ez.money.ApplicationProperties.setIncludeDetailsInReport;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.javamoney.examples.ez.money.gui.chooser.CategoryTotalsFilterChooser;
import org.javamoney.examples.ez.money.gui.chooser.MonthPeriodChooser;
import org.javamoney.examples.ez.money.report.BudgetReport;
import org.javamoney.examples.ez.money.report.BudgetReportWriter;
import org.javamoney.examples.ez.common.gui.CheckBox;
import org.javamoney.examples.ez.common.gui.Panel;
import org.javamoney.examples.ez.common.utility.I18NHelper;
/**
* This class provides a dialog for customizing a budget report.
*/
public
final
class
BudgetReportDialog
extends WebReportDialog
{
/**
* Constructs a new dialog for customizing a budget report.
*/
public
BudgetReportDialog()
{
super(600, 350);
setFilterChooser(new CategoryTotalsFilterChooser());
setMonthPeriodChooser(new MonthPeriodChooser());
createCheckBoxes();
buildPanel();
}
/**
* This method shows a dialog for customizing a budget report.
*/
public
void
showDialog()
{
runDialog();
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
void
buildPanel()
{
Panel panel = getContentPane();
// Build panel.
panel.setFill(GridBagConstraints.BOTH);
panel.add(createDialogHeader(), 0, 0, 1, 1, 0, 0);
panel.add(createCustomizeReportPanel(), 0, 1, 1, 1, 100, 100);
panel.add(createOKCancelButtonPanel(getSharedProperty("create"), getSharedProperty("close"),
new ActionHandler()), 0, 3, 1, 1, 0, 0);
}
private
void
createCheckBoxes()
{
ActionHandler handler = new ActionHandler();
itsCheckBoxes = new CheckBox[1];
for(int len = 0; len < getCheckBoxes().length; ++len)
{
getCheckBoxes()[len] = new CheckBox();
}
buildButton(getCheckBoxes()[INCLUDE_DETAILS], getProperty("details"), handler);
getCheckBoxes()[INCLUDE_DETAILS].setSelected(includeDetailsInReport());
}
private
Panel
createCustomizeReportPanel()
{
Panel panel = new Panel();
// Build panel.
panel.setFill(GridBagConstraints.BOTH);
panel.add(createDateChooserPanel(), 0, 0, 1, 1, 100, 100);
panel.addEmptyCellAt(0, 1);
panel.add(createMoreOptionsPanel(), 0, 2, 1, 1, 0, 0);
panel.setInsets(new Insets(20, 15, 5, 75));
return panel;
}
private
Panel
createDateChooserPanel()
{
Panel panel = new Panel();
// Build panel.
panel.setAnchor(GridBagConstraints.NORTH);
panel.add(getMonthPeriodChooser(), 0, 0, 1, 1, 100, 100);
panel.setBorder(createTitledBorder(getSharedProperty("report_period"), false));
return panel;
}
private
Panel
createMoreOptionsPanel()
{
Panel panel = new Panel();
// Build panel.
panel.setAnchor(GridBagConstraints.WEST);
panel.add(getCheckBoxes()[INCLUDE_DETAILS], 0, 0, 1, 1, 50, 0);
panel.add(getFilterChooser(), 1, 0, 1, 1, 50, 0);
panel.addSpacer(0, 1, 1, 1, 0, 100);
panel.setBorder(createTitledBorder(getSharedProperty("more_options"), false));
return panel;
}
private
BudgetReport
createReport()
{
return BudgetReport.createReport(getMonthPeriodChooser().getStartDate(),
getMonthPeriodChooser().getEndDate(), getFilterChooser().getFilter());
}
private
CheckBox[]
getCheckBoxes()
{
return itsCheckBoxes;
}
private
CategoryTotalsFilterChooser
getFilterChooser()
{
return itsFilterChooser;
}
private
MonthPeriodChooser
getMonthPeriodChooser()
{
return itsMonthPeriodChooser;
}
private
static
String
getProperty(String key)
{
return I18NHelper.getProperty("BudgetReportDialog." + key);
}
private
void
setFilterChooser(CategoryTotalsFilterChooser chooser)
{
itsFilterChooser = chooser;
}
private
void
setMonthPeriodChooser(MonthPeriodChooser chooser)
{
itsMonthPeriodChooser = chooser;
}
//////////////////////////////////////////////////////////////////////////////
// Start of inner classes.
//////////////////////////////////////////////////////////////////////////////
private
class
ActionHandler
implements ActionListener
{
public
void
actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if(source == getCheckBoxes()[INCLUDE_DETAILS])
{
setIncludeDetailsInReport(!includeDetailsInReport());
}
else
{
setAccepted(event.getActionCommand().equals(ACTION_OK));
if(wasAccepted() == true)
{
BudgetReportWriter.generate(createReport());
}
else
{
dispose();
}
}
}
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private CheckBox[] itsCheckBoxes;
private CategoryTotalsFilterChooser itsFilterChooser;
private MonthPeriodChooser itsMonthPeriodChooser;
private static final int INCLUDE_DETAILS = 0;
}