]>
git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.support/src/org/argeo/slc/lib/linux/ScriptCall.java
1 package org
.argeo
.slc
.lib
.linux
;
4 import java
.io
.FileOutputStream
;
5 import java
.io
.InputStream
;
6 import java
.io
.OutputStream
;
7 import java
.util
.ArrayList
;
10 import org
.apache
.commons
.io
.FilenameUtils
;
11 import org
.apache
.commons
.io
.IOUtils
;
12 import org
.argeo
.slc
.SlcException
;
13 import org
.argeo
.slc
.core
.execution
.tasks
.SystemCall
;
14 import org
.springframework
.beans
.factory
.InitializingBean
;
15 import org
.springframework
.core
.io
.Resource
;
17 /** Call to the interpreter of a script language. */
18 public class ScriptCall
extends SystemCall
implements InitializingBean
{
19 private Resource script
;
20 private List
<Object
> scriptArgs
= new ArrayList
<Object
>();
22 private Boolean localScriptCopy
= false;
24 /** For use in Spring. */
29 /** For use in code ({@link #init()} is called). */
30 public ScriptCall(Resource script
) {
37 for (Object obj
: scriptArgs
) {
42 public void afterPropertiesSet() throws Exception
{
46 protected void initInterpreter() {
47 String ext
= FilenameUtils
.getExtension(script
.getFilename());
49 if (localScriptCopy
) {
50 File scriptFile
= copyScript();
52 arg("/bin/sh").arg(scriptFile
.getAbsolutePath());
53 else if ("pl".equals(ext
))
54 arg("/usr/bin/perl").arg(scriptFile
.getAbsolutePath());
55 else if ("py".equals(ext
))
56 arg("/usr/bin/python").arg(scriptFile
.getAbsolutePath());
58 throw new SlcException(
59 "Cannot initialize script intepreter for " + script
);
63 arg("/bin/sh").arg("-s");
64 else if ("pl".equals(ext
))
65 arg("/usr/bin/perl").arg("/dev/stdin");
66 else if ("py".equals(ext
))
67 arg("/usr/bin/python").arg("-");
69 throw new SlcException(
70 "Cannot initialize script intepreter for " + script
);
74 private File
copyScript() {
75 InputStream in
= null;
76 OutputStream out
= null;
78 File scriptFile
= File
.createTempFile("script", ".sh");
79 scriptFile
.deleteOnExit();
80 in
= script
.getInputStream();
81 out
= new FileOutputStream(scriptFile
);
82 IOUtils
.copy(in
, out
);
84 } catch (Exception e
) {
85 throw new SlcException("Cannot copy " + script
, e
);
87 IOUtils
.closeQuietly(in
);
88 IOUtils
.closeQuietly(out
);
92 public void setScript(Resource script
) {
96 public void setScriptArgs(List
<Object
> scriptArgs
) {
97 this.scriptArgs
= scriptArgs
;
100 public void setLocalScriptCopy(Boolean localScriptCopy
) {
101 this.localScriptCopy
= localScriptCopy
;