/********************************************************************** * Copyright (c) 2013, 2015 Ericsson * * 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: * Bernd Hufmann - Initial API and implementation * Marc-Andre Laperle - Bug 459835 **********************************************************************/ package org.eclipse.tracecompass.internal.tracing.rcp.ui; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.tracecompass.internal.tracing.rcp.ui.cli.CliParser; import org.eclipse.tracecompass.tmf.core.TmfCommonConstants; import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper; import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry; import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IPerspectiveListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchWindowAdvisor; /** * The WorkbenchAdvisor implementation of the LTTng RCP. * * @author Bernd Hufmann */ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ @SuppressWarnings("nls") private static final String[] UNWANTED_ACTION_SET = { "org.eclipse.search.searchActionSet", "org.eclipse.rse.core.search.searchActionSet", "org.eclipse.debug.ui.launchActionSet", "org.eclipse.debug.ui.debugActionSet", "org.eclipse.debug.ui.breakpointActionSet", "org.eclipse.team.ui", "org.eclipse.ui.externaltools.ExternalToolsSet", // "org.eclipse.update.ui.softwareUpdates", // "org.eclipse.ui.edit.text.actionSet.navigation", // "org.eclipse.ui.actionSet.keyBindings", // "org.eclipse.ui.edit.text.actionSet.navigation", "org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo", // "org.eclipse.ui.edit.text.actionSet.annotationNavigation", // "org.eclipse.ui.NavigateActionSet", // "org.eclipse.jdt.ui.JavaActionSet", // "org.eclipse.jdt.ui.A_OpenActionSet", // "org.eclipse.jdt.ui.text.java.actionSet.presentation", // "org.eclipse.jdt.ui.JavaElementCreationActionSet", // "org.eclipse.jdt.ui.CodingActionSet", // "org.eclipse.jdt.ui.SearchActionSet", // "org.eclipse.jdt.debug.ui.JDTDebugActionSet", "org.eclipse.ui.edit.text.actionSet.openExternalFile", // "org.eclipse.debug.ui.profileActionSet" }; // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Standard constructor * * @param configurer * - the workbench window configurer */ public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { super(configurer); } // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @Override public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) { return new ApplicationActionBarAdvisor(configurer); } @Override public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setShowCoolBar(false); configurer.setShowStatusLine(true); configurer.setShowProgressIndicator(true); } @Override public void postWindowCreate() { super.postWindowOpen(); TracingRcpPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().addPerspectiveListener(new PerspectiveListener()); IProject defaultProject = createDefaultProject(); hideActionSets(); openTraceIfNecessary(defaultProject); } private static void openTraceIfNecessary(IProject project) { String traceToOpen = TracingRcpPlugin.getDefault().getCli().getArgument(CliParser.OPEN_FILE_LOCATION); String userHome = System.getProperty("user.home"); //$NON-NLS-1$ // In case the application was not started on the shell, expand ~ to home directory if ((traceToOpen != null) && traceToOpen.startsWith("~/") && (userHome != null)) { //$NON-NLS-1$ traceToOpen = traceToOpen.replaceFirst("^~", userHome); //$NON-NLS-1$ } if (traceToOpen != null) { try { TmfTraceFolder destinationFolder = TmfProjectRegistry.getProject(project, true).getTracesFolder(); TmfOpenTraceHelper.openTraceFromPath(destinationFolder, traceToOpen, TracingRcpPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell()); } catch (CoreException e) { TracingRcpPlugin.getDefault().logError(e.getMessage()); } } } // ------------------------------------------------------------------------ // Helper methods // ------------------------------------------------------------------------ /** * Hides the unwanted action sets */ private static void hideActionSets() { IWorkbenchPage page = TracingRcpPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); for (int i = 0; i < UNWANTED_ACTION_SET.length; i++) { page.hideActionSet(UNWANTED_ACTION_SET[i]); } } private static IProject createDefaultProject() { return TmfProjectRegistry.createProject(TmfCommonConstants.DEFAULT_TRACE_PROJECT_NAME, null, new NullProgressMonitor()); } /** * A perspective listener implementation * * @author Bernd Hufmann */ public class PerspectiveListener implements IPerspectiveListener { /** * Default Constructor */ public PerspectiveListener() { } @Override public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { createDefaultProject(); hideActionSets(); } @Override public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) { } } }