X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fio%2FSimpleProcess.java;h=c08f001da84910d26e8b74a2be72968f78503a26;hb=e72743b6a9fac5a99b842f92b1687fba65ef3210;hp=3e0e7f853eade21fb9fa57b45c7bbfd1c3893f3d;hpb=ddd261f331280640c5b53c7128230b629ebcd268;p=utils diff --git a/support/general/src/main/java/org/wamblee/io/SimpleProcess.java b/support/general/src/main/java/org/wamblee/io/SimpleProcess.java index 3e0e7f85..c08f001d 100644 --- a/support/general/src/main/java/org/wamblee/io/SimpleProcess.java +++ b/support/general/src/main/java/org/wamblee/io/SimpleProcess.java @@ -1,80 +1,58 @@ /* - * Copyright 2007 the original author or authors. - * + * Copyright 2005-2010 the original author or authors. + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ + */ package org.wamblee.io; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintStream; import java.io.StringWriter; import java.io.Writer; - +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; /** - * DOCUMENT ME! - * + * * @author $author$ * @version $Revision$ */ public class SimpleProcess { - /** - * DOCUMENT ME! - */ - private static final Log LOG = LogFactory.getLog(SimpleProcess.class); + private static final Logger LOG = Logger.getLogger(SimpleProcess.class.getName()); - /** - * DOCUMENT ME! - */ private File directory; - /** - * DOCUMENT ME! - */ private String[] cmd; - /** - * DOCUMENT ME! - */ private String stdout; - /** - * DOCUMENT ME! - */ private String stderr; -/** + /** * Creates a new SimpleProcess object. - * - * @param aDirectory DOCUMENT ME! - * @param aCmd DOCUMENT ME! + * */ public SimpleProcess(File aDirectory, String[] aCmd) { - directory = aDirectory; - cmd = aCmd; + directory = aDirectory; + cmd = Arrays.copyOf(aCmd, aCmd.length); } /** - * DOCUMENT ME! - * + * * @return the stdout */ public String getStdout() { @@ -82,8 +60,7 @@ public class SimpleProcess { } /** - * DOCUMENT ME! - * + * * @return the stderr */ public String getStderr() { @@ -92,50 +69,44 @@ public class SimpleProcess { /** * Runs the process and blocks until it is done. - * + * * @return Exit status of the process. - * - * @throws IOException In case of problems. + * + * @throws IOException + * In case of problems. */ public int run() throws IOException { return runImpl(); } - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - * - * @throws IOException DOCUMENT ME! - */ private int runImpl() throws IOException { try { - String fullcmd = ""; + StringBuffer fullcmd = new StringBuffer(); for (String part : cmd) { - fullcmd += (" " + part); + fullcmd.append(" " + part); } - LOG.debug("Executing '" + fullcmd + "' in directory '" + directory - + "'"); + LOG.fine("Executing '" + fullcmd + "' in directory '" + directory + + "'"); - java.lang.Process proc = Runtime.getRuntime() - .exec(cmd, null, directory); + java.lang.Process proc = Runtime.getRuntime().exec(cmd, null, + directory); // Read standard output and error in separate threads to avoid // deadlock. - StringWriter myStdout = new StringWriter(); - StringWriter myStderr = new StringWriter(); - Thread stdoutReader = readAndLogStream("STDOUT> ", - proc.getInputStream(), myStdout); - Thread stderrReader = readAndLogStream("STDERR> ", - proc.getErrorStream(), myStderr); + StringWriter myStdout = new StringWriter(); + StringWriter myStderr = new StringWriter(); + Thread stdoutReader = readAndLogStream("STDOUT> ", proc + .getInputStream(), myStdout); + Thread stderrReader = readAndLogStream("STDERR> ", proc + .getErrorStream(), myStderr); try { proc.waitFor(); } catch (InterruptedException e) { IOException exception = new IOException( - "Process was terminated: " + this); + "Process was terminated: " + this); exception.initCause(e); throw exception; } @@ -143,94 +114,76 @@ public class SimpleProcess { waitForReader(stdoutReader); waitForReader(stderrReader); - stdout = myStdout.toString(); - stderr = myStderr.toString(); + stdout = myStdout.toString(); + stderr = myStderr.toString(); if (proc.exitValue() != 0) { - LOG.warn("Exit value was non-zero: " + this); + LOG.warning("Exit value was non-zero: " + this); } else { - LOG.debug("Process finished"); + LOG.fine("Process finished"); } return proc.exitValue(); } catch (IOException e) { - IOException exception = new IOException("Error executing process: " - + this); + IOException exception = new IOException( + "Error executing process: " + this); exception.initCause(e); throw exception; } } - /** - * DOCUMENT ME! - * - * @param aReaderThread DOCUMENT ME! - */ private void waitForReader(Thread aReaderThread) { try { aReaderThread.join(); } catch (InterruptedException e) { - LOG.warn(this - + ": error waiting for output stream reader of process to finish"); + LOG + .log(Level.WARNING, this + + ": error waiting for output stream reader of process to finish", e); } } - /** - * DOCUMENT ME! - * - * @param aPrefix DOCUMENT ME! - * @param aStream DOCUMENT ME! - * @param aOutput DOCUMENT ME! - * - * @return DOCUMENT ME! - */ private Thread readAndLogStream(final String aPrefix, final InputStream aStream, final Writer aOutput) { Thread inputReader = new Thread() { - @Override - public void run() { - BufferedReader br = null; + @Override + public void run() { + BufferedReader br = null; - try { - br = new BufferedReader(new InputStreamReader(aStream)); + try { + br = new BufferedReader(new InputStreamReader(aStream)); - String str; + String str; - while ((str = br.readLine()) != null) { - LOG.debug(aPrefix + str); - aOutput.write(str); - } - } catch (IOException e) { - LOG.warn(SimpleProcess.this - + ": error reading input stream", e); - } finally { - if (br != null) { - try { - br.close(); - } catch (IOException e) { - LOG.warn("Error closing stream " + aPrefix); - } + while ((str = br.readLine()) != null) { + LOG.fine(aPrefix + str); + aOutput.write(str); + } + } catch (IOException e) { + LOG.log(Level.FINE, SimpleProcess.this + + ": error reading input stream", e); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + LOG.log(Level.WARNING, "Error closing stream " + aPrefix, e); } } } - }; + } + }; inputReader.start(); return inputReader; } - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ @Override public String toString() { - String fullcmd = ""; + StringBuffer fullcmd = new StringBuffer(); for (String part : cmd) { - fullcmd += (part + " "); + fullcmd.append(part + " "); } return "process(dir = '" + directory + "', cmd = '" + fullcmd + "')";