package org.nightlabs.jfire.trade.ui.transfer.error;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.nightlabs.base.ui.layout.WeightedTableLayout;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.base.ui.tree.AbstractTreeComposite;
import org.nightlabs.base.ui.tree.TreeContentProvider;
import org.nightlabs.jfire.accounting.pay.PaymentData;
import org.nightlabs.jfire.store.deliver.DeliveryData;
import org.nightlabs.jfire.trade.ui.resource.Messages;
public class TransferTreeComposite
extends AbstractTreeComposite<TransferTreeNode>
{
private static class TransferLabelProvider
extends TableLabelProvider
{
public String getColumnText(Object element, int columnIndex)
{
if (element instanceof TransferTreeNode)
return ((TransferTreeNode)element).getColumnText(columnIndex);
if (columnIndex == 0)
return String.valueOf(element);
return ""; //$NON-NLS-1$
}
@Override
public Image getColumnImage(Object element, int columnIndex)
{
if (element instanceof TransferTreeNode)
return ((TransferTreeNode)element).getColumnImage(columnIndex);
return super.getColumnImage(element, columnIndex);
}
}
private static class TransferContentProvider
extends TreeContentProvider
{
@SuppressWarnings("unchecked")
public Object[] getElements(Object inputElement)
{
if (inputElement instanceof TransferTreeNode)
return ((TransferTreeNode)inputElement).getChildren();
if (inputElement instanceof Object[]) {
List<TransferTreeNode> result = new ArrayList<TransferTreeNode>();
Object[] oa = (Object[]) inputElement;
for (Object object : oa) {
if (object instanceof Collection) {
for (Iterator it = ((Collection)object).iterator(); it.hasNext(); ) {
Object o = it.next();
if (o instanceof PaymentData)
result.add(new PaymentTreeNode(((PaymentData)o).getPayment()));
else if (o instanceof DeliveryData)
result.add(new DeliveryTreeNode(((DeliveryData)o).getDelivery()));
else
throw new IllegalStateException("invalid input element (PaymentData or DeliveryData expected): " + inputElement); //$NON-NLS-1$
}
}
else
throw new IllegalStateException("invalid input element (Collection expected): " + object + " inputElement: " + inputElement); //$NON-NLS-1$ //$NON-NLS-2$
}
return result.toArray();
}
throw new IllegalStateException("invalid input element (Object[] expected): " + inputElement); //$NON-NLS-1$
}
@Override
public Object[] getChildren(Object parentElement)
{
if (parentElement instanceof TransferTreeNode)
return ((TransferTreeNode)parentElement).getChildren();
return super.getChildren(parentElement);
}
@Override
public boolean hasChildren(Object element)
{
if (element instanceof TransferTreeNode)
return ((TransferTreeNode)element).hasChildren();
return super.hasChildren(element);
}
}
public TransferTreeComposite(Composite parent)
{
super(parent, AbstractTableComposite.DEFAULT_STYLE_SINGLE_BORDER);
}
public TransferTreeComposite(Composite parent, int style)
{
super(parent, style);
}
@Override
public void createTreeColumns(Tree tree)
{
tree.setHeaderVisible(true);
TreeColumn tc;
tc = new TreeColumn(tree, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.error.TransferTreeComposite.typeOrPhaseTableColumn.text")); //$NON-NLS-1$
tc = new TreeColumn(tree, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.error.TransferTreeComposite.amountOrResultStateTableColumn.text")); //$NON-NLS-1$
tc = new TreeColumn(tree, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.error.TransferTreeComposite.totalStateTableColumn.text")); //$NON-NLS-1$
tc = new TreeColumn(tree, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.error.TransferTreeComposite.rollbackOrErrorMessageTableColumn.text")); //$NON-NLS-1$
tree.setLayout(new WeightedTableLayout(
new int[] { -1, -1, -1, 10 },
new int[] { 150, 150, 100, -1 }));
}
@Override
public void setTreeProvider(TreeViewer treeViewer)
{
treeViewer.setContentProvider(new TransferContentProvider());
treeViewer.setLabelProvider(new TransferLabelProvider());
}
@Override
public void setInput(Object input)
{
throw new UnsupportedOperationException("use setInput(List<PaymentData> paymentDatas, List<DeliveryData> deliveryDatas) instead!"); //$NON-NLS-1$
}
public void setInput(List<PaymentData> paymentDatas, List<DeliveryData> deliveryDatas)
{
if (paymentDatas == null && deliveryDatas != null)
super.setInput(new Object[] { deliveryDatas });
else if (paymentDatas != null && deliveryDatas == null)
super.setInput(new Object[] { paymentDatas });
else if (paymentDatas != null && deliveryDatas != null)
super.setInput(new Object[] { paymentDatas, deliveryDatas });
else
throw new IllegalArgumentException("paymentDatas and deliveryDatas must not both be null!"); //$NON-NLS-1$
}
}