/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.executor.context.impl; import java.io.IOException; 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; /** * A sandbox strategy that reuses a single sandbox for the whole duration of a * {@link ExecutorContext} session, ignoring execution phase switches. * * @author Robert Mischke */ public class ContinuousSandboxStrategy implements SandboxStrategy { private CommandLineExecutor singleExecutor; private ExecutorContext executionEnvironment; public ContinuousSandboxStrategy(ExecutorContext executionEnvironment) { this.executionEnvironment = executionEnvironment; } @Override public CommandLineExecutor prepareExecutionPhase() throws IOException { // only create one durable executor and sandbox if (singleExecutor == null) { singleExecutor = executionEnvironment.setUpSandboxedExecutor(); } return singleExecutor; } @Override public void afterExecutionPhase(CommandLineExecutor executor) throws IOException { // consistency check if (executor != singleExecutor) { throw new IllegalStateException("Provided executor does not match internal executor"); } // NOP } @Override public void beforeSessionTeardown() throws IOException { // tear down only on global/static tear-down executionEnvironment.tearDownSandbox(singleExecutor); } }