private FTPFileEntryParser createFileEntryParser()

in src/main/java/org/apache/commons/net/ftp/parser/DefaultFTPFileEntryParserFactory.java [103:158]


    private FTPFileEntryParser createFileEntryParser(final String key, final FTPClientConfig config) {
        FTPFileEntryParser parser = null;

        // Is the key a possible class name?
        if (JAVA_QUALIFIED_NAME_PATTERN.matcher(key).matches()) {
            try {
                final Class<?> parserClass = Class.forName(key);
                try {
                    parser = (FTPFileEntryParser) parserClass.newInstance();
                } catch (final ClassCastException e) {
                    throw new ParserInitializationException(
                            parserClass.getName() + " does not implement the interface " + "org.apache.commons.net.ftp.FTPFileEntryParser.", e);
                } catch (final Exception | ExceptionInInitializerError e) {
                    throw new ParserInitializationException("Error initializing parser", e);
                }
            } catch (final ClassNotFoundException e) {
                // OK, assume it is an alias
            }
        }

        if (parser == null) { // Now try for aliases
            final String ukey = key.toUpperCase(java.util.Locale.ENGLISH);
            if (ukey.contains(FTPClientConfig.SYST_UNIX_TRIM_LEADING)) {
                parser = new UnixFTPEntryParser(config, true);
            }
            // must check this after SYST_UNIX_TRIM_LEADING as it is a substring of it
            else if (ukey.contains(FTPClientConfig.SYST_UNIX)) {
                parser = new UnixFTPEntryParser(config, false);
            } else if (ukey.contains(FTPClientConfig.SYST_VMS)) {
                parser = new VMSVersioningFTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_NT)) {
                parser = createNTFTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_OS2)) {
                parser = new OS2FTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_OS400) || ukey.contains(FTPClientConfig.SYST_AS400)) {
                parser = createOS400FTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_MVS)) {
                parser = new MVSFTPEntryParser(); // Does not currently support config parameter
            } else if (ukey.contains(FTPClientConfig.SYST_NETWARE)) {
                parser = new NetwareFTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_MACOS_PETER)) {
                parser = new MacOsPeterFTPEntryParser(config);
            } else if (ukey.contains(FTPClientConfig.SYST_L8)) {
                // L8 normally means Unix, but move it to the end for some L8 systems that aren't.
                // This check should be last!
                parser = new UnixFTPEntryParser(config);
            } else {
                throw new ParserInitializationException("Unknown parser type: " + key);
            }
        }

        if (parser instanceof Configurable) {
            ((Configurable) parser).configure(config);
        }
        return parser;
    }