package org.nightlabs.jfire.trade.ui.transfer.deliver;
import java.text.DateFormat;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
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.jdo.ObjectIDUtil;
import org.nightlabs.jfire.store.deliver.Delivery;
import org.nightlabs.jfire.store.id.DeliveryNoteID;
import org.nightlabs.jfire.trade.Article;
import org.nightlabs.jfire.trade.id.OrderID;
import org.nightlabs.jfire.trade.ui.resource.Messages;
/**
* This table serves to display the deliveries in a {@link PrintQueue}.
*
* @author Tobias Langner <!-- tobias[dot]langner[at]nightlabs[dot]de -->
*/
class DeliveryTable extends AbstractTableComposite<Delivery> {
private static DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
private static class LabelProvider extends TableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
String localOrganisationID = org.nightlabs.jfire.base.login.ui.Login.sharedInstance().getOrganisationID();
if (element instanceof Delivery) {
Delivery delivery = (Delivery) element;
switch (columnIndex) {
case 0: return delivery.getPartner().getPerson().getDisplayName();
case 1: {
Set<DeliveryNoteID> deliveryNoteIDs = delivery.getDeliveryNoteIDs();
StringBuilder sb = new StringBuilder();
for (DeliveryNoteID deliveryNoteID : deliveryNoteIDs) {
if (!localOrganisationID.equals(deliveryNoteID.organisationID))
sb.append(deliveryNoteID.organisationID).append('/');
sb.append(deliveryNoteID.deliveryNoteIDPrefix).append('/');
sb.append(ObjectIDUtil.longObjectIDFieldToString(deliveryNoteID.deliveryNoteID)).append(", "); //$NON-NLS-1$
}
return sb.substring(0, sb.length()-2);
}
case 2: {
Set<OrderID> orderIDs = new HashSet<OrderID>();
for (Article article : delivery.getArticles()) {
orderIDs.add(article.getOrderID());
}
StringBuilder sb = new StringBuilder();
for (OrderID orderID : orderIDs) {
if (!localOrganisationID.equals(orderID.organisationID))
sb.append(orderID.organisationID).append('/');
sb.append(orderID.orderIDPrefix).append('/');
sb.append(ObjectIDUtil.longObjectIDFieldToString(orderID.orderID)).append(", "); //$NON-NLS-1$
}
return sb.substring(0, sb.length()-2);
}
case 3: return dateTimeFormat.format(delivery.getEndDT());
case 4: return Integer.toString(delivery.getArticleIDs().size());
case 5: return ObjectIDUtil.longObjectIDFieldToString(delivery.getDeliveryID());
case 6: return delivery.getUser().getName();
default: return null;
}
}
return null;
}
}
public DeliveryTable(Composite parent, int style) {
super(parent, style, true, SWT.CHECK | SWT.FULL_SELECTION | SWT.BORDER);
getTableViewer().setComparator(new ViewerComparator() {
@Override
public void sort(Viewer viewer, Object[] elements) {
Arrays.sort(elements, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
return ((Delivery)o1).getEndDT().compareTo(((Delivery)o2).getEndDT());
}
});
}
});
}
@Override
protected void createTableColumns(TableViewer tableViewer, Table table) {
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.customerNameTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.column.deliveryNoteIDs")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.column.orderIDs")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.enqueueDateTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.RIGHT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.articleCountTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.RIGHT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.deliveryIDTableColumn.text")); //$NON-NLS-1$
new TableColumn(table, SWT.LEFT).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.deliver.DeliveryTable.userTableColumn.text")); //$NON-NLS-1$
table.setLayout(new WeightedTableLayout(new int[] { 3, -1, -1, -1, -1, -1, 1}, new int[] { -1, 120, 120, 120, 30, 60, -1}));
}
@Override
protected void setTableProvider(TableViewer tableViewer) {
tableViewer.setLabelProvider(new LabelProvider());
tableViewer.setContentProvider(new TableContentProvider());
}
}