static Map convertCommandLineArgs()

in src/main/java/org/apache/sling/launchpad/app/Main.java [724:850]


    static Map<String, String> convertCommandLineArgs(
            Map<String, String> rawArgs) {
        final HashMap<String, String> props = new HashMap<String, String>();
        boolean errorArg = false;
        for (Entry<String, String> arg : rawArgs.entrySet()) {
            if (arg.getKey().length() == 1 || arg.getKey().startsWith("D")) {
                String value = arg.getValue();
                switch (arg.getKey().charAt(0)) {
                    case 'j':
                        if (value == arg.getKey()) {
                            errorArg("-j", "Missing host:port value");
                            errorArg = true;
                            continue;
                        }
                        props.put(PROP_CONTROL_SOCKET, value);
                        break;

                    case 'l':
                        if (value == arg.getKey()) {
                            errorArg("-l", "Missing log level value");
                            errorArg = true;
                            continue;
                        }
                        props.put(PROP_LOG_LEVEL, value);
                        break;

                    case 'f':
                        if (value == arg.getKey()) {
                            errorArg("-f", "Missing log file value");
                            errorArg = true;
                            continue;
                        } else if ("-".equals(value)) {
                            value = "";
                        }
                        props.put(PROP_LOG_FILE, value);
                        break;

                    case 'c':
                        if (value == arg.getKey()) {
                            errorArg("-c", "Missing directory value");
                            errorArg = true;
                            continue;
                        }
                        props.put(SharedConstants.SLING_HOME, value);
                        break;

                    case 'i':
                        if (value == arg.getKey()) {
                            errorArg("-i", "Missing launchpad directory value");
                            errorArg = true;
                            continue;
                        }
                        props.put(SharedConstants.SLING_LAUNCHPAD, value);
                        break;

                    case 'a':
                        if (value == arg.getKey()) {
                            errorArg("-a", "Missing address value");
                            errorArg = true;
                            continue;
                        }
                        props.put(PROP_HOST, value);
                        break;

                    case 'p':
                        if (value == arg.getKey()) {
                            errorArg("-p", "Missing port value");
                            errorArg = true;
                            continue;
                        }
                        try {
                            // just to verify it is a number
                            Integer.parseInt(value);
                            props.put(PROP_PORT, value);
                        } catch (RuntimeException e) {
                            errorArg("-p", "Bad port: " + value);
                            errorArg = true;
                        }
                        break;

                    case 'r':
                        if (value == arg.getKey()) {
                            errorArg("-r", "Missing root path value");
                            errorArg = true;
                            continue;
                        }
                        props.put(PROP_CONTEXT_PATH, value);
                        break;

                    case 'n':
                        props.put(PROP_SHUTDOWN_HOOK, Boolean.FALSE.toString());
                        break;

                    case 'D':
                        if (value == arg.getKey()) {
                            errorArg("-D", "Missing property assignment");
                            errorArg = true;
                            continue;
                        }
                        if (arg.getKey().length() > 1) {
                            //Dfoo=bar arg.key=Dfoo and arg.value=bar
                            props.put(arg.getKey().substring(1), arg.getValue());
                        } else {
                            //D foo=bar arg.key=D and arg.value=foo=bar
                            String[] parts = value.split("=");
                            int valueIdx = (parts.length > 1) ? 1 : 0;
                            props.put(parts[0], parts[valueIdx]);
                        }
                        break;

                    default:
                        errorArg("-" + arg.getKey(), "Unrecognized option");
                        errorArg = true;
                        break;
                }
            } else if ("start".equals(arg.getKey())
                    || "stop".equals(arg.getKey())
                    || "status".equals(arg.getKey())
                    || "threads".equals(arg.getKey())) {
                props.put(PROP_CONTROL_ACTION, arg.getValue());
            } else {
                errorArg(arg.getKey(), "Unrecognized option");
                errorArg = true;
            }
        }
        return errorArg ? null : props;
    }