Java tutorial
/******************************************************************************* * 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(); } }