public static PARSE_MODE parseMode(String modeString) {
            for (PARSE_MODE m : PARSE_MODE.values()) {
                if (m.name().equalsIgnoreCase(modeString)) {
                    return m;
                }
            }
            StringBuilder sb = new StringBuilder();
            int i = 0;
            for (PARSE_MODE m : PARSE_MODE.values()) {
                if (i++ > 0) {
                    sb.append(", ");
                }
                sb.append(m.name().toLowerCase(Locale.US));
            }
            throw new IllegalArgumentException("mode must be one of: (" + sb +
                    "). I regret I do not understand: " + modeString);
        }
{@link PARSE_MODE#RMETA} "recursive metadata" is the same as the -J option
in tika-app and the /rmeta endpoint in tika-server.  Each embedded file is represented as
its own metadata object.

{@link PARSE_MODE#CONCATENATE} is similar
to the legacy tika-app behavior and the /tika endpoint (accept: application/json) in
tika-server.  This concatenates the
contents of embedded files and returns a single metadata object for the file no
matter how many embedded objects there are; this option throws away metadata from
embedded objects and silently skips exceptions in embedded objects.
tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java