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;
}