From 5a2ccf5f49cbda95891436c1ce8e9bdd419c0b41 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 14 Feb 2010 22:02:58 +0000 Subject: [PATCH] Add resource as stdin git-svn-id: https://svn.argeo.org/slc/trunk@3336 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../slc/core/execution/tasks/SystemCall.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) 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; } -- 2.39.5