/******************************************************************************* * Copyright (c) 2006-2008 Red Hat Inc. 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: * Red Hat, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.changelog.core.actions; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.linuxtools.internal.changelog.core.Messages; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; public class PrepareChangelogKeyHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) { IStructuredSelection tempResult = null; // try getting currently selected project IWorkbenchPage ref = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); IWorkbenchPart part = HandlerUtil.getActivePart(event); if (part instanceof IEditorPart) { // If we are in an editor, check if the file being edited is an IResource // that belongs to a project in the workspace IEditorPart editorPart = (IEditorPart)part; IEditorInput input = editorPart.getEditorInput(); IResource r = input.getAdapter(IResource.class); if (r != null) { // We have an IResource to work with, so create a selection we can use // in PrepareChangeLogAction tempResult = new StructuredSelection(r); } } else { // Otherwise, our view is not an editor, see if we have an IResource or something // that will lead us to an IResource ISelection selected = ref.getSelection(); if (selected instanceof IStructuredSelection) { IResource r = null; IStructuredSelection iss = (IStructuredSelection)selected; Object o = ((IStructuredSelection)selected).getFirstElement(); if (o instanceof ISynchronizeModelElement) { r = ((ISynchronizeModelElement)o).getResource(); } else if (o instanceof IAdaptable) { r = ((IAdaptable)o).getAdapter(IResource.class); } if (r != null) tempResult = iss; } } if (tempResult == null) { // We don't have an obvious project match in the current active view. // Let's search all open views for the Synchronize View which is our first // choice to fall back on. for (IViewReference view: ref.getViewReferences()) { if (view.getId().equals("org.eclipse.team.sync.views.SynchronizeView")) { // $NON-NLS-1$ IViewPart v = view.getView(false); ISelection s = null; ISelectionProvider sp = v.getViewSite().getSelectionProvider(); if (sp != null) { s = sp.getSelection(); } if (s instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection)s; Object element = ss.getFirstElement(); IResource r = null; if (element instanceof ISynchronizeModelElement) { r = ((ISynchronizeModelElement)element).getResource(); } else if (element instanceof IAdaptable) { r = ((IAdaptable)element).getAdapter(IResource.class); } if (r != null) { tempResult = ss; } } } } } // If we can't find the project directly, let the user know. if (tempResult == null) { MessageDialog.openInformation(getActiveWorkbenchShell(), Messages.getString("ChangeLog.PrepareChangeLog"), // $NON-NLS-1$, Messages.getString("PrepareChangeLog.InfoNoProjectFound")); // $NON-NLS-1$ return null; } final IStructuredSelection result = tempResult; IAction exampleAction = new PrepareChangeLogAction() { @Override public void run() { setSelection(result); doRun(); } }; exampleAction.run(); return null; } /** * Returns active shell. */ private Shell getActiveWorkbenchShell() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { return window.getShell(); } return null; } }