blob: 6cbb6e4f2235123b65debb80b92e7b517664682c [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2008, 2019 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.r.console.ui.launching;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.statet.jcommons.ts.core.ToolCommandHandler;
import org.eclipse.statet.nico.core.runtime.HistoryOperationsHandler;
import org.eclipse.statet.nico.core.runtime.IToolEventHandler;
import org.eclipse.statet.nico.core.runtime.SubmitType;
import org.eclipse.statet.nico.core.runtime.ToolProcess;
import org.eclipse.statet.nico.ui.util.ChooseFileHandler;
import org.eclipse.statet.nico.ui.util.EclipseIDEOperationsHandler;
import org.eclipse.statet.nico.ui.util.QuitHandler;
import org.eclipse.statet.nico.ui.util.ReportStatusHandler;
import org.eclipse.statet.nico.ui.util.RunBlockingHandler;
import org.eclipse.statet.r.console.core.AbstractRController;
import org.eclipse.statet.r.core.RUtil;
import org.eclipse.statet.r.ui.dataeditor.ShowElementCommandHandler;
import org.eclipse.statet.r.ui.graphics.RGraphicCommandHandler;
import org.eclipse.statet.r.ui.pkgmanager.RPkgUICommandHandler;
import org.eclipse.statet.r.ui.rhelp.RHelpUICommandHandler;
public class RConsoleLaunching {
public static final String R_CONSOLE_CONFIGURATION_TYPE_ID = "org.eclipse.statet.r.launchConfigurations.RConsole"; //$NON-NLS-1$
public static final String R_REMOTE_CONSOLE_CONFIGURATION_TYPE_ID = "org.eclipse.statet.r.launchConfigurations.RRemoteConsole"; //$NON-NLS-1$
public static final String R_CONSOLE_PROCESS_TYPE = "R"+ToolProcess.PROCESS_TYPE_SUFFIX; //$NON-NLS-1$
public static final String LOCAL_RTERM = "local.rterm"; //$NON-NLS-1$
public static final String LOCAL_RJS = "local.rjs-rmi"; //$NON-NLS-1$
public static final String REMOTE_RJS = "remote.rjs-rmi"; //$NON-NLS-1$
public static final String REMOTE_RJS_RECONNECT = "remote.rjs-rmi-reconnect"; //$NON-NLS-1$
public static final String REMOTE_RJS_SSH = "remote.rjs-rmi.ssh"; //$NON-NLS-1$
static final String ATTR_ROOT= "org.eclipse.statet.r.debug/RConsole/"; //$NON-NLS-1$
/**
* Attribute key for R console type
*/
public static final String ATTR_TYPE = ATTR_ROOT+"type"; //$NON-NLS-1$
/**
* Attribute key for R startup arguments
*/
public static final String ATTR_OPTIONS = ATTR_ROOT+"arguments.options"; //$NON-NLS-1$
/**
* Attribute key for address, if required by console type
*/
public static final String ATTR_ADDRESS = ATTR_ROOT+"address"; //$NON-NLS-1$
/**
* Attribute key to pin console at startup
*/
public static final String ATTR_PIN_CONSOLE = ATTR_ROOT+"console.pin"; //$NON-NLS-1$
/**
* Attribute key for port number of SSH
*/
public static final String ATTR_SSH_PORT = ATTR_ROOT+"ssh.port"; //$NON-NLS-1$
/**
* Attribute key for SSH tunnel option
*/
public static final String ATTR_SSH_TUNNEL_ENABLED = ATTR_ROOT+"ssh.tunnel.enabled"; //$NON-NLS-1$
/**
* Attribute key for command to startup R
*/
public static final String ATTR_COMMAND = ATTR_ROOT+"command"; //$NON-NLS-1$
/**
* Attribute key for login (e.g. SSH)
*/
public static final String ATTR_LOGIN_NAME = ATTR_ROOT+"login.name";
/**
* Attribute key for init snippet (submitted after startup)
*/
public static final String ATTR_INIT_SCRIPT_SNIPPET = ATTR_ROOT+"init.script.snippet"; //$NON-NLS-1$
/**
* Attribute to enable object db
*/
public static final String ATTR_OBJECTDB_ENABLED = ATTR_ROOT+"objectdb.enabled"; //$NON-NLS-1$
public static final String ATTR_OBJECTDB_AUTOREFRESH_ENABLED = ATTR_ROOT+"objectdb.autorefresh.enabled"; //$NON-NLS-1$
public static final String ATTR_OBJECTDB_LISTS_MAX_LENGTH = ATTR_ROOT+"objectdb.lists.max_length"; //$NON-NLS-1$
public static final String ATTR_OBJECTDB_ENVS_MAX_LENGTH = ATTR_ROOT+"objectdb.envs.max_length"; //$NON-NLS-1$
public static void registerDefaultHandlerTo(final AbstractRController controller) {
controller.addCommandHandler(IToolEventHandler.SCHEDULE_QUIT_EVENT_ID, new QuitHandler());
controller.addCommandHandler(IToolEventHandler.RUN_BLOCKING_EVENT_ID, new RunBlockingHandler());
controller.addCommandHandler(IToolEventHandler.REPORT_STATUS_EVENT_ID, new ReportStatusHandler());
{ final ToolCommandHandler handler = new HistoryOperationsHandler();
controller.addCommandHandler(HistoryOperationsHandler.LOAD_HISTORY_ID, handler);
controller.addCommandHandler(HistoryOperationsHandler.SAVE_HISTORY_ID, handler);
controller.addCommandHandler(HistoryOperationsHandler.ADDTO_HISTORY_ID, handler);
controller.addCommandHandler(ChooseFileHandler.CHOOSE_FILE_ID, new ChooseFileHandler());
}
{ final ToolCommandHandler handler = new EclipseIDEOperationsHandler();
controller.addCommandHandler(EclipseIDEOperationsHandler.SHOW_FILE_ID, handler);
controller.addCommandHandler(EclipseIDEOperationsHandler.SHOW_HISTORY_ID, handler);
}
{ final ToolCommandHandler handler = new ShowElementCommandHandler();
controller.addCommandHandler(ShowElementCommandHandler.SHOW_ELEMENT_COMMAND_ID, handler);
}
{ final ToolCommandHandler handler = new RGraphicCommandHandler();
controller.addCommandHandler(AbstractRController.INIT_RGRAPHIC_FACTORY_HANDLER_ID, handler);
}
{ final ToolCommandHandler handler = new RHelpUICommandHandler();
controller.addCommandHandler(RHelpUICommandHandler.SHOW_HELP_COMMAND_ID, handler);
}
if (controller.getTool().getREnv() != null) {
final ToolCommandHandler handler = new RPkgUICommandHandler();
controller.addCommandHandler(RPkgUICommandHandler.OPEN_PACKAGE_MANAGER_COMMAND_ID, handler);
}
}
public static void scheduleStartupSnippet(final AbstractRController controller, final ILaunchConfiguration configuration) throws CoreException {
final String snippet = configuration.getAttribute(RConsoleLaunching.ATTR_INIT_SCRIPT_SNIPPET, (String) null);
if (snippet != null && snippet.length() > 0) {
final String[] lines = RUtil.LINE_SEPARATOR_PATTERN.split(snippet);
for (final String line : lines) {
controller.addStartupRunnable(controller.createCommandRunnable(line, SubmitType.TOOLS));
}
}
}
}