/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.executor.context; import java.io.IOException; import de.rcenvironment.core.utils.common.validation.ValidationFailureException; import de.rcenvironment.core.utils.executor.CommandLineExecutor; import de.rcenvironment.core.utils.executor.context.spi.ExecutorContext; import de.rcenvironment.core.utils.executor.context.spi.SandboxStrategy; /** * Convenience class that encapsulates the handling of {@link ExecutorContext} and * {@link SandboxStrategy} instances for typical use cases (Facade pattern). * * @author Robert Mischke * */ public class SandboxedExecutorLifeCycleFacade { private ExecutorContext executionContext; private SandboxStrategy sandboxStrategy; public SandboxedExecutorLifeCycleFacade(ExecutorContextFactory factory) { this.executionContext = factory.createExecutorContext(); this.sandboxStrategy = factory.createSandboxStrategy(executionContext); } /** * Initializes an executor context session. A session is a scope for one or more command * execution phases that may share properties and/or resources. * * @throws IOException on general I/O errors * @throws ValidationFailureException on validation errors caused by properties passed to the * concrete implementation */ public void setUpSession() throws IOException, ValidationFailureException { executionContext.setUpSession(); } /** * Prepares and/or fetches the proper {@link CommandLineExecutor} to use for the next execution * phase. The executor may or may not use the same sandbox as a previous execution phase; this * is determined by the chosen sandbox strategy. * * IMPORTANT: Callers must return the acquired executor with * {@link #tearDownExecutionPhase(CommandLineExecutor)} when finished. * * @return the executor to use for the next execution phase * @throws IOException on general I/O errors */ public CommandLineExecutor setUpExecutionPhase() throws IOException { return sandboxStrategy.prepareExecutionPhase(); } /** * Returns an executor that was acquired via {@link #setUpExecutionPhase()}. * * IMPORTANT: Callers of {@link #setUpExecutionPhase()} *MUST* call this method when finished, * as it may perform important cleanup operations. * * @param executor the previously-acquired executor * @throws IOException on general I/O errors */ public void tearDownExecutionPhase(CommandLineExecutor executor) throws IOException { sandboxStrategy.afterExecutionPhase(executor); } /** * Ends the executor context session. * * @throws IOException on general I/O errors */ public void tearDownSession() throws IOException { sandboxStrategy.beforeSessionTeardown(); executionContext.tearDownSession(); } /** * Provides access to the wrapped {@link ExecutorContext} if needed. * * @return the {@link ExecutorContext} used for the current session */ public ExecutorContext getExecutorContext() { return executionContext; } }