org.dynami.views.PortfolioView.java Source code

Java tutorial

Introduction

Here is the source code for org.dynami.views.PortfolioView.java

Source

/*
 * 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;
    }
}