package name.abuchen.portfolio.ui.views;
import java.util.EnumSet;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.AccountTransaction;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.ui.AbstractFinanceView;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.dialogs.transactions.AccountTransactionDialog;
import name.abuchen.portfolio.ui.dialogs.transactions.AccountTransferDialog;
import name.abuchen.portfolio.ui.dialogs.transactions.OpenDialogAction;
import name.abuchen.portfolio.ui.dialogs.transactions.SecurityTransactionDialog;
public class AccountContextMenu
{
private AbstractFinanceView owner;
public AccountContextMenu(AbstractFinanceView owner)
{
this.owner = owner;
}
public void menuAboutToShow(IMenuManager manager, final Account account, final Security security)
{
if (account == null)
return;
for (final AccountTransaction.Type type : EnumSet.of( //
AccountTransaction.Type.INTEREST, //
AccountTransaction.Type.DEPOSIT, //
AccountTransaction.Type.REMOVAL, //
AccountTransaction.Type.TAXES, //
AccountTransaction.Type.FEES, //
AccountTransaction.Type.FEES_REFUND, //
AccountTransaction.Type.INTEREST_CHARGE))
{
new OpenDialogAction(owner, type.toString() + "...") //$NON-NLS-1$
.type(AccountTransactionDialog.class) //
.parameters(type) //
.with(account) //
.with(security) //
.addTo(manager);
}
manager.add(new Separator());
new OpenDialogAction(owner, Messages.AccountMenuTransfer) //
.type(AccountTransferDialog.class) //
.with(account) //
.addTo(manager);
manager.add(new Separator());
// show security related actions only if
// (a) a portfolio exists and (b) securities exist
if (!owner.getClient().getActivePortfolios().isEmpty() && !owner.getClient().getSecurities().isEmpty())
{
// preselect a portfolio that has the current
// account as a reference account
final Portfolio[] portfolio = new Portfolio[1];
for (Portfolio p : owner.getClient().getActivePortfolios())
{
if (p.getReferenceAccount().equals(account))
{
portfolio[0] = p;
break;
}
}
new OpenDialogAction(owner, Messages.SecurityMenuBuy + "...") //$NON-NLS-1$
.type(SecurityTransactionDialog.class) //
.parameters(PortfolioTransaction.Type.BUY) //
.with(portfolio[0]) //
.with(security) //
.addTo(manager);
new OpenDialogAction(owner, Messages.SecurityMenuSell + "...") //$NON-NLS-1$
.type(SecurityTransactionDialog.class) //
.parameters(PortfolioTransaction.Type.SELL) //
.with(portfolio[0]) //
.with(security) //
.addTo(manager);
new OpenDialogAction(owner, Messages.SecurityMenuDividends + "...") //$NON-NLS-1$
.type(AccountTransactionDialog.class) //
.parameters(AccountTransaction.Type.DIVIDENDS) //
.with(account) //
.with(security) //
.addTo(manager);
}
new OpenDialogAction(owner, AccountTransaction.Type.TAX_REFUND + "...") //$NON-NLS-1$
.type(AccountTransactionDialog.class) //
.parameters(AccountTransaction.Type.TAX_REFUND) //
.with(account) //
.with(security) //
.addTo(manager);
}
}