import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.ant.AntExecutionContext;
import org.argeo.slc.ant.AntSlcApplication;
-import org.argeo.slc.ant.SlcAntConstants;
-import org.argeo.slc.ant.SlcAntException;
+import org.argeo.slc.ant.AntConstants;
import org.argeo.slc.core.SlcException;
import org.argeo.slc.core.process.SlcExecution;
-import org.argeo.slc.runtime.SlcExecutionContext;
+import org.argeo.slc.runtime.SlcExecutionOutput;
import org.argeo.slc.spring.SpringUtils;
import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
public class DefaultSlcRuntime {
public final static String SLC_ROOT_FILE_NAME = "slcRoot.properties";
- public SlcExecutionContext executeScript(String runtimeStr,
- Resource script, String targets, Properties properties,
- Map<String, Object> references) {
+ /**
+ * Simplified execution with default runtime, default target, and no
+ * properties/reference arguments.
+ *
+ * @param script
+ * path to the script
+ * @param executionOutput
+ * output
+ *
+ * @see #executeScript(String, String, String, Properties, Map,
+ * SlcExecutionOutput)
+ */
+ public void executeScript(String script,
+ SlcExecutionOutput<AntExecutionContext> executionOutput) {
+ executeScript(null, script, null, null, null, executionOutput);
+ }
- Resource slcRootFile = findSlcRootFile(script);
- String scriptRelativePath = SpringUtils.extractRelativePath(SpringUtils
- .getParent(slcRootFile), script);
+ /**
+ * Simplified execution with default runtime, and no properties/reference
+ * arguments.
+ *
+ * @param script
+ * path to the script
+ * @param targets
+ * comma separated list of targets
+ * @param executionOutput
+ * output
+ * @see #executeScript(String, String, String, Properties, Map,
+ * SlcExecutionOutput)
+ */
+ public void executeScript(String script, String targets,
+ SlcExecutionOutput<AntExecutionContext> executionOutput) {
+ executeScript(null, script, targets, null, null, executionOutput);
+ }
- SlcExecution slcExecution = createSlcExecution();
- slcExecution.setStatus(SlcExecution.STATUS_RUNNING);
- slcExecution.getAttributes().put(SlcAntConstants.EXECATTR_RUNTIME,
- runtimeStr);
- slcExecution.getAttributes().put(SlcAntConstants.EXECATTR_ANT_FILE,
- scriptRelativePath);
- if (targets != null)
- slcExecution.getAttributes().put(
- SlcAntConstants.EXECATTR_ANT_TARGETS, targets);
+ public void executeScript(String runtime, String script, String targets,
+ Properties properties, Map<String, Object> references,
+ SlcExecutionOutput<AntExecutionContext> executionOutput) {
+
+ Resource scriptRes = findScript(script);
+ Resource slcRootFile = findSlcRootFile(scriptRes);
+ if (slcRootFile == null)
+ throw new SlcException(
+ "Could not find any SLC root file, "
+ + "please configure one at the root of your scripts hierarchy.");
+
+ SlcExecution slcExecution = createSlcExecution(runtime, slcRootFile,
+ scriptRes, targets);
AntSlcApplication application = getApplication(slcRootFile);
- return application.execute(slcExecution, properties, references);
+ application.execute(slcExecution, properties, references,
+ executionOutput);
+ }
+
+ protected Resource findScript(String scriptStr) {
+ Resource scriptRes;
+ if (new File(scriptStr).exists()) {
+ scriptRes = new FileSystemResource(scriptStr);
+ } else {
+ scriptRes = new DefaultResourceLoader(SlcMain.class
+ .getClassLoader()).getResource(scriptStr);
+ }
+ return scriptRes;
}
- protected SlcExecution createSlcExecution() {
+ protected SlcExecution createSlcExecution(String runtimeStr,
+ Resource slcRootFile, Resource script, String targets) {
SlcExecution slcExecution = new SlcExecution();
slcExecution.setUuid(UUID.randomUUID().toString());
try {
slcExecution.setHost(SlcExecution.UNKOWN_HOST);
}
- slcExecution.setType(SlcAntConstants.EXECTYPE_SLC_ANT);
+ slcExecution.setType(AntConstants.EXECTYPE_SLC_ANT);
slcExecution.setUser(System.getProperty("user.name"));
+
+ if (runtimeStr != null)
+ slcExecution.getAttributes().put(AntConstants.EXECATTR_RUNTIME,
+ runtimeStr);
+ String scriptRelativePath = SpringUtils.extractRelativePath(SpringUtils
+ .getParent(slcRootFile), script);
+
+ slcExecution.getAttributes().put(AntConstants.EXECATTR_ANT_FILE,
+ scriptRelativePath);
+ if (targets != null)
+ slcExecution.getAttributes().put(AntConstants.EXECATTR_ANT_TARGETS,
+ targets);
+
+ slcExecution.setStatus(SlcExecution.STATUS_SCHEDULED);
return slcExecution;
}
// Conf dir
String confDirStr = rootProps
- .getProperty(SlcAntConstants.CONF_DIR_PROPERTY);
+ .getProperty(AntConstants.CONF_DIR_PROPERTY);
if (confDirStr != null)
confDir = new DefaultResourceLoader(application.getClass()
.getClassLoader()).getResource(confDirStr);
// Work dir
String workDirStr = rootProps
- .getProperty(SlcAntConstants.WORK_DIR_PROPERTY);
+ .getProperty(AntConstants.WORK_DIR_PROPERTY);
if (workDirStr != null) {
workDir = new File(workDirStr);
}
* defined by {@link #SLC_ROOT_FILE_NAME}.
*/
protected Resource findSlcRootFile(Resource currDir) {
- if (log.isDebugEnabled())
- log.debug("Look for SLC root file in " + currDir);
+ if (log.isTraceEnabled())
+ log.trace("Look for SLC root file in " + currDir);
try {
Resource slcRootFile = currDir.createRelative(SLC_ROOT_FILE_NAME);
if (slcRootFile.exists()) {
+ if (log.isDebugEnabled())
+ log.debug("Found SLC root file: " + slcRootFile);
return slcRootFile;
} else {
String currPath = currDir.getURL().getPath();
try {
p.load(in);
} catch (IOException e) {
- throw new SlcAntException("Cannot read SLC root file", e);
+ throw new SlcException("Cannot read SLC root file", e);
}
return p;
}