// TotalsPanel
package org.javamoney.examples.ez.money.gui.view.totals;
import static org.javamoney.examples.ez.money.KeywordKeys.TOTAL;
import static org.javamoney.examples.ez.money.model.dynamic.total.CategoryTotalTypeKeys.EXPENSE_SUMMARY;
import static org.javamoney.examples.ez.money.model.dynamic.total.CategoryTotalTypeKeys.INCOME_SUMMARY;
import static org.javamoney.examples.ez.money.report.TotalReportTypeKeys.EXPENSES;
import static org.javamoney.examples.ez.money.report.TotalReportTypeKeys.INCOME;
import static org.javamoney.examples.ez.money.report.TotalReportTypeKeys.TRANSFERS;
import java.awt.CardLayout;
import java.awt.GridBagConstraints;
import java.util.Date;
import javax.swing.JPanel;
import org.javamoney.examples.ez.money.model.dynamic.total.IncomeExpenseTotal;
import org.javamoney.examples.ez.money.model.dynamic.total.TotalFilter;
import org.javamoney.examples.ez.money.model.dynamic.total.TransferTotal;
import org.javamoney.examples.ez.money.report.CategoryReport;
import org.javamoney.examples.ez.money.report.TotalReportTypeKeys;
import org.javamoney.examples.ez.common.gui.Panel;
/**
* This class facilitates viewing the totals.
*/
public
final
class
TotalsPanel
extends Panel
{
/**
* Constructs a new totals panel.
*/
public
TotalsPanel()
{
setCards(new JPanel(new CardLayout()));
setExpensePanel(new CategoryTotalPanel());
setIncomePanel(new CategoryTotalPanel());
setTransferPanel(new TransferTotalPanel());
// Add panels to cards.
getCards().add(getExpensePanel(), EXPENSES.toString());
getCards().add(getIncomePanel(), INCOME.toString());
getCards().add(getTransferPanel(), TRANSFERS.toString());
// Build panel.
setFill(GridBagConstraints.BOTH);
add(getCards(), 0, 0, 1, 1, 100, 100);
}
/**
* This method shows the totals for the specified key.
*
* @param key The type of totals to show.
*/
public
void
showTotalsFor(TotalReportTypeKeys key)
{
((CardLayout)getCards().getLayout()).show(getCards(), key.toString());
}
/**
* This method updates the totals for transactions that occurred between the
* start and end dates inclusive, and that are accepted by the specified
* filter.
*
* @param start The start date.
* @param end The end date.
* @param filter The filter to use.
*/
public
void
updateView(Date start, Date end, TotalFilter filter)
{
// Clear data.
getExpensePanel().clear();
getIncomePanel().clear();
getTransferPanel().clear();
createReportAndDisplayResults(start, end, filter);
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
void
createReportAndDisplayResults(Date start, Date end, TotalFilter filter)
{
CategoryReport report = CategoryReport.createReport(start, end, filter);
IncomeExpenseTotal expenses = new IncomeExpenseTotal(EXPENSE_SUMMARY, TOTAL.toString());
IncomeExpenseTotal income = new IncomeExpenseTotal(INCOME_SUMMARY, TOTAL.toString());
// Add expense totals.
for(IncomeExpenseTotal total : report.getExpenses())
{
getExpensePanel().getTable().add(total);
// Combine all the expense totals into the total.
expenses.setAmount(expenses.getAmount() + total.getAmount());
}
getExpensePanel().getTable().add(expenses);
// Add income totals.
for(IncomeExpenseTotal total : report.getIncome())
{
getIncomePanel().getTable().add(total);
// Combine all the income totals into the total.
income.setAmount(income.getAmount() + total.getAmount());
}
getIncomePanel().getTable().add(income);
// Add transfer totals.
for(TransferTotal total : report.getTransfers())
{
getTransferPanel().getTable().add(total);
}
// Display results.
getExpensePanel().getTable().display();
getIncomePanel().getTable().display();
getTransferPanel().getTable().display();
}
private
JPanel
getCards()
{
return itsCards;
}
private
CategoryTotalPanel
getExpensePanel()
{
return itsExpensePanel;
}
private
CategoryTotalPanel
getIncomePanel()
{
return itsIncomePanel;
}
private
TransferTotalPanel
getTransferPanel()
{
return itsTransferPanel;
}
private
void
setCards(JPanel panel)
{
itsCards = panel;
}
private
void
setExpensePanel(CategoryTotalPanel panel)
{
itsExpensePanel = panel;
}
private
void
setIncomePanel(CategoryTotalPanel panel)
{
itsIncomePanel = panel;
}
private
void
setTransferPanel(TransferTotalPanel panel)
{
itsTransferPanel = panel;
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private JPanel itsCards;
private CategoryTotalPanel itsExpensePanel;
private CategoryTotalPanel itsIncomePanel;
private TransferTotalPanel itsTransferPanel;
}