+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * 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.argeo.slc.lib.linux;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.core.execution.tasks.SystemCall;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.io.Resource;
-
-/** Call to the interpreter of a script language. */
-public class ScriptCall extends SystemCall implements InitializingBean {
- private Resource script;
- private List<Object> scriptArgs = new ArrayList<Object>();
-
- private Boolean localScriptCopy = false;
-
- /** For use in Spring. */
- public ScriptCall() {
- super();
- }
-
- /** For use in code ({@link #init()} is called). */
- public ScriptCall(Resource script) {
- this.script = script;
- init();
- }
-
- public void init() {
- initInterpreter();
- for (Object obj : scriptArgs) {
- arg(obj.toString());
- }
- }
-
- public void afterPropertiesSet() throws Exception {
- init();
- }
-
- protected void initInterpreter() {
- String ext = FilenameUtils.getExtension(script.getFilename());
-
- if (localScriptCopy) {
- File scriptFile = copyScript();
- if ("sh".equals(ext))
- arg("/bin/sh").arg(scriptFile.getAbsolutePath());
- else if ("pl".equals(ext))
- arg("/usr/bin/perl").arg(scriptFile.getAbsolutePath());
- else if ("py".equals(ext))
- arg("/usr/bin/python").arg(scriptFile.getAbsolutePath());
- else
- throw new SlcException(
- "Cannot initialize script intepreter for " + script);
- } else {
- setStdInFile(script);
- if ("sh".equals(ext))
- arg("/bin/sh").arg("-s");
- else if ("pl".equals(ext))
- arg("/usr/bin/perl").arg("/dev/stdin");
- else if ("py".equals(ext))
- arg("/usr/bin/python").arg("-");
- else
- throw new SlcException(
- "Cannot initialize script intepreter for " + script);
- }
- }
-
- private File copyScript() {
- InputStream in = null;
- OutputStream out = null;
- try {
- File scriptFile = File.createTempFile("script", ".sh");
- scriptFile.deleteOnExit();
- in = script.getInputStream();
- out = new FileOutputStream(scriptFile);
- IOUtils.copy(in, out);
- return scriptFile;
- } catch (Exception e) {
- throw new SlcException("Cannot copy " + script, e);
- } finally {
- IOUtils.closeQuietly(in);
- IOUtils.closeQuietly(out);
- }
- }
-
- public void setScript(Resource script) {
- this.script = script;
- }
-
- public void setScriptArgs(List<Object> scriptArgs) {
- this.scriptArgs = scriptArgs;
- }
-
- public void setLocalScriptCopy(Boolean localScriptCopy) {
- this.localScriptCopy = localScriptCopy;
- }
-
-}