package org.argeo.slc.cli;
-import java.io.File;
import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.logging.LogFactory;
import org.argeo.slc.core.SlcException;
import org.argeo.slc.logging.Log4jUtils;
-import org.springframework.core.io.FileSystemResource;
public class SlcMain {
public enum Mode {
"use value for given property").create('p');
private final static Option scriptOpt = OptionBuilder.withLongOpt("script")
- .withArgName("script").hasArg().withType(File.class)
- .withDescription("SLC script to execute").create('s');
+ .withArgName("script").hasArg().withDescription(
+ "SLC script to execute").create('s');
+
+ private final static Option targetsOpt = OptionBuilder.withLongOpt(
+ "targets").withArgName("targets").hasArg().withDescription(
+ "Targets to execute").create('t');
+
+ private final static Option runtimeOpt = OptionBuilder.withLongOpt(
+ "runtime").withArgName("runtime").hasArg().withDescription(
+ "Runtime to use, either a full path or relative to slc app conf dir: "
+ + "<conf dir>/runtime/<runtime>/.xml").create('r');
private final static Options options;
options = new Options();
options.addOption(modeOpt);
options.addOption(scriptOpt);
+ options.addOption(targetsOpt);
options.addOption(propertyOpt);
+ options.addOption(runtimeOpt);
}
public static void main(String[] args) {
Mode mode = null;
Properties properties = new Properties();
- File script = null;
+ String script = null;
+ String targets = null;
+ String runtimeStr = null;
try {
throw new SlcException("Mode " + Mode.single
+ " requires option '" + scriptOpt.getLongOpt()
+ "'");
- script = (File) cl.getOptionObject(scriptOpt.getOpt());
+ script = cl.getOptionValue(scriptOpt.getOpt());
+
+ // Targets
+ if (cl.hasOption(targetsOpt.getOpt()))
+ targets = cl.getOptionValue(targetsOpt.getOpt());
}
// Properties
}
}
+ // Runtime
+ if (cl.hasOption(runtimeOpt.getOpt())) {
+ runtimeStr = cl.getOptionValue(runtimeOpt.getOpt());
+ } else {
+ runtimeStr = "default";
+ }
+
} catch (ParseException e) {
System.err.println("Problem with command line arguments. "
+ e.getMessage());
initLogging(properties);
if (log.isDebugEnabled()) {
log.debug("Mode: " + mode);
+ log.debug("Runtime: " + runtimeStr);
log.debug("User properties: " + properties);
if (script != null)
- log.debug("Script: " + script.getAbsolutePath());
+ log.debug("Script: " + script);
+ if (targets != null)
+ log.debug("Targets: " + targets);
}
// Execution
if (mode.equals(Mode.single)) {
DefaultSlcRuntime runtime = new DefaultSlcRuntime();
- runtime.executeScript(new FileSystemResource(script), properties,
- null);
+ runtime.executeScript(runtimeStr, script, targets, properties,
+ null, null);
}
}
}
private static void initLogging(Properties userProperties) {
+ System.setProperty("log4j.defaultInitOverride", "true");
+
// Add log4j user properties to System properties
for (String key : userProperties.stringPropertyNames()) {
if (key.startsWith("log4j.")) {
- System.setProperty(key, userProperties.getProperty(key));
+ System.setProperty(key, userProperties.getProperty(key));
}
}
-
- System.setProperty("log4j.defaultInitOverride", "true");
Log4jUtils.initLog4j(System.getProperty("log4j.configuration",
"classpath:" + BOOTSTRAP_LOG4J_CONFIG));
log = LogFactory.getLog(SlcMain.class);