]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.support/src/org/argeo/slc/lib/linux/ScriptCall.java
Remove unused.
[gpl/argeo-slc.git] / cms / org.argeo.slc.support / src / org / argeo / slc / lib / linux / ScriptCall.java
1 package org.argeo.slc.lib.linux;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import java.io.OutputStream;
7 import java.util.ArrayList;
8 import java.util.List;
9
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;
16
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>();
21
22 private Boolean localScriptCopy = false;
23
24 /** For use in Spring. */
25 public ScriptCall() {
26 super();
27 }
28
29 /** For use in code ({@link #init()} is called). */
30 public ScriptCall(Resource script) {
31 this.script = script;
32 init();
33 }
34
35 public void init() {
36 initInterpreter();
37 for (Object obj : scriptArgs) {
38 arg(obj.toString());
39 }
40 }
41
42 public void afterPropertiesSet() throws Exception {
43 init();
44 }
45
46 protected void initInterpreter() {
47 String ext = FilenameUtils.getExtension(script.getFilename());
48
49 if (localScriptCopy) {
50 File scriptFile = copyScript();
51 if ("sh".equals(ext))
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());
57 else
58 throw new SlcException(
59 "Cannot initialize script intepreter for " + script);
60 } else {
61 setStdInFile(script);
62 if ("sh".equals(ext))
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("-");
68 else
69 throw new SlcException(
70 "Cannot initialize script intepreter for " + script);
71 }
72 }
73
74 private File copyScript() {
75 InputStream in = null;
76 OutputStream out = null;
77 try {
78 File scriptFile = File.createTempFile("script", ".sh");
79 scriptFile.deleteOnExit();
80 in = script.getInputStream();
81 out = new FileOutputStream(scriptFile);
82 IOUtils.copy(in, out);
83 return scriptFile;
84 } catch (Exception e) {
85 throw new SlcException("Cannot copy " + script, e);
86 } finally {
87 IOUtils.closeQuietly(in);
88 IOUtils.closeQuietly(out);
89 }
90 }
91
92 public void setScript(Resource script) {
93 this.script = script;
94 }
95
96 public void setScriptArgs(List<Object> scriptArgs) {
97 this.scriptArgs = scriptArgs;
98 }
99
100 public void setLocalScriptCopy(Boolean localScriptCopy) {
101 this.localScriptCopy = localScriptCopy;
102 }
103
104 }