org.eclipse.core.tools.runtime.LoadedClassesView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.core.tools.runtime.LoadedClassesView.java

Source

/*******************************************************************************
 * Copyright (c) 2002, 2005 IBM Corporation 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:
 *     IBM - Initial API and implementation
 *******************************************************************************/
package org.eclipse.core.tools.runtime;

import java.util.Arrays;
import java.util.Iterator;
import org.eclipse.core.runtime.internal.stats.ClassStats;
import org.eclipse.core.runtime.internal.stats.StatsManager;
import org.eclipse.core.tools.CoreToolsPlugin;
import org.eclipse.core.tools.TableWithTotalView;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;

/**
 * View that display information about classes
 */
public class LoadedClassesView extends TableWithTotalView {
    private Action displayStackAction;

    public static String VIEW_ID = LoadedClassesView.class.getName();
    private String[] columnHeaders = new String[] { "Class", "Order", "Memory", "Plug-in", "Timestamp", "RAM", //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$//$NON-NLS-6$
            "ROM" }; //$NON-NLS-1$
    private ColumnLayoutData[] columnLayout = new ColumnLayoutData[] { new ColumnWeightData(500),
            new ColumnWeightData(100), new ColumnWeightData(100), new ColumnWeightData(200), new ColumnPixelData(0),
            new ColumnPixelData(0), new ColumnPixelData(0) };

    protected String[] getColumnHeaders() {
        return columnHeaders;
    }

    protected ColumnLayoutData[] getColumnLayout() {
        return columnLayout;
    }

    public void createPartControl(Composite parent) {
        if (!StatsManager.MONITOR_CLASSES) {
            Text text = new Text(parent, 0);
            text.setText("Class monitoring is not enabled."); //$NON-NLS-1$
            return;
        }
        super.createPartControl(parent);
        viewer.setSelection(StructuredSelection.EMPTY);
    }

    protected ITreeContentProvider getContentProvider() {
        return new LoadedClassesViewContentProvider();
    }

    protected ITableLabelProvider getLabelProvider() {
        return new LoadedClassesViewLabelProvider();
    }

    protected ViewerSorter getSorter(int column) {
        return new LoadedClassesViewSorter(column);
    }

    /**
     * @see org.eclipse.core.tools.TableWithTotalView#getStatusLineMessage(Object)
     */
    protected String getStatusLineMessage(Object element) {
        return ""; //$NON-NLS-1$
    }

    protected TableTreeViewer getViewer() {
        return viewer;
    }

    protected void createActions() {
        displayStackAction = new Action("Stack &Trace") { //$NON-NLS-1$
            public void run() {
                try {
                    StackTraceView view = (StackTraceView) getSite().getPage().showView(StackTraceView.VIEW_ID);
                    ClassStats clazz = (ClassStats) ((IStructuredSelection) getViewer().getSelection())
                            .getFirstElement();
                    if (clazz == null)
                        return;
                    view.setInput(StatsManager.TRACE_FILENAME, clazz.getTraceStart(), clazz.getTraceEnd());
                } catch (PartInitException e) {
                    e.printStackTrace();
                }
            }
        };
        displayStackAction.setToolTipText("Display the class activation stack trace"); //$NON-NLS-1$
        displayStackAction.setImageDescriptor(CoreToolsPlugin.createImageDescriptor("trace.gif")); //$NON-NLS-1$
    }

    protected void createToolbar() {
        IToolBarManager manager = getViewSite().getActionBars().getToolBarManager();
        manager.add(displayStackAction);
    }

    public void setInput(Object input) {
        viewer.setInput(input);
        viewer.setSelection(StructuredSelection.EMPTY);
    }

    protected String[] computeTotalLine(Iterator iterator) {
        String[] totals = new String[getColumnHeaders().length];
        int ramTotal = 0;
        int romTotal = 0;
        int count = 0;
        if (!iterator.hasNext()) {
            Object[] elements = ((ITreeContentProvider) viewer.getContentProvider()).getElements(viewer.getInput());
            iterator = Arrays.asList(elements == null ? new Object[0] : elements).iterator();
        }
        while (iterator.hasNext()) {
            ClassStats clazz = (ClassStats) iterator.next();
            VMClassloaderInfo loader = VMClassloaderInfo.getClassloader(clazz.getClassloader().getId());
            VMClassInfo classInfo = loader.getClass(clazz.getClassName());
            ramTotal += classInfo.getRAMSize();
            romTotal += classInfo.getROMSize();
            count++;
        }
        totals[0] = "Total: " + count; //$NON-NLS-1$
        totals[2] = Integer.toString(ramTotal + romTotal);
        totals[5] = Integer.toString(ramTotal);
        totals[6] = Integer.toString(romTotal);
        return totals;
    }

    public void dispose() {
        if (displayStackAction != null)
            displayStackAction.setImageDescriptor(null);
    }

    protected void createContextMenu() {
        MenuManager manager = new MenuManager();
        manager.setRemoveAllWhenShown(true);
        manager.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager mgr) {
                fillContextMenu(mgr);
            }
        });
        Menu menu = manager.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(manager, viewer);
    }

    protected void fillContextMenu(IMenuManager manager) {
        manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        manager.add(displayStackAction);
    }
}