001package co.codewizards.cloudstore.core.util;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.List;
006
007import org.slf4j.Logger;
008import org.slf4j.LoggerFactory;
009
010public final class MainArgsUtil {
011        private static final Logger logger = LoggerFactory.getLogger(MainArgsUtil.class);
012
013        private MainArgsUtil() { }
014
015        public static String[][] separateSystemPropertiesFromOtherArgs(String[] args) {
016                if (logger.isDebugEnabled())
017                        logger.debug("separateSystemPropertiesFromOtherArgs: args={}", Arrays.toString(args));
018
019                List<String> sysPropArgs = new ArrayList<String>(args.length);
020                List<String> otherArgs = new ArrayList<String>(args.length);
021
022                for (String arg : args) {
023                        if (arg.startsWith("-D"))
024                                sysPropArgs.add(arg);
025                        else
026                                otherArgs.add(arg);
027                }
028                return new String[][] {
029                        sysPropArgs.toArray(new String[sysPropArgs.size()]),
030                        otherArgs.toArray(new String[otherArgs.size()])
031                };
032        }
033
034        public static String[] extractAndApplySystemPropertiesReturnOthers(String[] args) {
035                String[][] sysPropArgsAndOtherArgs = separateSystemPropertiesFromOtherArgs(args);
036                String[] sysPropArgs = sysPropArgsAndOtherArgs[0];
037                String[] otherArgs = sysPropArgsAndOtherArgs[1];
038                for (String arg : sysPropArgs) {
039                        if (!arg.startsWith("-D"))
040                                throw new IllegalStateException("sysPropArgs contains element not starting with '-D': " + arg);
041
042                        String kv = arg.substring(2);
043                        int equalsIndex = kv.indexOf('=');
044                        if (equalsIndex >= 0) {
045                                String k = kv.substring(0, equalsIndex);
046                                String v = kv.substring(equalsIndex + 1);
047                                logger.debug("extractAndApplySystemPropertiesReturnOthers: k='{}' v='{}'", k, v);
048                                System.setProperty(k, v);
049                        }
050                        else {
051                                logger.debug("extractAndApplySystemPropertiesReturnOthers: kv='{}'", kv);
052                                System.setProperty(kv, "");
053                        }
054                }
055                return otherArgs;
056        }
057}