package org.nightlabs.jfire.trade.ui.repository.transfer; import java.util.Collection; import java.util.Map; import javax.jdo.FetchPlan; import javax.jdo.JDOHelper; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableLayout; 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.table.AbstractTableComposite; import org.nightlabs.base.ui.table.TableLabelProvider; import org.nightlabs.jfire.store.ProductTransfer; import org.nightlabs.jfire.store.ProductType; import org.nightlabs.jfire.store.Repository; 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.l10n.DateFormatter; import org.nightlabs.util.Util; public class ProductTransferTable extends AbstractTableComposite<ProductTransfer> { public static final String[] FETCH_GROUPS_PRODUCT_TRANSFER = { FetchPlan.DEFAULT, Transfer.FETCH_GROUP_THIS_TRANSFER, ProductTransfer.FETCH_GROUP_PRODUCT_TYPE_ID_2_PRODUCT_COUNT_MAP, // ProductTransfer.FETCH_GROUP_PRODUCT_COUNT, LegalEntity.FETCH_GROUP_PERSON, Repository.FETCH_GROUP_NAME, Repository.FETCH_GROUP_OWNER, ProductType.FETCH_GROUP_NAME }; private AnchorID currentRepositoryID; public static enum Direction { incoming, outgoing } private class ProductTransferLabelProvider extends TableLabelProvider { public String getColumnText(Object element, int columnIndex) { if (!(element instanceof ProductTransfer)) { if (columnIndex == 0) return String.valueOf(element); return ""; //$NON-NLS-1$ } ProductTransfer productTransfer = (ProductTransfer) element; Anchor other; Direction direction; if (Util.equals(currentRepositoryID, JDOHelper.getObjectId(productTransfer.getFrom()))) { direction = Direction.outgoing; other = productTransfer.getTo(); } else if (Util.equals(currentRepositoryID, JDOHelper.getObjectId(productTransfer.getTo()))) { direction = Direction.incoming; other = productTransfer.getFrom(); } else throw new IllegalStateException("Neither ProductTransfer.from nor ProductTransfer.to is the current repository! currentRepositoryID=\"" + currentRepositoryID + "\" productTransferPK=\"" + productTransfer.getPrimaryKey() + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ switch (columnIndex) { case 0: return DateFormatter.formatDateShortTimeHMS(productTransfer.getTimestamp(), false); case 1: { StringBuffer sb = new StringBuffer(); for (Map.Entry<ProductType, Integer> me : productTransfer.getProductType2productCountMap().entrySet()) { if (sb.length() > 0) sb.append(", "); //$NON-NLS-1$ sb.append(me.getKey().getName().getText()); sb.append(" ["); //$NON-NLS-1$ sb.append(me.getValue()); sb.append(']'); } return sb.toString(); } case 2: return direction.name(); case 3: String otherStr = null; if (other instanceof Repository) otherStr = ((Repository)other).getName().getText(); if (other instanceof LegalEntity) otherStr = ((LegalEntity)other).getPerson().getDisplayName(); if (otherStr == null || "".equals(otherStr)) //$NON-NLS-1$ return String.valueOf(JDOHelper.getObjectId(other)); return otherStr; case 4: if (other instanceof Repository) return ((Repository)other).getOwner().getPerson().getDisplayName(); break; case 5: return productTransfer.getInitiator().getName(); case 6: return productTransfer.getClass().getName(); // TODO localise! } return ""; //$NON-NLS-1$ } } public ProductTransferTable(Composite parent, int style) { super(parent, style); } @Override protected void createTableColumns(TableViewer tableViewer, Table table) { TableColumn tc; TableLayout layout = new TableLayout(); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.timeStampColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnPixelData(140)); tc = new TableColumn(table, SWT.RIGHT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.productTypeAndQuantityColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(30)); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.directionColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnPixelData(80)); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.fromOrToColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(30)); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.repositoryOwnerColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(30)); tc = new TableColumn(table, SWT.LEFT); tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.userColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(20)); tc = new TableColumn(table, SWT.RIGHT); // TODO LEFT when localised! tc.setText(Messages.getString("org.nightlabs.jfire.trade.ui.repository.transfer.ProductTransferTable.transferTypeColumn.text")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(20)); table.setLayout(layout); } @Override protected void setTableProvider(TableViewer tableViewer) { tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new ProductTransferLabelProvider()); } public void setProductTransfers(AnchorID currentRepositoryID, Collection<ProductTransfer> productTransfers) { if (currentRepositoryID == null) throw new IllegalArgumentException("currentRepositoryID == null"); //$NON-NLS-1$ this.currentRepositoryID = currentRepositoryID; super.setInput(productTransfers); } public void setLoadingStatus() { this.currentRepositoryID = 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 setProductTransfers(...) or setLoadingStatus(...) instead!"); //$NON-NLS-1$ } }