/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.command.api; import java.util.List; import java.util.concurrent.Future; import de.rcenvironment.core.utils.common.textstream.TextOutputReceiver; /** * Interface for the execution of string commands. Examples of commands are workflow execution, network status and manipulation, and * developer/debug output generation. * * @author Robert Mischke */ public interface CommandExecutionService { /** * Asynchronously executes a multi-command. A multi-command is a list of string tokens describing one or more commands, which are to be * executed sequentially and/or in parallel. Special tokens are used to separate individual commands, and to mark commands for parallel * execution. The default is sequential execution. * * TODO add documentation of special tokens; add examples * * All output is sent to the provided {@link TextOutputReceiver}. Before execution starts, {@link TextOutputReceiver#onStart()} is * called. If an error occurs during execution, it is passed to {@link TextOutputReceiver#onFatalError(Exception)}. If no exception * occurs, {@link TextOutputReceiver#onFinished()} is called after the last command has terminated. * * @param tokens the tokens of the multi-command to execute * @param outputReceiver the receiver of output and execution lifecycle events * @param initiator an arbitrary object providing information about the source that initiated this command; may be used to check account * permissions * @return a {@link Future} for a {@link CommandExecutionResult} that can be waited for to detect the end of command execution */ Future<CommandExecutionResult> asyncExecMultiCommand(List<String> tokens, TextOutputReceiver outputReceiver, Object initiator); /** * Writes command help information to the given {@link TextOutputReceiver}. * * @param addCommonPrefix true if the common prefix ("rce ...") should be added * @param showDevCommands whether developer commands should be included * @param outputReceiver the {@link TextOutputReceiver} to write to */ void printHelpText(boolean addCommonPrefix, boolean showDevCommands, TextOutputReceiver outputReceiver); /** * Prints the same output as {@link #printHelpText(boolean, TextOutputReceiver)}, but collects the output and returns it as a * newline-separated string. * * @param addCommonPrefix true if the common prefix ("rce ...") should be added * @param showDevCommands whether developer commands should be included * @return the collected output */ String getHelpText(boolean addCommonPrefix, boolean showDevCommands); }