Java tutorial
/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.ui.marketdata; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.TimeZone; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import com.quantcomponents.core.model.BareDate; import com.quantcomponents.core.model.IContract; public class NewHistoricalDataPage2 extends WizardPage { private static final int SORT_ASCENDING = 1; private IContract selectedContract; private IStructuredSelection selection; private TableViewer contractListViewer; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); protected NewHistoricalDataPage2() { super("Select contract"); } public TableViewer getContractListViewer() { return contractListViewer; } @Override public void createControl(Composite parent) { // root container Composite rootContainer = new Composite(parent, SWT.NULL); GridLayout rootLayout = new GridLayout(); rootLayout.verticalSpacing = 15; rootLayout.numColumns = 1; rootContainer.setLayout(rootLayout); Composite contractTableContainer = new Composite(rootContainer, SWT.NULL); GridData contractTableLayoutData = new GridData(GridData.FILL_BOTH); contractTableContainer.setLayoutData(contractTableLayoutData); contractTableContainer.setLayout(new FillLayout()); contractListViewer = new TableViewer(contractTableContainer, SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); TableViewerColumn viewColId = new TableViewerColumn(contractListViewer, SWT.NONE); viewColId.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getBrokerID(); } }); TableColumn columnId = viewColId.getColumn(); columnId.setText("Broker ID"); columnId.setWidth(100); columnId.setResizable(true); TableViewerColumn viewColDesc = new TableViewerColumn(contractListViewer, SWT.NONE); viewColDesc.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getContractDescription().getLongName(); } }); TableColumn columnDesc = viewColDesc.getColumn(); columnDesc.setText("Description"); columnDesc.setWidth(140); columnDesc.setResizable(true); TableViewerColumn viewColTicker = new TableViewerColumn(contractListViewer, SWT.NONE); viewColTicker.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getSymbol(); } }); TableColumn columnTicker = viewColTicker.getColumn(); columnTicker.setText("Ticker"); columnTicker.setWidth(50); columnTicker.setResizable(true); TableViewerColumn viewColType = new TableViewerColumn(contractListViewer, SWT.NONE); viewColType.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getSecurityType().name(); } }); TableColumn columnType = viewColType.getColumn(); columnType.setText("Type"); columnType.setWidth(40); columnType.setResizable(true); TableViewerColumn viewColCcy = new TableViewerColumn(contractListViewer, SWT.NONE); viewColCcy.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getCurrency().getCurrencyCode(); } }); TableColumn columnCcy = viewColCcy.getColumn(); columnCcy.setText("Ccy"); columnCcy.setWidth(40); columnCcy.setResizable(true); TableViewerColumn viewColExchange = new TableViewerColumn(contractListViewer, SWT.NONE); viewColExchange.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; return c.getExchange(); } }); TableColumn columnExchange = viewColExchange.getColumn(); columnExchange.setText("Exchange"); columnExchange.setWidth(100); columnExchange.setResizable(true); TableViewerColumn viewColExpiry = new TableViewerColumn(contractListViewer, SWT.NONE); viewColExpiry.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { IContract c = (IContract) element; BareDate expiryDate = c.getExpiryDate(); if (expiryDate != null) { return sdf.format(expiryDate.getDate(TimeZone.getDefault())); } else { return ""; } } }); TableColumn columnExpiry = viewColExpiry.getColumn(); columnExpiry.setText("Expiry"); columnExpiry.setWidth(90); columnExpiry.setResizable(true); TableViewerColumn viewColStrike = new TableViewerColumn(contractListViewer, SWT.NONE); viewColStrike.setLabelProvider(new ColumnLabelProvider() { private DecimalFormat doubleFormat = new DecimalFormat("0.000"); @Override public String getText(Object element) { IContract c = (IContract) element; Double strike = c.getStrike(); if (strike != null) { return doubleFormat.format(strike); } else { return ""; } } }); TableColumn columnStrike = viewColStrike.getColumn(); columnStrike.setText("Strike"); columnStrike.setWidth(80); columnStrike.setResizable(true); Table table = contractListViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); table.setSortColumn(columnDesc); table.setSortDirection(SORT_ASCENDING); contractListViewer.setContentProvider(new ArrayContentProvider()); contractListViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { selection = (IStructuredSelection) event.getSelection(); if (selection != null) { Object firstElement = selection.getFirstElement(); if (firstElement != null && firstElement instanceof IContract) { selectedContract = (IContract) firstElement; setPageComplete(true); } } } }); contractListViewer.setComparator(new ViewerComparator() { @Override public int compare(Viewer viewer, Object e1, Object e2) { IContract c1 = (IContract) e1; IContract c2 = (IContract) e2; int cmp = c1.getContractDescription().getLongName() .compareToIgnoreCase(c2.getContractDescription().getLongName()); if (cmp != 0) { return cmp; } if (c1.getExpiryDate() != null && c2.getExpiryDate() != null) { cmp = c1.getExpiryDate().compareTo(c2.getExpiryDate()); if (cmp != 0) { return cmp; } } if (c1.getExchange() != null && c2.getExchange() != null) { cmp = c1.getExchange().compareTo(c2.getExchange()); if (cmp != 0) { return cmp; } } return 0; } }); setControl(rootContainer); } public IContract getSelectedContract() { return selectedContract; } @Override public boolean isPageComplete() { return selectedContract != null; } }