package org.nightlabs.jfire.trade.ui.overview.offer;
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.Price;
import org.nightlabs.jfire.accounting.PriceFragmentType;
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.Offer;
import org.nightlabs.jfire.trade.OfferLocal;
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;
/**
* @author Daniel.Mazurek [at] NightLabs [dot] de
*/
public class OfferListComposite
extends AbstractArticleContainerListComposite<Offer>
{
/**
* The fetch-groups this list composite needs to display offers.
*/
public static final String[] FETCH_GROUPS_OFFER = {
FetchPlan.DEFAULT,
Offer.FETCH_GROUP_CREATE_USER,
Offer.FETCH_GROUP_CUSTOMER,
Offer.FETCH_GROUP_VENDOR,
Offer.FETCH_GROUP_CURRENCY,
Offer.FETCH_GROUP_PRICE,
Offer.FETCH_GROUP_FINALIZE_USER,
Offer.FETCH_GROUP_OFFER_LOCAL,
Offer.FETCH_GROUP_STATE,
Price.FETCH_GROUP_CURRENCY,
Price.FETCH_GROUP_FRAGMENTS,
PriceFragmentType.FETCH_GROUP_NAME,
State.FETCH_GROUP_STATE_DEFINITION,
StateDefinition.FETCH_GROUP_NAME,
LegalEntity.FETCH_GROUP_PERSON,
OfferLocal.FETCH_GROUP_THIS_OFFER_LOCAL
};
public static final Comparator<Offer> OFFER_FINALIZE_DT_COMPARATOR = new Comparator<Offer>(){
@Override
public int compare(Offer o1, Offer 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<Offer> OFFER_PRICE_COMPARATOR = new Comparator<Offer>() {
@Override
public int compare(Offer o1, Offer 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 OfferListComposite(Composite parent, int style) {
super(parent, style);
}
/**
* @param parent
* @param style
* @param initTable
* @param viewerStyle
*/
public OfferListComposite(Composite parent, int style, boolean initTable,
int viewerStyle) {
super(parent, style, initTable, viewerStyle);
}
@Override
protected Class<? extends ArticleContainer> getArticleContainerClass() {
return Offer.class;
}
@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.offer.OfferListComposite.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.offer.OfferListComposite.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.offer.OfferListComposite.priceTableColumn.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 Offer))
return ""; //$NON-NLS-1$
Offer offer = (Offer) element;
switch (additionalColumnIndex) {
case 0:
if (offer.getFinalizeDT() != null)
return formatDate(offer.getFinalizeDT());
break;
case 1:
if (offer.getFinalizeUser() != null)
return offer.getFinalizeUser().getName();
break;
case 2:
if (offer.getPrice() != null && offer.getCurrency() != null)
return NumberFormatter.formatCurrency(offer.getPrice().getAmount(), offer.getCurrency());
break;
}
return ""; //$NON-NLS-1$
}
@Override
protected Comparator<?> getAdditionalColumnComparator(Object element,
int additionalColumnIndex, int firstAdditionalColumnIndex,
int columnIndex) {
switch (additionalColumnIndex) {
case 0: return OFFER_FINALIZE_DT_COMPARATOR;
case 2: return OFFER_PRICE_COMPARATOR;
default: return null;
}
}
}