/******************************************************************************* * Copyright (c) 2009 STMicroelectronics. * 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: * Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.gprof.action; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IBinary; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.window.Window; import org.eclipse.linuxtools.internal.gprof.dialog.OpenGmonDialog; import org.eclipse.linuxtools.internal.gprof.view.GmonView; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorLauncher; import org.eclipse.ui.PlatformUI; /** * Action performed when user clicks on a gmon file * * @author Xavier Raynaud <xavier.raynaud@st.com> */ public class OpenGmonAction implements IEditorLauncher { @Override public void open(IPath file) { String s = getDefaultBinary(file); Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell(); OpenGmonDialog d = new OpenGmonDialog(shell, s, file); if (d.open() != Window.OK) { return; } String binaryPath = d.getBinaryFile(); IProject project = null; IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(file); if (f != null) { project = f.getProject(); } GmonView.displayGprofView(binaryPath, file.toOSString(), project); } private String getDefaultBinary(IPath file) { IProject project = null; IFile c = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(file); if (c != null) { project = c.getProject(); if (project != null && project.exists()) { ICProject cproject = CoreModel.getDefault().create(project); if (cproject != null) { try { IBinary[] b = cproject.getBinaryContainer() .getBinaries(); if (b != null && b.length > 0 && b[0] != null) { IResource r = b[0].getResource(); return r.getLocation().toOSString(); } } catch (CModelException e) { } } } } return ""; //$NON-NLS-1$ } }