public static List parseDelimitedString()

in winegrower-core/src/main/java/org/apache/winegrower/deployer/BundleImpl.java [616:677]


        public static List<String> parseDelimitedString(String value, String delim, boolean trim) {
            if (value == null) {
                value = "";
            }

            List<String> list = new ArrayList<String>();

            int CHAR = 1;
            int DELIMITER = 2;
            int STARTQUOTE = 4;
            int ENDQUOTE = 8;

            StringBuilder sb = new StringBuilder();

            int expecting = (CHAR | DELIMITER | STARTQUOTE);

            boolean isEscaped = false;
            for (int i = 0; i < value.length(); i++) {
                char c = value.charAt(i);

                boolean isDelimiter = (delim.indexOf(c) >= 0);

                if (!isEscaped && (c == '\\')) {
                    isEscaped = true;
                    continue;
                }

                if (isEscaped) {
                    sb.append(c);
                } else if (isDelimiter && ((expecting & DELIMITER) > 0)) {
                    if (trim) {
                        list.add(sb.toString().trim());
                    } else {
                        list.add(sb.toString());
                    }
                    sb.delete(0, sb.length());
                    expecting = (CHAR | DELIMITER | STARTQUOTE);
                } else if ((c == '"') && ((expecting & STARTQUOTE) > 0)) {
                    sb.append(c);
                    expecting = CHAR | ENDQUOTE;
                } else if ((c == '"') && ((expecting & ENDQUOTE) > 0)) {
                    sb.append(c);
                    expecting = (CHAR | STARTQUOTE | DELIMITER);
                } else if ((expecting & CHAR) > 0) {
                    sb.append(c);
                } else {
                    throw new IllegalArgumentException("Invalid delimited string: " + value);
                }

                isEscaped = false;
            }

            if (sb.length() > 0) {
                if (trim) {
                    list.add(sb.toString().trim());
                } else {
                    list.add(sb.toString());
                }
            }

            return list;
        }