// BudgetComparator
package org.javamoney.examples.ez.money.gui.table.comparator;
import static org.javamoney.examples.ez.common.utility.CompareHelper.compareAmounts;
import static org.javamoney.examples.ez.common.utility.CompareHelper.compareKeys;
import static org.javamoney.examples.ez.common.utility.CompareHelper.compareObjects;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.BALANCE_COLUMN;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.BUDGET_COLUMN;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.CHANGE_COLUMN;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.ID_COLUMN;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.STARTING_BALANCE_COLUMN;
import static org.javamoney.examples.ez.money.gui.table.BudgetTable.TYPE_COLUMN;
import org.javamoney.examples.ez.money.model.dynamic.total.Budget;
import org.javamoney.examples.ez.common.gui.table.DataTableComparator;
/**
* This class facilitates comparing budgets in a table.
*/
public
final
class
BudgetComparator
extends DataTableComparator<Budget>
{
/**
* Constructs a new comparator.
*/
public
BudgetComparator()
{
super(TYPE_COLUMN);
}
/**
* This method compares two budgets.
*
* @param budget1 A budget to compare.
* @param budget2 A budget to compare.
*
* @return The result of comparing two budgets.
*/
@Override
public
int
compare(Budget budget1, Budget budget2)
{
int result = 0;
// Ensure the summary is always at the bottom.
if(budget1.getType().isSummary() == true)
{
result = 1;
}
else if(budget2.getType().isSummary() == true)
{
result = -1;
}
else if(getColumn() == BALANCE_COLUMN)
{
result = compareAmounts(budget2.getBalance(), budget1.getBalance(), invertSort());
}
else if(getColumn() == BUDGET_COLUMN)
{
result = compareAmounts(budget2.getAmount(), budget1.getAmount(), invertSort());
}
else if(getColumn() == CHANGE_COLUMN)
{
result = compareAmounts(budget2.getChange(), budget1.getChange(), invertSort());
}
else if(getColumn() == ID_COLUMN)
{
result = compareObjects(budget1, budget2, invertSort());
}
else if(getColumn() == STARTING_BALANCE_COLUMN)
{
result = compareAmounts(budget2.getStartingBalance(),
budget1.getStartingBalance(), invertSort());
}
else
{
result = compareKeys(budget1.getType(), budget2.getType(), invertSort());
}
return result;
}
}