com.nokia.tracebuilder.view.TraceView.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tracebuilder.view.TraceView.java

Source

/*
 * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:
 *
 * Trace Builder view implementation
 *
 */
package com.nokia.tracebuilder.view;

import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.ViewPart;

import com.nokia.carbide.cpp.internal.featureTracker.FeatureUseTrackerConsts;
import com.nokia.carbide.cpp.internal.featureTracker.FeatureUseTrackerPlugin;
import com.nokia.tracebuilder.action.ActionFactory;
import com.nokia.tracebuilder.action.TraceViewActions;
import com.nokia.tracebuilder.engine.TraceBuilderActions;
import com.nokia.tracebuilder.engine.TraceBuilderConfiguration;
import com.nokia.tracebuilder.engine.TraceBuilderDialogs;
import com.nokia.tracebuilder.engine.TraceBuilderGlobals;
import com.nokia.tracebuilder.engine.TraceBuilderView;
import com.nokia.tracebuilder.engine.TraceLocation;
import com.nokia.tracebuilder.engine.TraceObjectPropertyDialog;
import com.nokia.tracebuilder.model.TraceObject;
import com.nokia.tracebuilder.preferences.ConfigurationImpl;

/**
 * Trace Builder view implementation
 * 
 */
public final class TraceView extends ViewPart implements TraceBuilderView {

    /**
     * Trace Groups branch text
     */
    private static final String TRACE_GROUPS_BRANCH_TEXT = "Trace Groups"; //$NON-NLS-1$

    /**
     * Tree viewer widget
     */
    private TreeViewer viewer;

    /**
     * Tree view selection listener
     */
    private TraceViewSelectionListener selectionListener;

    /**
     * Tree view expansion listener
     */
    private TraceViewTreeListener treeListener;

    /**
     * Dialog interface implementation
     */
    private TraceViewDialogs dialogs;

    /**
     * Action factory
     */
    private TraceViewActions actions;

    /**
     * Configuration
     */
    private TraceBuilderConfiguration configuration;

    /**
     * Help listener
     */
    private TraceViewHelpListener helpListener;

    /**
     * Property dialog properties
     */
    private PropertyDialogProperties propertyDialog;

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets
     * .Composite)
     */
    @Override
    public void createPartControl(Composite parent) {
        actions = new ActionFactory();
        configuration = new ConfigurationImpl();
        selectionListener = new TraceViewSelectionListener(actions);
        // Creates the tree viewer
        viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
        TraceContentProvider contentProvider = new TraceContentProvider();
        TraceLabelProvider labelProvider = new TraceLabelProvider();
        TraceNameSorter nameSorter = new TraceNameSorter();
        viewer.setContentProvider(contentProvider);
        viewer.setLabelProvider(labelProvider);
        viewer.setSorter(nameSorter);
        // Content provider creates the viewer updater. The updater needs the
        // display reference in order to create asynchronous callbacks to the UI
        // thread.
        viewer.setInput(getViewSite().getShell().getDisplay());
        treeListener = new TraceViewTreeListener(viewer);
        helpListener = new TraceViewHelpListener();
        viewer.addSelectionChangedListener(selectionListener);
        viewer.addDoubleClickListener(selectionListener);
        viewer.addHelpListener(helpListener);
        viewer.addTreeListener(treeListener);

        // Hooks actions to menus
        hookContextMenu();
        fillMenuAndToolBar();

        // Start using feature
        FeatureUseTrackerPlugin.getFeatureUseProxy().startUsingFeature(FeatureUseTrackerConsts.CARBIDE_OST_TRACE);

        // Sets the view reference to trace builder engine
        TraceBuilderGlobals.setView(this);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    @Override
    public void dispose() {
        TraceBuilderGlobals.setView(null);
        viewer.removeTreeListener(treeListener);
        viewer.removeSelectionChangedListener(selectionListener);
        viewer.removeHelpListener(helpListener);

        // Stop using feature
        FeatureUseTrackerPlugin.getFeatureUseProxy().stopUsingFeature(FeatureUseTrackerConsts.CARBIDE_OST_TRACE);

        super.dispose();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IWorkbenchPart#setFocus()
     */
    @Override
    public void setFocus() {
        viewer.getControl().setFocus();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#hasFocus()
     */
    public boolean hasFocus() {
        return viewer.getControl().isFocusControl();
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#
     * selectObject(com.nokia.tracebuilder.model.TraceObject)
     */
    public void selectObject(TraceObject object) {
        TraceObjectWrapper wrapper = object.getExtension(TraceObjectWrapper.class);
        // Wrapper is null if user makes a selection before view is updated
        if (wrapper != null) {
            revealSelectedObject(wrapper);
            actions.enableActions(object);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#
     * selectLocation(com.nokia.tracebuilder.engine.TraceLocation)
     */
    public void selectLocation(TraceLocation location) {
        TraceLocationWrapper wrapper = (TraceLocationWrapper) location.getProperties().getViewReference();
        // Wrapper is null if user makes a selection before view is updated
        if (wrapper != null) {
            revealSelectedObject(wrapper);
            actions.enableActions(location);
        }
    }

    /**
     * Reveals the given wrapper
     * 
     * @param wrapper
     *            the wrapper to be revealed
     */
    private void revealSelectedObject(WrapperBase wrapper) {
        ListWrapper parent = (ListWrapper) wrapper.getParent();
        WrapperBase updated = parent.moveChildToView(wrapper);
        if (updated != null) {
            viewer.removeSelectionChangedListener(selectionListener);
            updated.getUpdater().update(updated);
            viewer.addSelectionChangedListener(selectionListener);
        }
        wrapper.getUpdater().queueSelection(wrapper);
    }

    /**
     * Gets the view shell
     * 
     * @return the shell of the tree viewer
     */
    Shell getShell() {
        Shell retval = null;
        if (viewer != null) {
            retval = viewer.getControl().getShell();
            if (retval != null && retval.isDisposed()) {
                retval = null;
            }
        }
        return retval;
    }

    /**
     * Adds menu listener to popup menu
     */
    private void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                fillContextMenu(manager);
            }
        });
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewer);
    }

    /**
     * Adds action items to menu and toolbar
     */
    private void fillMenuAndToolBar() {
        IActionBars bars = getViewSite().getActionBars();
        fillMenu(bars.getMenuManager());
        fillToolBar(bars.getToolBarManager());
    }

    /**
     * Adds menu items to view pull-down menu
     * 
     * @param manager
     *            the menu to be filled
     */
    private void fillMenu(IMenuManager manager) {
        actions.fillMenu(manager);
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    /**
     * Adds actions to tool bar
     * 
     * @param manager
     *            the tool bar
     */
    private void fillToolBar(IToolBarManager manager) {
        actions.fillToolBar(manager);
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    /**
     * Called prior to showing the context menu
     * 
     * @param manager
     *            the menu to be filled
     */
    private void fillContextMenu(IMenuManager manager) {
        actions.fillContextMenu(manager);
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#getDialogs()
     */
    public TraceBuilderDialogs getDialogs() {
        if (dialogs == null) {
            dialogs = new TraceViewDialogs(this);
        }
        return dialogs;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#getPropertyDialog()
     */
    public TraceObjectPropertyDialog getPropertyDialog() {
        if (propertyDialog == null) {
            propertyDialog = new PropertyDialogProperties(this);
        }
        return propertyDialog;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#getActions()
     */
    public TraceBuilderActions getActions() {
        return actions;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#getConfiguration()
     */
    public TraceBuilderConfiguration getConfiguration() {
        return configuration;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView#
     * runAsyncOperation(java.lang.Runnable)
     */
    public void runAsyncOperation(Runnable runnable) {
        Shell shell = getShell();
        if (shell != null) {
            shell.getDisplay().asyncExec(runnable);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.nokia.tracebuilder.engine.TraceBuilderView# refresh()
     */
    public void refresh() {
        viewer.refresh();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.nokia.tracebuilder.engine.TraceBuilderView#expandTraceGroupsBranch()
     */
    public void expandTraceGroupsBranch() {
        TreeItem[] items = viewer.getTree().getItems();
        if (items != null) {
            for (TreeItem item : items) {
                if (item.getText().equals(TRACE_GROUPS_BRANCH_TEXT)) {
                    item.setExpanded(true);
                    break;
                }
            }
        }
    }
}