Source code

    001/*
    002# Licensed Materials - Property of IBM
    003# Copyright IBM Corp. 2015
    004 */
    005package simple;
    006
    007import java.util.HashMap;
    008import java.util.Map;
    009import java.util.logging.Level;
    010import java.util.logging.Logger;
    011
    012import com.ibm.streams.operator.logging.TraceLevel;
    013import com.ibm.streamsx.topology.context.ContextProperties;
    014import com.ibm.streamsx.topology.context.JobProperties;
    015import com.ibm.streamsx.topology.context.StreamsContext;
    016
    017public class Util {
    018    private static Logger LOGGER = Logger.getLogger("simple.util");
    019
    020    private static Map<String,Level> levelMap = new HashMap<String,Level>();
    021    static {
    022        levelMap.put("off", TraceLevel.OFF);
    023        levelMap.put("error", TraceLevel.ERROR);
    024        levelMap.put("warn", TraceLevel.WARN);
    025        levelMap.put("info", TraceLevel.INFO);
    026        levelMap.put("trace", TraceLevel.TRACE);
    027        levelMap.put("debug", TraceLevel.DEBUG);
    028    }
    029
    030    /**
    031     * Look for configuration properties present in <code>args</code>
    032     * and sets the property in the <code>config</code> map.
    033     * <p>
    034     * An property item in <code>args</code> is required to be in the format:
    035     * <pre>
    036     * &lt;property-name>=&lt;value>
    037     * </pre>
    038     * @param args list to scan.  Unrecognized items are silently ignored.
    039     * @return configuration map
    040     * @see StreamsContext#submit(com.ibm.streamsx.topology.Topology, Map)
    041     */
    042    public static Map<String,Object> createConfig(String[] args) {
    043        String[] cfgItems = {
    044                ContextProperties.APP_DIR,  // String
    045                ContextProperties.KEEP_ARTIFACTS, // Boolean
    046                ContextProperties.TOOLKIT_DIR,  // String
    047                ContextProperties.TRACING_LEVEL,  // java.util.logging.Level
    048                // TODO ContextProperties.VMARGS,   // List<String>
    049                JobProperties.GROUP,  // String
    050                JobProperties.NAME,   // String
    051                JobProperties.OVERRIDE_RESOURCE_LOAD_PROTECTION, // Boolean
    052                JobProperties.DATA_DIRECTORY, // String
    053                JobProperties.PRELOAD_APPLICATION_BUNDLES,  // Boolean
    054        };
    055
    056        Map<String,Object> config = new HashMap<String,Object>();
    057
    058        // handle param=<value>
    059        for (String arg : args) {
    060            String[] toks = arg.split("=", 2);
    061            if (toks.length > 1) {
    062                for (String item : cfgItems) {
    063                    if (toks[0].equals(item)) {
    064                        String valStr = toks[1];
    065                        Object value = valStr;
    066                        if (item.equals(ContextProperties.TRACING_LEVEL))
    067                            value = toTracingLevel(valStr);
    068                        else if (item.equals(ContextProperties.KEEP_ARTIFACTS))
    069                            value = Boolean.valueOf(valStr);
    070                        else if (item.equals(JobProperties.OVERRIDE_RESOURCE_LOAD_PROTECTION))
    071                            value = Boolean.valueOf(valStr);
    072                        else if (item.equals(JobProperties.PRELOAD_APPLICATION_BUNDLES))
    073                            value = Boolean.valueOf(valStr);
    074
    075                        config.put(item, value);
    076                        LOGGER.info("Setting config: item="+item+" value="+value+"  [arg="+arg+"]");
    077                    }
    078                }
    079            }
    080        }
    081
    082        return config;
    083    }
    084
    085    private static Level toTracingLevel(String str) {
    086        Level l = levelMap.get(str.toLowerCase());
    087        if (l==null)
    088            throw new IllegalArgumentException("Unrecognized tracing level '"+str+"'."
    089                    + " Must be one of: "+levelMap.keySet());
    090        return l;
    091    }
    092
    093}