/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.wrapper.sandboxed;
import java.io.IOException;
import de.rcenvironment.core.utils.common.validation.ValidationFailureException;
import de.rcenvironment.core.utils.executor.CommandLineExecutor;
/**
* An Interface that abstracts away all operations that depend on the selected delegation mode, for
* example "local" or "SSH" (strategy pattern).
*
* @author Robert Mischke
*/
public interface ExecutionEnvironment {
/**
* Set up the "static environment", ie everything that is not bound to a single invocation of
* the target executable. A typical example would be a network connection to the execution host.
*
* @throws IOException on I/O errors
* @throws ValidationFailureException on invalid configuration values
*/
void setupStaticEnvironment() throws IOException,
ValidationFailureException;
/**
* Closes and/or cleans up the "static environment" created by a call to
* {@link #setupStaticEnvironment()}.
*/
void tearDownStaticEnvironment();
/**
* Creates a ready-to-use executor that has its work directory set to a new "sandbox".
* Typipcally, this sandbox is simply a temporary directory on the execution host.
*
* Note that this method always creates a new sandbox; this method is usually invoked by a
* {@link SandboxBehaviour} implementation whenever a new sandbox directory is required.
*
* @return a new {@link CommandLineExecutor} with a new associated sandbox
* @throws IOException on I/O errors
*/
CommandLineExecutor setupExecutorWithSandbox() throws IOException;
/**
* Disposes the sandbox associated with the given executor. The executor must have been
* generated by the same {@link ExecutionEnvironment} instance, otherwise, the behaviour of this
* method is undefined.
*
* @param executor the {@link CommandLineExecutor} to gather sandbox information from
* @throws IOException on I/O errors
*/
void tearDownSandbox(CommandLineExecutor executor) throws IOException;
/**
* Generates a new, system-specific path in the target environment that can be used to
* temporarily store arbitrary files. Usually a simple temporary directory, but with the two
* properties that (1) it is empty on its creation, and (2) no other processes should write and
* delete files to/from it.
*
* @return the system-specific path of the storage directory
* @throws IOException on I/O errors
*/
String createUniqueTemporaryStoragePath() throws IOException;
}