/* * Copyright (C) 2008 Universidade Federal de Campina Grande * * This file is part of OurGrid. * * OurGrid is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.ourgrid.common.executor; import org.ourgrid.common.executor.config.ExecutorConfiguration; import br.edu.ufcg.lsd.commune.container.logging.CommuneLogger; /** * This class define an abstraction for the operating system dependent part of * executing commands. The concrete implementors of this class must provide the * correct behavior for executing a command, killing a process and changing the * permissions of files. */ public abstract class VanillaExecutor extends AbstractExecutor { public VanillaExecutor(CommuneLogger logger) { super(logger); } /** * Serial identification of the class. It need to be changed only if the * class interface is changed. */ private static final long serialVersionUID = 33L; /** * Creates and returns a instance of ExcecutorResult that will contain the * informations about the finished process. * * @param process The process that is supposed to be finished and the * streams must be caught and the exit value recovered. * @return An instance of ExecutorResult describing the result of <i>process</i> * execution. * @throws InterruptedException If the thread that is catching the result is * interrupted. */ protected ExecutorResult catchOutput( Process process ) throws InterruptedException { /* create an instance of Executor result information class */ ExecutorResult result = new ExecutorResult(); OutputCatcher stdOutput = new OutputCatcher( process.getInputStream() ); OutputCatcher stdErr = new OutputCatcher( process.getErrorStream() ); result.setExitValue( process.waitFor() ); result.setStdout( stdOutput.getResult() ); result.setStderr( stdErr.getResult() ); return result; } /** * This method provide a Thread safe implementation for Map management. The * idea is to protect the cuncurrent modification in the Map. * * @param handle The handle that identifies the process must be removed from * Map. */ protected synchronized void removeFromProcesses( ExecutorHandle handle ) { Process p = removeProcess(handle); p.destroy(); } public void setConfiguration(ExecutorConfiguration executorConfiguratrion) { // TODO Auto-generated method stub } public void finishExecution() throws ExecutorException { // TODO Auto-generated method stub } }