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}