Java tutorial
/* * Copyright 2013 Alessandro Atria * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.dynami.views; import org.dynami.core.type.AssetType; import org.dynami.core.type.OrderType; import org.dynami.core.util.DUtils; import org.dynami.msg.Leg; import org.dynami.msg.Portfolio; import org.dynami.services.EDispatcher; import org.dynami.services.EPortfolioService; import org.dynami.utils.RCPUtils; import org.dynami.utils.UIUtils; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; import org.eclipse.wb.swt.ResourceManager; import org.eclipse.wb.swt.SWTResourceManager; public class PortfolioView extends ViewPart { public static final String ID = "org.dynami.views.PortfolioView"; private Text txtSearch; private Table table; private TableViewer tableViewer; final private AssetTypeFilter stockFilter = new AssetTypeFilter(AssetType.STOCK); final private AssetTypeFilter futureFilter = new AssetTypeFilter(AssetType.FUTURE); final private AssetTypeFilter optionFilter = new AssetTypeFilter(AssetType.OPTION); final private SearchTextFilter filter = new SearchTextFilter(); private final EPortfolioService portfolioService = RCPUtils.getService(EPortfolioService.class); public PortfolioView() { } private final EDispatcher.EServiceListener<Portfolio> portfolioListener = new EDispatcher.EServiceListener<Portfolio>() { @Override public void update(final Portfolio o) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { tableViewer.setInput(o.legs); } }); } }; @Override public void createPartControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(6, false)); { Button btnStockFilter = new Button(container, SWT.TOGGLE); btnStockFilter.setSelection(true); btnStockFilter.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (((Button) e.getSource()).getSelection()) { tableViewer.removeFilter(stockFilter); } else { tableViewer.addFilter(stockFilter); } } }); btnStockFilter.setText("Stock"); } { Button btnFutureFilter = new Button(container, SWT.TOGGLE); btnFutureFilter.setSelection(true); btnFutureFilter.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (((Button) e.getSource()).getSelection()) { tableViewer.removeFilter(futureFilter); } else { tableViewer.addFilter(futureFilter); } } }); btnFutureFilter.setText("Future"); } { Button btnOptionFilter = new Button(container, SWT.TOGGLE); btnOptionFilter.setSelection(true); btnOptionFilter.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (((Button) e.getSource()).getSelection()) { tableViewer.removeFilter(optionFilter); } else { tableViewer.addFilter(optionFilter); } } }); btnOptionFilter.setText("Option"); } { txtSearch = new Text(container, SWT.BORDER); txtSearch.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.ITALIC)); txtSearch.setText("Search"); txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); txtSearch.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { txtSearch.setText(UIUtils.SEARCH_HINT); } @Override public void focusGained(FocusEvent e) { txtSearch.setText(""); } }); txtSearch.addTraverseListener(new TraverseListener() { @Override public void keyTraversed(TraverseEvent event) { if (event.detail == SWT.TRAVERSE_RETURN) { final String search = txtSearch.getText(); if (!UIUtils.SEARCH_HINT.equals(search) && !"".equals(search)) { filter.setSearchText(txtSearch.getText()); tableViewer.addFilter(filter); } else { tableViewer.removeFilter(filter); } } } }); } { Button btnSearch = new Button(container, SWT.NONE); btnSearch.setImage( ResourceManager.getPluginImage("org.eclipse.ui", "/icons/full/etool16/help_search.gif")); } { Button btnRemove = new Button(container, SWT.NONE); btnRemove.setImage(ResourceManager.getPluginImage("org.eclipse.ui", "/icons/full/etool16/clear.gif")); } Composite tbl_composite = new Composite(container, SWT.NONE); tbl_composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 6, 1)); TableColumnLayout tcl_layout = new TableColumnLayout(); tbl_composite.setLayout(tcl_layout); { tableViewer = new TableViewer(tbl_composite, SWT.BORDER | SWT.FULL_SELECTION); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); tableViewer.setUseHashlookup(true); table = tableViewer.getTable(); // table.addMouseListener(new MouseAdapter() { // @Override // public void mouseDoubleClick(MouseEvent e) { // StructuredSelection selection = (StructuredSelection)tableViewer.getSelection(); // if(selection != null){ // Leg leg = (Leg)selection.getFirstElement(); // if(leg != null){ // final Order order = new Order( // leg.getAsset(), // (leg.getQuantity()>0)?OrderCommandType.SELL:OrderCommandType.BUY, // leg.getPrice(), // leg.getQuantity()); // OrderDialog dialog = new OrderDialog(getSite().getShell(), null, order); // dialog.open(); // } // } // } // }); table.setLinesVisible(true); table.setHeaderVisible(true); { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnAsset = tableViewerColumn.getColumn(); tblclmnAsset.setText("Asset"); tcl_layout.setColumnData(tblclmnAsset, new ColumnWeightData(35, true)); //layout.setColumnData(tblclmnAsset, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText(l.asset); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnType = tableViewerColumn.getColumn(); tblclmnType.setText("Type"); tcl_layout.setColumnData(tblclmnType, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText(l.assetType); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnQuantity = tableViewerColumn.getColumn(); tblclmnQuantity.setAlignment(SWT.RIGHT); tblclmnQuantity.setText("Qt."); tcl_layout.setColumnData(tblclmnQuantity, new ColumnWeightData(5, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); int qt = l.quantity * ((l.orderType == OrderType.BUY.type()) ? 1 : -1); cell.setText(String.valueOf(qt)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnGainloss = tableViewerColumn.getColumn(); tblclmnGainloss.setAlignment(SWT.RIGHT); tblclmnGainloss.setText("Profit"); tcl_layout.setColumnData(tblclmnGainloss, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText("" + DUtils.EURO_DECIMAL_FORMAT.format(l.gainLoss)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnDelta = tableViewerColumn.getColumn(); tblclmnDelta.setAlignment(SWT.RIGHT); tblclmnDelta.setText("Delta"); tcl_layout.setColumnData(tblclmnDelta, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText("" + DUtils.DECIMAL_FORMAT.format(l.delta)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnGamma = tableViewerColumn.getColumn(); tblclmnGamma.setAlignment(SWT.RIGHT); tblclmnGamma.setText("Gamma"); tcl_layout.setColumnData(tblclmnGamma, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText("" + DUtils.DECIMAL_FORMAT.format(l.gamma)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnVega = tableViewerColumn.getColumn(); tblclmnVega.setAlignment(SWT.CENTER); tblclmnVega.setText("Vega"); tcl_layout.setColumnData(tblclmnVega, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText("" + DUtils.DECIMAL_FORMAT.format(l.vega)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnTheta = tableViewerColumn.getColumn(); tblclmnTheta.setAlignment(SWT.RIGHT); tblclmnTheta.setText("Theta"); tcl_layout.setColumnData(tblclmnTheta, new ColumnWeightData(10, true)); tableViewerColumn.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { Leg l = (Leg) cell.getElement(); cell.setText("" + DUtils.DECIMAL_FORMAT.format(l.theta)); if (l.gainLoss >= 0) cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); else cell.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED)); } }); } } portfolioService.dispatch().subscribe(portfolioListener); } @Override public void dispose() { portfolioService.dispatch().unsubscribe(portfolioListener); super.dispose(); } @Override public void setFocus() { } } class SearchTextFilter extends ViewerFilter { private String searchString; public void setSearchText(final String s) { // Search must be a substring of the existing value this.searchString = ".*" + s.toUpperCase() + ".*"; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (searchString == null || searchString.length() == 0 || "Search".equals(searchString)) { return true; } // Leg leg = (Leg) element; // if (leg.getAsset().toString().toUpperCase().matches(searchString)) { // return true; // } return false; } } class AssetTypeFilter extends ViewerFilter { String type = null; public AssetTypeFilter(String type) { this.type = type; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { // Leg leg = (Leg)element; // if (type.equals( leg.getAsset().getAssetType() )) { // return false; // } return true; } }