X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2Ftasks%2FSystemCall.java;h=eb1d8fd41463128cb1fb4e22c7a4e845ab478057;hb=5a2ccf5f49cbda95891436c1ce8e9bdd419c0b41;hp=8b0f3d8e80f324f726c82bac8a4ee39778bb75b4;hpb=dad97a87545102becea1beb153baa677a2dcd4d8;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java index 8b0f3d8e8..eb1d8fd41 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java @@ -49,6 +49,7 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { private Resource stdOutFile = null; private Resource stdErrFile = null; + private Resource stdInFile = null; private Map> osCommands = new HashMap>(); private Map osCmds = new HashMap(); @@ -100,21 +101,36 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { /** Executes the system call. */ public void run() { + // Manage streams final Writer stdOutWriter; final Writer stdErrWriter; + final InputStream stdInStream; if (stdOutFile != null) { stdOutWriter = createWriter(stdOutFile); - } else + } else { stdOutWriter = null; + } + if (stdErrFile != null) { stdErrWriter = createWriter(stdErrFile); } else { if (stdOutFile != null) { stdErrWriter = createWriter(stdOutFile); - } else + } else { stdErrWriter = null; + } } + if (stdInFile != null) + try { + stdInStream = stdInFile.getInputStream(); + } catch (IOException e2) { + throw new SlcException("Cannot open a stream for " + stdInFile, + e2); + } + else + stdInStream = null; + if (log.isTraceEnabled()) { log.debug("os.name=" + System.getProperty("os.name")); log.debug("os.arch=" + System.getProperty("os.arch")); @@ -133,7 +149,7 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { if (redirectStreams) { // Redirect standard streams executor.setStreamHandler(createExecuteStreamHandler(stdOutWriter, - stdErrWriter)); + stdErrWriter, stdInStream)); } else { // Dummy stream handler (otherwise pump is used) executor.setStreamHandler(new DummyexecuteStreamHandler()); @@ -180,6 +196,7 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { } finally { IOUtils.closeQuietly(stdOutWriter); IOUtils.closeQuietly(stdErrWriter); + IOUtils.closeQuietly(stdInStream); } } @@ -254,7 +271,9 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { * logging mechanism. */ protected ExecuteStreamHandler createExecuteStreamHandler( - final Writer stdOutWriter, final Writer stdErrWriter) { + final Writer stdOutWriter, final Writer stdErrWriter, + final InputStream stdInStream) { + // Log writers PumpStreamHandler pumpStreamHandler = new PumpStreamHandler( @@ -270,7 +289,7 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { if (stdErrWriter != null) appendLineToFile(stdErrWriter, line); } - }, null); + }, stdInStream); return pumpStreamHandler; } @@ -433,6 +452,10 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { this.stdErrFile = stdErrFile; } + public void setStdInFile(Resource stdInFile) { + this.stdInFile = stdInFile; + } + public void setTestResult(TestResult testResult) { this.testResult = testResult; }