carisma.ui.eclipse.views.AnalysisResultsView.java Source code

Java tutorial

Introduction

Here is the source code for carisma.ui.eclipse.views.AnalysisResultsView.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Software Engineering Institute, TU Dortmund.
 * 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:
 *    {SecSE group} - initial API and implementation and/or initial documentation
 *******************************************************************************/
package carisma.ui.eclipse.views;

import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.Action;
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.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import carisma.core.analysis.result.AnalysisResult;
import carisma.core.analysis.result.AnalysisResultMessage;
import carisma.core.analysis.result.AnalysisResultStatus;
import carisma.core.analysis.result.CheckResult;
import carisma.core.analysis.result.StatusType;
import carisma.ui.eclipse.CarismaGUI;
import carisma.ui.popup.actions.PopUpAction;

/**
 * 
 */
public class AnalysisResultsView extends ViewPart {

    /**
     * The ID string.
     */
    public static final String ID = "carisma.ui.eclipse.views.AnalysisResultsView";

    /**
     * The TreeViewer.
     */
    TreeViewer viewer = null;

    // ########################################################################################
    /**
     * Constructor (empty).
     */
    public AnalysisResultsView() {
    }

    /**
     * @param parent
     *            Parent Composite
     */
    @Override
    public final void createPartControl(final Composite parent) {
        this.viewer = new TreeViewer(parent);
        this.viewer.setContentProvider(new MyTreeContentProvider());
        this.viewer.getTree().setHeaderVisible(true);

        TreeViewerColumn pluginColumn = new TreeViewerColumn(this.viewer, SWT.NONE);
        pluginColumn.getColumn().setText("Analysis / Check / Messages");
        pluginColumn.getColumn().setWidth(350);
        pluginColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(final Object element) {
                if (element instanceof AnalysisResult) {
                    return (((AnalysisResult) element).getName());
                } else if (element instanceof CheckResult) {
                    return (((CheckResult) element).getName());
                } else if (element instanceof AnalysisResultMessage) {
                    return (((AnalysisResultMessage) element).getText());
                } else {
                    return null;
                }
            }

            @Override
            public Image getImage(final Object element) {
                if (element instanceof AnalysisResult) {
                    if (((AnalysisResult) element).getStatus().equals(AnalysisResultStatus.SUCCESS)) {
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_SUCCESSFUL_ID);
                    } else if (((AnalysisResult) element).getStatus().equals(AnalysisResultStatus.RUNNING)) {
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_RUNNING_ID);
                    } else {
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_ERROR_ID);
                    }
                } else if (element instanceof CheckResult) {
                    Image result = CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_ERROR_ID);
                    if (((CheckResult) element).isSuccessful()) {
                        result = CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_SUCCESSFUL_ID);
                        if (((CheckResult) element).getStatus() == StatusType.WARNING) {
                            result = CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_SUCCESSWARNING_ID);
                        } else if (((CheckResult) element).getStatus() == StatusType.ERROR) {
                            result = CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_SUCCESSERROR_ID);
                        }
                    }
                    return result;
                } else if (element instanceof AnalysisResultMessage) {
                    switch (((AnalysisResultMessage) element).getStatus()) {
                    case INFO:
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_INFO_ID);
                    case WARNING:
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_WARNING_ID);
                    case ERROR:
                        return CarismaGUI.INSTANCE.getImageRegistry().get(CarismaGUI.IMG_ERROR_ID);
                    default:
                        break;
                    }
                }
                return null;
            }
        });

        TreeViewerColumn modelElementColumn = new TreeViewerColumn(this.viewer, SWT.NONE);
        modelElementColumn.getColumn().setText("model element");
        modelElementColumn.getColumn().setWidth(100);
        modelElementColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(final Object element) {
                if (element instanceof AnalysisResultMessage) {
                    return ((AnalysisResultMessage) element).getModelElement();
                }
                return null;
            }
        });

        TreeViewerColumn addInfoColumn = new TreeViewerColumn(this.viewer, SWT.NONE);
        addInfoColumn.getColumn().setText("add. info");
        addInfoColumn.getColumn().setWidth(100);
        addInfoColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(final Object element) {
                if (element instanceof AnalysisResult) {
                    return (((AnalysisResult) element).getTimestamp());
                } else if (element instanceof AnalysisResultMessage) {
                    return (((AnalysisResultMessage) element).getAdditionalInformation());
                }
                return null;
            }
        });
        this.createActions();
        this.initContextMenu();
        update();
    }

    /**
     * Initializes the ContextMenu.
     */
    private void initContextMenu() {
        final MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(final IMenuManager manager) {
                Object firstElement = ((IStructuredSelection) AnalysisResultsView.this.viewer.getSelection())
                        .getFirstElement();

                AnalysisResult tmpAnalysisResult;
                if (firstElement instanceof carisma.core.analysis.result.AnalysisResult) {
                    tmpAnalysisResult = (AnalysisResult) firstElement;
                } else if (firstElement instanceof carisma.core.analysis.result.CheckResult) {
                    tmpAnalysisResult = ((CheckResult) firstElement).getParent();
                } else if (firstElement instanceof carisma.core.analysis.result.AnalysisResultMessage) {
                    tmpAnalysisResult = ((AnalysisResultMessage) firstElement).getParent().getParent();
                } else {
                    throw new RuntimeException("Unknown Selection: " + firstElement);
                }
                final AnalysisResult analysisResult = tmpAnalysisResult;

                for (IConfigurationElement extension : Platform.getExtensionRegistry()
                        .getConfigurationElementsFor(CarismaGUI.ANALYSIS_POPUP_MENU)) {
                    try {
                        ((PopUpAction) extension.createExecutableExtension("class")).perform(menuMgr,
                                analysisResult);
                    } catch (CoreException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        Menu menu = menuMgr.createContextMenu(this.viewer.getTree());
        this.viewer.getTree().setMenu(menu);
        getSite().registerContextMenu(menuMgr, this.viewer);

    }

    /**
     * Insert Actions into the ActionBar.
     */
    private void createActions() {
        Action resetItemAction = new Action("Reset") {
            @Override
            public void run() {
                CarismaGUI.reset();
            }

        };
        resetItemAction.setText("Reset results");
        resetItemAction.setDescription("Reset results");
        ImageDescriptor deleteImage = PlatformUI.getWorkbench().getSharedImages()
                .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE);
        resetItemAction.setImageDescriptor(deleteImage);

        IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
        mgr.add(resetItemAction);

    }

    /**
     * Calls the update() method.
     */
    @Override
    public final void setFocus() {
        update();
    }

    /**
     * Updates the viewer input.
     */
    public final void update() {
        this.viewer.setInput(CarismaGUI.getAnalysisResults());
    }

    /**
     * Nested Class: Implements ITreeContentProvider.
     */
    static class MyTreeContentProvider implements ITreeContentProvider {

        @Override
        public Object[] getChildren(final Object parentElement) {
            if (parentElement instanceof AnalysisResultMessage) {
                return null;
            } else if (parentElement instanceof CheckResult) {
                return (((CheckResult) parentElement).getResults().toArray());
            } else if (parentElement instanceof AnalysisResult) {
                return (((AnalysisResult) parentElement).getCheckResults().toArray());
            } else {
                return null;
            }
        }

        @Override
        public Object getParent(final Object element) {
            return null;
        }

        @Override
        public boolean hasChildren(final Object element) {
            if (element instanceof AnalysisResultMessage) {
                return false;
            } else if (element instanceof CheckResult) {
                return (((CheckResult) element).getResults().size() > 0);
            } else if (element instanceof AnalysisResult) {
                return (((AnalysisResult) element).getCheckResults().size() > 0);
            } else {
                return false;
            }
        }

        @Override
        public Object[] getElements(final Object inputElement) {
            return ((List<?>) inputElement).toArray();
        }

        @Override
        public void dispose() {
        }

        @Override
        public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
        }

    }

}