org.jboss.tools.windup.ui.internal.explorer.IssueExplorer.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.windup.ui.internal.explorer.IssueExplorer.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *   Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.windup.ui.internal.explorer;

import static org.jboss.tools.windup.model.domain.WindupConstants.MARKERS_CHANGED;
import static org.jboss.tools.windup.model.domain.WindupConstants.GROUPS_CHANGED;

import javax.inject.Inject;

import org.eclipse.core.resources.IMarker;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.navigator.CommonNavigator;
import org.jboss.tools.windup.ui.WindupUIPlugin;

/**
 * Explorer view for displaying and navigating Windup issues, classifications, etc. 
 */
public class IssueExplorer extends CommonNavigator {

    @Inject
    private IEclipseContext context;

    @Override
    public void createPartControl(Composite aParent) {
        super.createPartControl(aParent);
        getCommonViewer().addDoubleClickListener(new OpenIssueListener());
        getCommonViewer().addSelectionChangedListener((e) -> {
            StructuredSelection ss = (StructuredSelection) e.getSelection();
            if (ss.size() == 1) {
                Object selection = ss.getFirstElement();
                IMarker type = null;
                if (selection instanceof IssueNode) {
                    type = ((IssueNode) selection).getType();
                }
                context.set(IMarker.class, type);
            }
        });
        context.get(MApplication.class).getContext().set(IssueExplorerService.class, new IssueExplorerService() {
            @Override
            public TreeViewer getViewer() {
                return getCommonViewer();
            }
        });
    }

    @Inject
    @Optional
    private void activeWindupReportView(@UIEventTopic(MARKERS_CHANGED) boolean changed) {
        refresh();
    }

    @Inject
    @Optional
    private void refresh(@UIEventTopic(GROUPS_CHANGED) boolean changed) {
        refresh();
        // TODO: restore previously expanded nodes, selection, scrolls, etc.
        getCommonViewer().expandAll();
    }

    private void refresh() {
        if (getCommonViewer() != null && !getCommonViewer().getTree().isDisposed()) {
            getCommonViewer().refresh(true);
        }
        // TODO: after memento is integrated, re-set to current selection.
        context.set(IMarker.class, null);
    }

    private class OpenIssueListener implements IDoubleClickListener {
        @Override
        public void doubleClick(DoubleClickEvent event) {
            StructuredSelection ss = (StructuredSelection) event.getSelection();
            if (ss.size() == 1) {
                Object node = ss.getFirstElement();
                if (node instanceof IssueNode) {
                    IssueNode issue = (IssueNode) node;
                    try {
                        IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(),
                                issue.getType(), true);
                    } catch (PartInitException e) {
                        WindupUIPlugin.log(e);
                    }
                }
            }
        }
    }

    public static interface IssueExplorerService {
        TreeViewer getViewer();
    }
}