package org.nightlabs.jfire.trade.ui.account.transfer;
import java.util.Collection;
import javax.jdo.FetchPlan;
import javax.jdo.JDOHelper;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.nightlabs.base.ui.layout.WeightedTableLayout;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.base.ui.table.TableContentProvider;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.jfire.accounting.Account;
import org.nightlabs.jfire.accounting.AccountType;
import org.nightlabs.jfire.accounting.ManualMoneyTransfer;
import org.nightlabs.jfire.accounting.MoneyTransfer;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.jfire.transfer.Anchor;
import org.nightlabs.jfire.transfer.Transfer;
import org.nightlabs.jfire.transfer.id.AnchorID;
import org.nightlabs.jfire.transfer.id.TransferID;
import org.nightlabs.l10n.DateFormatter;
import org.nightlabs.l10n.NumberFormatter;
/**
* This composite lists all {@link MoneyTransfer}s of an account in a table.
* @author Chairat Kongarayawetchakun - chairatk[at]nightlabs[dot]de
*/
public class MoneyTransferTable
extends AbstractTableComposite<MoneyTransfer>
{
private TransferID transferID;
/**
* The fetch groups of money transfer data.
*/
public static final String[] FETCH_GROUPS = new String[] {
FetchPlan.DEFAULT,
Transfer.FETCH_GROUP_FROM,
Transfer.FETCH_GROUP_TO,
MoneyTransfer.FETCH_GROUP_CURRENCY,
ManualMoneyTransfer.FETCH_GROUP_DESCRIPTION,
ManualMoneyTransfer.FETCH_GROUP_REASON,
Account.FETCH_GROUP_NAME,
Account.FETCH_GROUP_ACCOUNT_TYPE,
AccountType.FETCH_GROUP_NAME,
LegalEntity.FETCH_GROUP_PERSON};
public MoneyTransferTable(Composite parent, int style)
{
super(parent, style);
}
@Override
protected void createTableColumns(TableViewer tableViewer, Table table)
{
TableColumn tc;
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.timestampTableColumn.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.directionTableColumn.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.otherAccountTableColumn.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.otherAccountTypeTableColumn.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.amountTableColumn.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.reasonTableColumn.text")); //$NON-NLS-1$
WeightedTableLayout layout = new WeightedTableLayout(new int[]{30, 10, 30, 30, 30, 50});
table.setLayout(layout);
table.setLayout(layout);
}
@Override
protected void setTableProvider(TableViewer tableViewer)
{
tableViewer.setContentProvider(new TableContentProvider());
tableViewer.setLabelProvider(new MoneyTransferListLabelProvider());
}
public TransferID getTransferID()
{
return transferID;
}
private AnchorID currentAnchorID;
public void setMoneyTransfers(AnchorID currentAnchorID, Collection<MoneyTransfer> moneyTransfers)
{
if (currentAnchorID == null)
throw new IllegalArgumentException("currentAnchorID == null"); //$NON-NLS-1$
this.currentAnchorID = currentAnchorID;
super.setInput(moneyTransfers);
}
private Anchor getOtherAnchor(MoneyTransfer transfer) {
if (JDOHelper.getObjectId(transfer.getFrom()).equals(currentAnchorID)) {
return transfer.getTo();
} else
return transfer.getFrom();
}
class MoneyTransferListLabelProvider
extends TableLabelProvider
{
public String getColumnText(Object element, int columnIndex)
{
if (element instanceof MoneyTransfer) {
MoneyTransfer moneyTransfer = (MoneyTransfer) element;
Anchor other = getOtherAnchor(moneyTransfer);
switch (columnIndex) {
case(0): return DateFormatter.formatDateShortTimeHM(moneyTransfer.getTimestamp(), false); //Timestamp
case(1): //Direction
if (JDOHelper.getObjectId(moneyTransfer.getFrom()).equals(currentAnchorID)) {
return "->"; //$NON-NLS-1$
}
return "<-"; //$NON-NLS-1$
case(2): //Other
if (other instanceof Account)
return ((Account)other).getName().getText();
else
return ((LegalEntity)other).getPerson().getDisplayName();
case(3): //Other type
if (other instanceof Account)
return ((Account)other).getAccountType().getName().getText();
else
return Messages.getString("org.nightlabs.jfire.trade.ui.account.transfer.MoneyTransferTable.column.legalEntity"); //$NON-NLS-1$
case(4): return NumberFormatter.formatCurrency(moneyTransfer.getAmount(), moneyTransfer.getCurrency(), true); //Amount
case(5): return moneyTransfer.getDescription();
}
return null;
}
return null;
}
}
public void setLoadingStatus()
{
this.currentAnchorID = null;
super.setInput(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.loadingDataPlaceholder")); //$NON-NLS-1$
}
@Override
public void setInput(Object input)
{
throw new UnsupportedOperationException("Use setMoneyTransfers(...) or setLoadingStatus(...) instead!"); //$NON-NLS-1$
}
}