package org.nightlabs.jfire.trade.ui.overview.invoice; import java.util.Comparator; import javax.jdo.FetchPlan; 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.jfire.accounting.Invoice; import org.nightlabs.jfire.accounting.Price; import org.nightlabs.jfire.accounting.PriceFragment; import org.nightlabs.jfire.accounting.PriceFragmentType; import org.nightlabs.jfire.jbpm.graph.def.StatableLocal; import org.nightlabs.jfire.jbpm.graph.def.State; import org.nightlabs.jfire.jbpm.graph.def.StateDefinition; import org.nightlabs.jfire.trade.ArticleContainer; import org.nightlabs.jfire.trade.LegalEntity; import org.nightlabs.jfire.trade.ui.overview.AbstractArticleContainerListComposite; import org.nightlabs.jfire.trade.ui.resource.Messages; import org.nightlabs.l10n.NumberFormatter; import org.nightlabs.util.BaseComparator; public class InvoiceListComposite extends AbstractArticleContainerListComposite<Invoice> { public static final Comparator<Invoice> INVOICE_FINALIZE_DT_COMPARATOR = new Comparator<Invoice>(){ @Override public int compare(Invoice o1, Invoice o2) { int result = BaseComparator.comparatorNullCheck(o1, o2); if (result == BaseComparator.COMPARE_RESULT_NOT_NULL) { int result2 = BaseComparator.comparatorNullCheck(o1.getFinalizeDT(), o2.getFinalizeDT()); if (result2== BaseComparator.COMPARE_RESULT_NOT_NULL) { return o1.getFinalizeDT().compareTo(o2.getFinalizeDT()); } return result2; } return result; } }; public static final Comparator<Invoice> INVOICE_PRICE_COMPARATOR = new Comparator<Invoice>() { @Override public int compare(Invoice o1, Invoice o2) { int result = BaseComparator.comparatorNullCheck(o1, o2); if (result == BaseComparator.COMPARE_RESULT_NOT_NULL) { int result2 = BaseComparator.comparatorNullCheck(o1.getPrice(), o2.getPrice()); if (result2 == BaseComparator.COMPARE_RESULT_NOT_NULL) { return PRICE_COMPARATOR.compare(o1.getPrice(), o2.getPrice()); } return result2; } return result; } }; public static final Comparator<Invoice> INVOICE_AMOUNT_TO_PAY_COMPARATOR = new Comparator<Invoice>() { @Override public int compare(Invoice o1, Invoice o2) { int result = BaseComparator.comparatorNullCheck(o1, o2); if (result == BaseComparator.COMPARE_RESULT_NOT_NULL) { int result2 = BaseComparator.comparatorNullCheck(o1.getInvoiceLocal(), o2.getInvoiceLocal()); if (result2 == BaseComparator.COMPARE_RESULT_NOT_NULL) { return (int) (o1.getInvoiceLocal().getAmountToPay() - o2.getInvoiceLocal().getAmountToPay()); } return result2; } return result; } }; /** * The fetch-groups this list composite needs to display invoices. */ public static final String[] FETCH_GROUPS_INVOICES = new String[] { FetchPlan.DEFAULT, Invoice.FETCH_GROUP_THIS_INVOICE, Invoice.FETCH_GROUP_INVOICE_LOCAL, Invoice.FETCH_GROUP_PRICE, Price.FETCH_GROUP_CURRENCY, Price.FETCH_GROUP_FRAGMENTS, PriceFragmentType.FETCH_GROUP_NAME, PriceFragment.FETCH_GROUP_PRICE_FRAGMENT_TYPE, StatableLocal.FETCH_GROUP_STATE, State.FETCH_GROUP_STATE_DEFINITION, StateDefinition.FETCH_GROUP_NAME, LegalEntity.FETCH_GROUP_PERSON }; public InvoiceListComposite(Composite parent, int style) { super(parent, style); } @Override protected void createAdditionalTableColumns(TableViewer tableViewer, Table table) { TableColumn tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.overview.invoice.InvoiceListComposite.finalizeDateTableColumn.text")); //$NON-NLS-1$ // tableLayout.setColumnData(tc, new ColumnWeightData(10)); addWeightedColumn(10); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.overview.invoice.InvoiceListComposite.finalizeUserTableColumn.text")); //$NON-NLS-1$ // tableLayout.setColumnData(tc, new ColumnWeightData(10)); addWeightedColumn(10); tc = new TableColumn(table, SWT.RIGHT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.overview.invoice.InvoiceListComposite.priceTableColumn.text")); //$NON-NLS-1$ // tableLayout.setColumnData(tc, new ColumnWeightData(10)); addWeightedColumn(10); tc = new TableColumn(table, SWT.RIGHT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.overview.invoice.InvoiceListComposite.amountToPayTableColumn.text")); //$NON-NLS-1$ // tableLayout.setColumnData(tc, new ColumnWeightData(10)); addWeightedColumn(10); } @Override protected String getAdditionalColumnText(Object element, int additionalColumnIndex, int firstAdditionalColumnIndex, int columnIndex) { if (!(element instanceof Invoice)) return ""; //$NON-NLS-1$ Invoice invoice = (Invoice) element; switch (additionalColumnIndex) { case 0: if (invoice.getFinalizeDT() != null) return formatDate(invoice.getFinalizeDT()); break; case 1: if (invoice.getFinalizeUser() != null) return invoice.getFinalizeUser().getName(); break; case 2: if (invoice.getPrice() != null && invoice.getCurrency() != null) return NumberFormatter.formatCurrency(invoice.getPrice().getAmount(), invoice.getCurrency()); break; case 3: if (invoice.getPrice() != null && invoice.getCurrency() != null) return NumberFormatter.formatCurrency(invoice.getInvoiceLocal().getAmountToPay(), invoice.getCurrency()); break; } return ""; //$NON-NLS-1$ } @Override protected Class<? extends ArticleContainer> getArticleContainerClass() { return Invoice.class; } @Override protected Comparator<?> getAdditionalColumnComparator(Object element, int additionalColumnIndex, int firstAdditionalColumnIndex, int columnIndex) { switch (additionalColumnIndex) { case 0: return INVOICE_FINALIZE_DT_COMPARATOR; case 2: return INVOICE_PRICE_COMPARATOR; case 3: return INVOICE_AMOUNT_TO_PAY_COMPARATOR; default: return null; } } }