/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2015
*/
package simple;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.ibm.streams.operator.logging.TraceLevel;
import com.ibm.streamsx.topology.context.ContextProperties;
import com.ibm.streamsx.topology.context.JobProperties;
import com.ibm.streamsx.topology.context.StreamsContext;
public class Util {
private static Logger LOGGER = Logger.getLogger("simple.util");
private static Map<String,Level> levelMap = new HashMap<String,Level>();
static {
levelMap.put("off", TraceLevel.OFF);
levelMap.put("error", TraceLevel.ERROR);
levelMap.put("warn", TraceLevel.WARN);
levelMap.put("info", TraceLevel.INFO);
levelMap.put("trace", TraceLevel.TRACE);
levelMap.put("debug", TraceLevel.DEBUG);
}
/**
* Look for configuration properties present in <code>args</code>
* and sets the property in the <code>config</code> map.
* <p>
* An property item in <code>args</code> is required to be in the format:
* <pre>
* <property-name>=<value>
* </pre>
* @param args list to scan. Unrecognized items are silently ignored.
* @return configuration map
* @see StreamsContext#submit(com.ibm.streamsx.topology.Topology, Map)
*/
public static Map<String,Object> createConfig(String[] args) {
String[] cfgItems = {
ContextProperties.APP_DIR, // String
ContextProperties.KEEP_ARTIFACTS, // Boolean
ContextProperties.TOOLKIT_DIR, // String
ContextProperties.TRACING_LEVEL, // java.util.logging.Level
// TODO ContextProperties.VMARGS, // List<String>
JobProperties.GROUP, // String
JobProperties.NAME, // String
JobProperties.OVERRIDE_RESOURCE_LOAD_PROTECTION, // Boolean
JobProperties.DATA_DIRECTORY, // String
JobProperties.PRELOAD_APPLICATION_BUNDLES, // Boolean
};
Map<String,Object> config = new HashMap<String,Object>();
// handle param=<value>
for (String arg : args) {
String[] toks = arg.split("=", 2);
if (toks.length > 1) {
for (String item : cfgItems) {
if (toks[0].equals(item)) {
String valStr = toks[1];
Object value = valStr;
if (item.equals(ContextProperties.TRACING_LEVEL))
value = toTracingLevel(valStr);
else if (item.equals(ContextProperties.KEEP_ARTIFACTS))
value = Boolean.valueOf(valStr);
else if (item.equals(JobProperties.OVERRIDE_RESOURCE_LOAD_PROTECTION))
value = Boolean.valueOf(valStr);
else if (item.equals(JobProperties.PRELOAD_APPLICATION_BUNDLES))
value = Boolean.valueOf(valStr);
config.put(item, value);
LOGGER.info("Setting config: item="+item+" value="+value+" [arg="+arg+"]");
}
}
}
}
return config;
}
private static Level toTracingLevel(String str) {
Level l = levelMap.get(str.toLowerCase());
if (l==null)
throw new IllegalArgumentException("Unrecognized tracing level '"+str+"'."
+ " Must be one of: "+levelMap.keySet());
return l;
}
}