Search in sources :

Example 1 with RunScriptHandler

use of org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers.RunScriptHandler in project linuxtools by eclipse.

the class SystemTapScriptLaunchConfigurationDelegate method launch.

@Override
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException {
    // Wait for other stap launches' consoles to be initiated before starting a new launch.
    ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
    for (ILaunch olaunch : manager.getLaunches()) {
        if (olaunch.equals(launch)) {
            continue;
        }
        if (olaunch instanceof SystemTapScriptLaunch && ((SystemTapScriptLaunch) olaunch).getConsole() == null) {
            throw new CoreException(new Status(IStatus.ERROR, IDEPlugin.PLUGIN_ID, Messages.SystemTapScriptLaunchError_waitForConsoles));
        }
    }
    if (!SystemTapScriptGraphOptionsTab.isValidLaunch(configuration)) {
        throw new CoreException(new Status(IStatus.ERROR, IDEPlugin.PLUGIN_ID, Messages.SystemTapScriptLaunchError_graph));
    }
    RunScriptHandler action;
    boolean runWithChart = configuration.getAttribute(SystemTapScriptGraphOptionsTab.RUN_WITH_CHART, false);
    // If runWithChart is true there must be at least one graph, but this isn't guaranteed
    // to be true for outdated Launch Configurations. So for safety, make sure there are graphs.
    int numGraphs = configuration.getAttribute(SystemTapScriptGraphOptionsTab.NUMBER_OF_REGEXS, 0);
    if (runWithChart && numGraphs > 0) {
        List<IDataSetParser> parsers = SystemTapScriptGraphOptionsTab.createDatasetParsers(configuration);
        List<IFilteredDataSet> dataSets = SystemTapScriptGraphOptionsTab.createDataset(configuration);
        List<String> names = SystemTapScriptGraphOptionsTab.createDatasetNames(configuration);
        List<LinkedList<GraphData>> graphs = SystemTapScriptGraphOptionsTab.createGraphsFromConfiguration(configuration);
        action = new RunScriptChartHandler(parsers, dataSets, names, graphs);
    } else {
        action = new RunScriptHandler();
    }
    // Path
    // $NON-NLS-1$
    IPath scriptPath = new Path(configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.SCRIPT_PATH_ATTR, ""));
    if (!scriptPath.toFile().exists()) {
        throw new CoreException(new Status(IStatus.ERROR, IDEPlugin.PLUGIN_ID, MessageFormat.format(Messages.SystemTapScriptLaunchError_fileNotFound, scriptPath.toString())));
    }
    String extension = scriptPath.getFileExtension();
    if (extension == null || !extension.equals("stp")) {
        // $NON-NLS-1$
        throw new CoreException(new Status(IStatus.ERROR, IDEPlugin.PLUGIN_ID, MessageFormat.format(Messages.SystemTapScriptLaunchError_fileNotStp, scriptPath.toString())));
    }
    action.setPath(scriptPath);
    // Run locally and/or as current user.
    action.setRemoteScriptOptions(configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.CURRENT_USER_ATTR, true) ? null : new RemoteScriptOptions(// $NON-NLS-1$
    configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.USER_NAME_ATTR, ""), // $NON-NLS-1$
    configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.USER_PASS_ATTR, ""), configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.LOCAL_HOST_ATTR, true) ? LOCALHOST : configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.HOST_NAME_ATTR, LOCALHOST), configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.USE_DEFAULT_PORT_ATTR, true) ? DEFAULT_PORT : configuration.getAttribute(SystemTapScriptLaunchConfigurationTab.PORT_ATTR, DEFAULT_PORT)));
    // $NON-NLS-1$
    String value = configuration.getAttribute(IDEPreferenceConstants.STAP_CMD_OPTION[IDEPreferenceConstants.KEY], "");
    if (!value.isEmpty()) {
        // $NON-NLS-1$
        action.addComandLineOptions(IDEPreferenceConstants.STAP_CMD_OPTION[IDEPreferenceConstants.FLAG] + " " + value);
    }
    // Add command line options
    for (int i = 0; i < IDEPreferenceConstants.STAP_BOOLEAN_OPTIONS.length; i++) {
        boolean flag = configuration.getAttribute(IDEPreferenceConstants.STAP_BOOLEAN_OPTIONS[i][IDEPreferenceConstants.KEY], false);
        if (flag) {
            action.addComandLineOptions(IDEPreferenceConstants.STAP_BOOLEAN_OPTIONS[i][IDEPreferenceConstants.FLAG]);
        }
    }
    for (int i = 0; i < IDEPreferenceConstants.STAP_STRING_OPTIONS.length; i++) {
        // $NON-NLS-1$
        value = configuration.getAttribute(IDEPreferenceConstants.STAP_STRING_OPTIONS[i][IDEPreferenceConstants.KEY], "");
        if (!value.isEmpty()) {
            // $NON-NLS-1$
            action.addComandLineOptions(IDEPreferenceConstants.STAP_STRING_OPTIONS[i][IDEPreferenceConstants.FLAG] + " " + value);
        }
    }
    // $NON-NLS-1$
    value = configuration.getAttribute(SystemTapScriptOptionsTab.MISC_COMMANDLINE_OPTIONS, "");
    if (!value.isEmpty()) {
        action.addComandLineOptions(value);
    }
    action.setLaunch((SystemTapScriptLaunch) launch);
    try {
        action.execute(null);
    } catch (ExecutionException e) {
        throw new CoreException(new Status(IStatus.ERROR, IDEPlugin.PLUGIN_ID, e.getMessage()));
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IPath(org.eclipse.core.runtime.IPath) Path(org.eclipse.core.runtime.Path) RunScriptChartHandler(org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers.RunScriptChartHandler) IPath(org.eclipse.core.runtime.IPath) ILaunchManager(org.eclipse.debug.core.ILaunchManager) IFilteredDataSet(org.eclipse.linuxtools.systemtap.graphing.core.datasets.IFilteredDataSet) LinkedList(java.util.LinkedList) RemoteScriptOptions(org.eclipse.linuxtools.systemtap.ui.consolelog.structures.RemoteScriptOptions) CoreException(org.eclipse.core.runtime.CoreException) IDataSetParser(org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSetParser) ILaunch(org.eclipse.debug.core.ILaunch) RunScriptHandler(org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers.RunScriptHandler) ExecutionException(org.eclipse.core.commands.ExecutionException)

Aggregations

LinkedList (java.util.LinkedList)1 ExecutionException (org.eclipse.core.commands.ExecutionException)1 CoreException (org.eclipse.core.runtime.CoreException)1 IPath (org.eclipse.core.runtime.IPath)1 IStatus (org.eclipse.core.runtime.IStatus)1 Path (org.eclipse.core.runtime.Path)1 Status (org.eclipse.core.runtime.Status)1 ILaunch (org.eclipse.debug.core.ILaunch)1 ILaunchManager (org.eclipse.debug.core.ILaunchManager)1 RunScriptChartHandler (org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers.RunScriptChartHandler)1 RunScriptHandler (org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers.RunScriptHandler)1 IDataSetParser (org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSetParser)1 IFilteredDataSet (org.eclipse.linuxtools.systemtap.graphing.core.datasets.IFilteredDataSet)1 RemoteScriptOptions (org.eclipse.linuxtools.systemtap.ui.consolelog.structures.RemoteScriptOptions)1