|
Commons Net example source code file (DefaultFTPFileEntryParserFactory.java)
The Commons Net DefaultFTPFileEntryParserFactory.java source code/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.net.ftp.parser; import java.util.regex.Pattern; import org.apache.commons.net.ftp.Configurable; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFileEntryParser; /** * This is the default implementation of the * FTPFileEntryParserFactory interface. This is the * implementation that will be used by * org.apache.commons.net.ftp.FTPClient.listFiles() * if no other implementation has been specified. * * @see org.apache.commons.net.ftp.FTPClient#listFiles * @see org.apache.commons.net.ftp.FTPClient#setParserFactory */ public class DefaultFTPFileEntryParserFactory implements FTPFileEntryParserFactory { // Match a plain Java Identifier private static final String JAVA_IDENTIFIER = "\\p{javaJavaIdentifierStart}(\\p{javaJavaIdentifierPart})*"; // Match a qualified name, e.g. a.b.c.Name - but don't allow the default package as that would allow "VMS"/"UNIX" etc. private static final String JAVA_QUALIFIED_NAME = "("+JAVA_IDENTIFIER+"\\.)+"+JAVA_IDENTIFIER; // Create the pattern, as it will be reused many times private static final Pattern JAVA_QUALIFIED_NAME_PATTERN = Pattern.compile(JAVA_QUALIFIED_NAME); /** * This default implementation of the FTPFileEntryParserFactory * interface works according to the following logic: * First it attempts to interpret the supplied key as a fully * qualified classname (default package is not allowed) of a class implementing the * FTPFileEntryParser interface. If that succeeds, a parser * object of this class is instantiated and is returned; * otherwise it attempts to interpret the key as an identirier * commonly used by the FTP SYST command to identify systems. * <p/> * If <code>key is not recognized as a fully qualified * classname known to the system, this method will then attempt * to see whether it <b>contains a string identifying one of * the known parsers. This comparison is <b>case-insensitive. * The intent here is where possible, to select as keys strings * which are returned by the SYST command on the systems which * the corresponding parser successfully parses. This enables * this factory to be used in the auto-detection system. * <p/> * * @param key should be a fully qualified classname corresponding to * a class implementing the FTPFileEntryParser interface<br/> * OR<br/> * a string containing (case-insensitively) one of the * following keywords: * <ul> * <li>{@link FTPClientConfig#SYST_UNIX UNIX} * <li>{@link FTPClientConfig#SYST_NT WINDOWS} * <li>{@link FTPClientConfig#SYST_OS2 OS/2} * <li>{@link FTPClientConfig#SYST_OS400 OS/400} * <li>{@link FTPClientConfig#SYST_AS400 AS/400} * <li>{@link FTPClientConfig#SYST_VMS VMS} * <li>{@link FTPClientConfig#SYST_MVS MVS} * <li>{@link FTPClientConfig#SYST_NETWARE NETWARE} * <li>{@link FTPClientConfig#SYST_L8 TYPE:L8} * </ul> * @return the FTPFileEntryParser corresponding to the supplied key. * @throws ParserInitializationException thrown if for any reason the factory cannot resolve * the supplied key into an FTPFileEntryParser. * @see FTPFileEntryParser */ public FTPFileEntryParser createFileEntryParser(String key) { if (key == null) throw new ParserInitializationException("Parser key cannot be null"); return createFileEntryParser(key, null); } // Common method to process both key and config parameters. private FTPFileEntryParser createFileEntryParser(String key, FTPClientConfig config) { FTPFileEntryParser parser = null; // Is the key a possible class name? if (JAVA_QUALIFIED_NAME_PATTERN.matcher(key).matches()) { try { Class<?> parserClass = Class.forName(key); try { parser = (FTPFileEntryParser) parserClass.newInstance(); } catch (ClassCastException e) { throw new ParserInitializationException(parserClass.getName() + " does not implement the interface " + "org.apache.commons.net.ftp.FTPFileEntryParser.", e); } catch (Exception e) { throw new ParserInitializationException("Error initializing parser", e); } catch (ExceptionInInitializerError e) { throw new ParserInitializationException("Error initializing parser", e); } } catch (ClassNotFoundException e) { // OK, assume it is an alias } } if (parser == null) { // Now try for aliases String ukey = key.toUpperCase(java.util.Locale.ENGLISH); if (ukey.indexOf(FTPClientConfig.SYST_UNIX) >= 0) { parser = new UnixFTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_VMS) >= 0) { parser = new VMSVersioningFTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_NT) >= 0) { parser = createNTFTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_OS2) >= 0) { parser = new OS2FTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_OS400) >= 0 || ukey.indexOf(FTPClientConfig.SYST_AS400) >= 0) { parser = createOS400FTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_MVS) >= 0) { parser = new MVSFTPEntryParser(); // Does not currently support config parameter } else if (ukey.indexOf(FTPClientConfig.SYST_NETWARE) >= 0) { parser = new NetwareFTPEntryParser(config); } else if (ukey.indexOf(FTPClientConfig.SYST_L8) >= 0) { // 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; } /** * <p>Implementation extracts a key from the supplied * {@link FTPClientConfig FTPClientConfig} * parameter and creates an object implementing the * interface FTPFileEntryParser and uses the supplied configuration * to configure it. * </p> Other Commons Net examples (source code examples)Here is a short list of links related to this Commons Net DefaultFTPFileEntryParserFactory.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.