net.sourceforge.eclipsetrader.core.ui.views.EventsView.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.eclipsetrader.core.ui.views.EventsView.java

Source

/*
 * Copyright (c) 2004-2006 Marco Maccaferri and others.
 * 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:
 *     Marco Maccaferri - initial API and implementation
 */

package net.sourceforge.eclipsetrader.core.ui.views;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import net.sourceforge.eclipsetrader.core.CorePlugin;
import net.sourceforge.eclipsetrader.core.ICollectionObserver;
import net.sourceforge.eclipsetrader.core.db.Event;
import net.sourceforge.eclipsetrader.core.db.PopupEvent;
import net.sourceforge.eclipsetrader.core.ui.dialogs.EventDetailsDialog;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;

public class EventsView extends ViewPart implements ICollectionObserver {
    public static final String VIEW_ID = "net.sourceforge.eclipsetrader.views.events"; //$NON-NLS-1$
    Table table;
    Action removeSelectedAction;
    Action removeAllAction;
    SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy"); //$NON-NLS-1$
    SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$
    ViewEventDetailsDialog dialog;
    private Comparator comparator = new Comparator() {
        public int compare(Object arg0, Object arg1) {
            return ((Event) arg1).getDate().compareTo(((Event) arg0).getDate());
        }
    };
    private DisposeListener dialogDisposeListener = new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            dialog = null;
        }
    };

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite)
     */
    public void init(IViewSite site) throws PartInitException {
        IToolBarManager toolBarManager = site.getActionBars().getToolBarManager();
        toolBarManager.add(new Separator("begin")); //$NON-NLS-1$
        toolBarManager.add(new Separator("group5")); //$NON-NLS-1$
        toolBarManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        toolBarManager.add(new Separator("end")); //$NON-NLS-1$

        removeSelectedAction = new Action() {
            public void run() {
                TableItem[] selection = table.getSelection();
                for (int i = 0; i < selection.length; i++)
                    CorePlugin.getRepository().delete((Event) selection[i].getData());
            }
        };
        removeSelectedAction.setToolTipText(Messages.EventsView_RemoveActionTooltip);
        removeSelectedAction.setImageDescriptor(CorePlugin.getImageDescriptor("icons/elcl16/search_rem.gif")); //$NON-NLS-1$
        removeSelectedAction
                .setDisabledImageDescriptor(CorePlugin.getImageDescriptor("icons/dlcl16/search_rem.gif")); //$NON-NLS-1$
        removeSelectedAction.setEnabled(false);
        toolBarManager.appendToGroup("group5", removeSelectedAction); //$NON-NLS-1$
        removeAllAction = new Action() {
            public void run() {
                CorePlugin.getRepository().allEvents().clear();
                updateView();
            }
        };
        removeAllAction.setToolTipText(Messages.EventsView_RemoveAllActionTooltip);
        removeAllAction.setImageDescriptor(CorePlugin.getImageDescriptor("icons/elcl16/search_remall.gif")); //$NON-NLS-1$
        removeAllAction.setDisabledImageDescriptor(CorePlugin.getImageDescriptor("icons/dlcl16/search_remall.gif")); //$NON-NLS-1$
        removeAllAction.setEnabled(false);
        toolBarManager.appendToGroup("group5", removeAllAction); //$NON-NLS-1$

        super.init(site);
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    public void createPartControl(Composite parent) {
        Composite content = new Composite(parent, SWT.NONE);
        GridLayout gridLayout = new GridLayout();
        gridLayout.marginWidth = gridLayout.marginHeight = 0;
        gridLayout.horizontalSpacing = gridLayout.verticalSpacing = 0;
        content.setLayout(gridLayout);

        table = new Table(content, SWT.SINGLE | SWT.FULL_SELECTION);
        table.setHeaderVisible(true);
        table.setLinesVisible(false);
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        table.addMouseListener(new MouseAdapter() {
            public void mouseDoubleClick(MouseEvent e) {
                if (table.getSelectionIndex() != -1) {
                    if (dialog == null) {
                        Event event = (Event) table.getItem(table.getSelectionIndex()).getData();
                        dialog = new ViewEventDetailsDialog(event, getViewSite().getShell());
                        dialog.open();
                    }
                }
            }
        });
        table.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                removeSelectedAction.setEnabled(table.getSelectionIndex() != -1);
            }
        });
        TableColumn column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.EventsView_Date);
        column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.EventsView_Time);
        column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.EventsView_Security);
        column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.EventsView_Message);

        parent.getDisplay().asyncExec(new Runnable() {
            public void run() {
                updateView();
                CorePlugin.getRepository().allEvents().addCollectionObserver(EventsView.this);
            }
        });
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
     */
    public void setFocus() {
        table.getParent().setFocus();
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    public void dispose() {
        CorePlugin.getRepository().allEvents().removeCollectionObserver(this);
        super.dispose();
    }

    private void updateView() {
        table.removeAll();

        List list = new ArrayList(CorePlugin.getRepository().allEvents());
        Collections.sort(list, comparator);

        for (Iterator iter = list.iterator(); iter.hasNext();) {
            Event event = (Event) iter.next();
            TableItem tableItem = new TableItem(table, SWT.NONE);
            tableItem.setText(0, dateFormatter.format(event.getDate()));
            tableItem.setText(1, timeFormatter.format(event.getDate()));
            tableItem.setText(2, event.getSecurity() != null ? event.getSecurity().getDescription() : ""); //$NON-NLS-1$
            tableItem.setText(3, event.getMessage());
            tableItem.setData(event);
        }

        for (int i = 0; i < table.getColumnCount(); i++)
            table.getColumn(i).pack();

        removeSelectedAction.setEnabled(table.getSelectionIndex() != -1);
        removeAllAction.setEnabled(table.getItemCount() != 0);
    }

    /* (non-Javadoc)
     * @see net.sourceforge.eclipsetrader.core.ICollectionObserver#itemAdded(java.lang.Object)
     */
    public void itemAdded(Object o) {
        final Event event = (Event) o;

        table.getDisplay().asyncExec(new Runnable() {
            public void run() {
                if (table.isDisposed())
                    return;

                TableItem tableItem = new TableItem(table, SWT.NONE, 0);
                tableItem.setText(0, dateFormatter.format(event.getDate()));
                tableItem.setText(1, timeFormatter.format(event.getDate()));
                tableItem.setText(2, event.getSecurity() != null ? event.getSecurity().getDescription() : ""); //$NON-NLS-1$
                tableItem.setText(3, event.getMessage());
                tableItem.setData(event);

                for (int i = 0; i < table.getColumnCount(); i++)
                    table.getColumn(i).pack();

                removeSelectedAction.setEnabled(table.getSelectionIndex() != -1);
                removeAllAction.setEnabled(table.getItemCount() != 0);

                if (event instanceof PopupEvent) {
                    if (dialog == null) {
                        dialog = new ViewEventDetailsDialog(event, getViewSite().getShell());
                        dialog.open();
                    }
                }

                if (dialog != null)
                    dialog.updateButtonStatus();
            }
        });
    }

    /* (non-Javadoc)
     * @see net.sourceforge.eclipsetrader.core.ICollectionObserver#itemRemoved(java.lang.Object)
     */
    public void itemRemoved(final Object o) {
        table.getDisplay().asyncExec(new Runnable() {
            public void run() {
                TableItem[] items = table.getItems();
                for (int i = 0; i < items.length; i++) {
                    if (items[i].getData().equals(o))
                        items[i].dispose();
                }

                for (int i = 0; i < table.getColumnCount(); i++)
                    table.getColumn(i).pack();

                removeSelectedAction.setEnabled(table.getSelectionIndex() != -1);
                removeAllAction.setEnabled(table.getItemCount() != 0);
                if (dialog != null)
                    dialog.updateButtonStatus();
            }
        });
    }

    public Table getTable() {
        return table;
    }

    /**
     * View-aware event details dialog.
     * <p>This object subclasses the standard event details dialog to hilight the currently
     * viewed event.</p>
     */
    class ViewEventDetailsDialog extends EventDetailsDialog {

        public ViewEventDetailsDialog(Event event, Shell parentShell) {
            super(event, parentShell);
        }

        /* (non-Javadoc)
         * @see net.sourceforge.eclipsetrader.core.ui.dialogs.EventDetailsDialog#updateEvent()
         */
        protected void updateEvent() {
            TableItem[] items = table.getItems();
            for (int i = 0; i < items.length; i++) {
                if (getEvent().equals(items[i].getData()))
                    table.select(i);
            }
            super.updateEvent();
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.window.Window#open()
         */
        public int open() {
            dialog.setBlockOnOpen(false);
            int result = super.open();
            dialog.getShell().addDisposeListener(dialogDisposeListener);
            return result;
        }

        /* (non-Javadoc)
         * @see net.sourceforge.eclipsetrader.core.ui.dialogs.EventDetailsDialog#updateButtonStatus()
         */
        public void updateButtonStatus() {
            super.updateButtonStatus();
        }
    }
}