| /* |
| * 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.vfs2.provider.ftp; |
| |
| import java.net.Proxy; |
| |
| import org.apache.commons.net.ftp.parser.FTPFileEntryParserFactory; |
| import org.apache.commons.vfs2.FileSystem; |
| import org.apache.commons.vfs2.FileSystemConfigBuilder; |
| import org.apache.commons.vfs2.FileSystemOptions; |
| |
| /** |
| * The config builder for various ftp configuration options. |
| */ |
| public class FtpFileSystemConfigBuilder extends FileSystemConfigBuilder |
| { |
| private static final String _PREFIX = FtpFileSystemConfigBuilder.class.getName(); |
| |
| private static final FtpFileSystemConfigBuilder BUILDER = new FtpFileSystemConfigBuilder(); |
| |
| private static final String CONNECT_TIMEOUT = _PREFIX + ".CONNECT_TIMEOUT"; |
| private static final String DATA_TIMEOUT = _PREFIX + ".DATA_TIMEOUT"; |
| private static final String DEFAULT_DATE_FORMAT = _PREFIX + ".DEFAULT_DATE_FORMAT"; |
| private static final String ENCODING = _PREFIX + ".ENCODING"; |
| private static final String FACTORY_KEY = FTPFileEntryParserFactory.class.getName() + ".KEY"; |
| private static final String FILE_TYPE = _PREFIX + ".FILE_TYPE"; |
| private static final String PASSIVE_MODE = _PREFIX + ".PASSIVE"; |
| private static final String PROXY = _PREFIX + ".PROXY"; |
| private static final String RECENT_DATE_FORMAT = _PREFIX + ".RECENT_DATE_FORMAT"; |
| private static final String REMOTE_VERIFICATION = _PREFIX + ".REMOTE_VERIFICATION"; |
| private static final String SERVER_LANGUAGE_CODE = _PREFIX + ".SERVER_LANGUAGE_CODE"; |
| private static final String SERVER_TIME_ZONE_ID = _PREFIX + ".SERVER_TIME_ZONE_ID"; |
| private static final String SHORT_MONTH_NAMES = _PREFIX + ".SHORT_MONTH_NAMES"; |
| private static final String SO_TIMEOUT = _PREFIX + ".SO_TIMEOUT"; |
| private static final String USER_DIR_IS_ROOT = _PREFIX + ".USER_DIR_IS_ROOT"; |
| |
| private FtpFileSystemConfigBuilder() |
| { |
| super("ftp."); |
| } |
| |
| /** |
| * Create new config builder with specified prefix string. |
| * @param prefix prefix string to use for parameters of this config builder. |
| * @since 2.1 |
| */ |
| protected FtpFileSystemConfigBuilder(final String prefix) |
| { |
| super(prefix); |
| } |
| |
| /** |
| * Gets the singleton instance. |
| * |
| * @return the singleton instance. |
| */ |
| public static FtpFileSystemConfigBuilder getInstance() |
| { |
| return BUILDER; |
| } |
| |
| @Override |
| protected Class<? extends FileSystem> getConfigClass() |
| { |
| return FtpFileSystem.class; |
| } |
| |
| /** |
| * Gets the timeout in milliseconds to use for the socket connection. |
| * |
| * @param opts The FileSystemOptions. |
| * @return The timeout in milliseconds to use for the socket connection. |
| * @since 2.1 |
| */ |
| public Integer getConnectTimeout(final FileSystemOptions opts) |
| { |
| return getInteger(opts, CONNECT_TIMEOUT); |
| } |
| |
| /** |
| * @param opts The FileSystemOptions. |
| * @return The encoding. |
| * @since 2.0 |
| * */ |
| public String getControlEncoding(final FileSystemOptions opts) |
| { |
| return getString(opts, ENCODING); |
| } |
| |
| /** |
| * @param opts The FileSystemOptions. |
| * @return The timeout for opening the data channel in milliseconds. |
| * @see #setDataTimeout |
| */ |
| public Integer getDataTimeout(final FileSystemOptions opts) |
| { |
| return getInteger(opts, DATA_TIMEOUT); |
| } |
| |
| /** |
| * Get the default date format used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig} |
| * for details and examples. |
| * |
| * @param opts The FileSystemOptions |
| * @return The default date format. |
| */ |
| public String getDefaultDateFormat(final FileSystemOptions opts) |
| { |
| return getString(opts, DEFAULT_DATE_FORMAT); |
| } |
| |
| /** |
| * @param opts The FileSystemOptions. |
| * @see #setEntryParser |
| * @return the key to the EntryParser. |
| */ |
| public String getEntryParser(final FileSystemOptions opts) |
| { |
| return getString(opts, FACTORY_KEY); |
| } |
| |
| /** |
| * @param opts The FlleSystemOptions. |
| * @see #setEntryParserFactory |
| * @return An FTPFileEntryParserFactory. |
| */ |
| public FTPFileEntryParserFactory getEntryParserFactory(final FileSystemOptions opts) |
| { |
| return (FTPFileEntryParserFactory) getParam(opts, FTPFileEntryParserFactory.class.getName()); |
| } |
| |
| /** |
| * Gets the file type parameter. |
| * |
| * @param opts The FileSystemOptions. |
| * @return A FtpFileType |
| * @since 2.1 |
| */ |
| public FtpFileType getFileType(final FileSystemOptions opts) |
| { |
| return getEnum(FtpFileType.class, opts, FILE_TYPE); |
| } |
| |
| /** |
| * @param opts The FileSystemOptions. |
| * @return true if passive mode is set. |
| * @see #setPassiveMode |
| */ |
| public Boolean getPassiveMode(final FileSystemOptions opts) |
| { |
| return getBoolean(opts, PASSIVE_MODE); |
| } |
| |
| /** |
| * Gets the Proxy. |
| * |
| * @param opts The FileSystemOptions. |
| * @return the Proxy |
| * @since 2.1 |
| */ |
| public Proxy getProxy(final FileSystemOptions opts) |
| { |
| return (Proxy) this.getParam(opts, PROXY); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @return The recent date format. |
| */ |
| public String getRecentDateFormat(final FileSystemOptions opts) |
| { |
| return getString(opts, RECENT_DATE_FORMAT); |
| } |
| |
| /** |
| * Gets whether to use remote verification. |
| * |
| * @param opts The FileSystemOptions. |
| * @return True if remote verification should be done. |
| */ |
| public Boolean getRemoteVerification(FileSystemOptions opts) |
| { |
| return getBoolean(opts, REMOTE_VERIFICATION); |
| } |
| |
| /** |
| * Get the language code used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig} |
| * for details and examples. |
| * |
| * @param opts The FilesystemOptions. |
| * @return The language code of the server. |
| */ |
| public String getServerLanguageCode(final FileSystemOptions opts) |
| { |
| return getString(opts, SERVER_LANGUAGE_CODE); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @return The server timezone id. |
| */ |
| public String getServerTimeZoneId(final FileSystemOptions opts) |
| { |
| return getString(opts, SERVER_TIME_ZONE_ID); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @return An array of short month names. |
| */ |
| public String[] getShortMonthNames(final FileSystemOptions opts) |
| { |
| return (String[]) getParam(opts, SHORT_MONTH_NAMES); |
| } |
| |
| /** |
| * @param opts The FileSystem options. |
| * @return The timeout value in milliseconds. |
| * @see #getDataTimeout |
| * @since 2.0 |
| */ |
| public Integer getSoTimeout(final FileSystemOptions opts) |
| { |
| return getInteger(opts, SO_TIMEOUT); |
| } |
| |
| /** |
| * Returns {@link Boolean#TRUE} if VFS should treat the user directory as the root directory. Defaults to |
| * <code>Boolean.TRUE</code> if the method {@link #setUserDirIsRoot(FileSystemOptions, boolean)} has not been |
| * invoked. |
| * |
| * @param opts |
| * The FileSystemOptions. |
| * @return <code>Boolean.TRUE</code> if VFS treats the user directory as the root directory. |
| * @see #setUserDirIsRoot |
| */ |
| public Boolean getUserDirIsRoot(final FileSystemOptions opts) |
| { |
| return getBoolean(opts, USER_DIR_IS_ROOT, Boolean.TRUE); |
| } |
| |
| /** |
| * Sets the timeout for the initial control connection. |
| * <p> |
| * If you set the connectTimeout to {@code null} no connectTimeout will be set. |
| * |
| * @param opts The FileSystemOptions. |
| * @param connectTimeout the timeout value in milliseconds |
| * @since 2.1 |
| */ |
| public void setConnectTimeout(final FileSystemOptions opts, final Integer connectTimeout) |
| { |
| setParam(opts, CONNECT_TIMEOUT, connectTimeout); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTP#setControlEncoding} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param encoding the encoding to use |
| * @since 2.0 |
| */ |
| public void setControlEncoding(final FileSystemOptions opts, final String encoding) |
| { |
| setParam(opts, ENCODING, encoding); |
| } |
| |
| /** |
| * Set the data timeout for the ftp client. |
| * <p> |
| * If you set the {@code dataTimeout} to {@code null}, no dataTimeout will be set on the |
| * ftp client. |
| * |
| * @param opts The FileSystemOptions. |
| * @param dataTimeout The timeout value. |
| */ |
| public void setDataTimeout(final FileSystemOptions opts, final Integer dataTimeout) |
| { |
| setParam(opts, DATA_TIMEOUT, dataTimeout); |
| } |
| |
| /** |
| * Set the default date format used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig} |
| * for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param defaultDateFormat The default date format. |
| */ |
| public void setDefaultDateFormat(final FileSystemOptions opts, final String defaultDateFormat) |
| { |
| setParam(opts, DEFAULT_DATE_FORMAT, defaultDateFormat); |
| } |
| |
| /** |
| * Set the FQCN of your FileEntryParser used to parse the directory listing from your server. |
| * <p> |
| * If you do not use the default commons-net FTPFileEntryParserFactory e.g. by using |
| * {@link #setEntryParserFactory} this is the "key" parameter passed as argument into your |
| * custom factory. |
| * |
| * @param opts The FileSystemOptions. |
| * @param key The key. |
| */ |
| public void setEntryParser(final FileSystemOptions opts, final String key) |
| { |
| setParam(opts, FACTORY_KEY, key); |
| } |
| |
| /** |
| * FTPFileEntryParserFactory which will be used for ftp-entry parsing. |
| * |
| * @param opts The FileSystemOptions. |
| * @param factory instance of your factory |
| */ |
| public void setEntryParserFactory(final FileSystemOptions opts, final FTPFileEntryParserFactory factory) |
| { |
| setParam(opts, FTPFileEntryParserFactory.class.getName(), factory); |
| } |
| |
| /** |
| * Sets the file type parameter. |
| * |
| * @param opts The FileSystemOptions. |
| * @param ftpFileType A FtpFileType |
| * @since 2.1 |
| */ |
| public void setFileType(final FileSystemOptions opts, final FtpFileType ftpFileType) |
| { |
| setParam(opts, FILE_TYPE, ftpFileType); |
| } |
| |
| /** |
| * Enter into passive mode. |
| * |
| * @param opts The FileSystemOptions. |
| * @param passiveMode true if passive mode should be used. |
| */ |
| public void setPassiveMode(final FileSystemOptions opts, final boolean passiveMode) |
| { |
| setParam(opts, PASSIVE_MODE, passiveMode ? Boolean.TRUE : Boolean.FALSE); |
| } |
| |
| /** |
| * Sets the Proxy. |
| * <p> |
| * You might need to make sure that {@link #setPassiveMode(FileSystemOptions, boolean) passive mode} |
| * is activated. |
| * |
| * @param opts the FileSystem options. |
| * @param proxy the Proxy |
| * @since 2.1 |
| */ |
| public void setProxy(final FileSystemOptions opts, Proxy proxy) |
| { |
| setParam(opts, PROXY, proxy); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param recentDateFormat The recent date format. |
| */ |
| public void setRecentDateFormat(final FileSystemOptions opts, final String recentDateFormat) |
| { |
| setParam(opts, RECENT_DATE_FORMAT, recentDateFormat); |
| } |
| |
| /** |
| * Sets whether to use remote verification. |
| * |
| * @param opts The FileSystemOptions. |
| * @param remoteVerification True if verification should be done. |
| */ |
| public void setRemoteVerification(FileSystemOptions opts, boolean remoteVerification) |
| { |
| setParam(opts, REMOTE_VERIFICATION, remoteVerification); |
| } |
| |
| /** |
| * Set the language code used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig} |
| * for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param serverLanguageCode The servers language code. |
| */ |
| public void setServerLanguageCode(final FileSystemOptions opts, final String serverLanguageCode) |
| { |
| setParam(opts, SERVER_LANGUAGE_CODE, serverLanguageCode); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param serverTimeZoneId The server timezone id. |
| */ |
| public void setServerTimeZoneId(final FileSystemOptions opts, final String serverTimeZoneId) |
| { |
| setParam(opts, SERVER_TIME_ZONE_ID, serverTimeZoneId); |
| } |
| |
| /** |
| * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples. |
| * |
| * @param opts The FileSystemOptions. |
| * @param shortMonthNames an array of short month name Strings. |
| */ |
| public void setShortMonthNames(final FileSystemOptions opts, final String[] shortMonthNames) |
| { |
| String[] clone = null; |
| if (shortMonthNames != null) |
| { |
| clone = new String[shortMonthNames.length]; |
| System.arraycopy(shortMonthNames, 0, clone, 0, shortMonthNames.length); |
| } |
| |
| setParam(opts, SHORT_MONTH_NAMES, clone); |
| } |
| |
| /** |
| * Sets the socket timeout for the FTP client. |
| * <p> |
| * If you set the {@code soTimeout} to {@code null}, no socket timeout will be set on the |
| * ftp client. |
| * |
| * @param opts The FileSystem options. |
| * @param soTimeout The timeout value in milliseconds. |
| * @since 2.0 |
| */ |
| public void setSoTimeout(final FileSystemOptions opts, final Integer soTimeout) |
| { |
| setParam(opts, SO_TIMEOUT, soTimeout); |
| } |
| |
| /** |
| * Use user directory as root (do not change to fs root). |
| * |
| * @param opts The FileSystemOptions. |
| * @param userDirIsRoot true if the user directory should be treated as the root. |
| */ |
| public void setUserDirIsRoot(final FileSystemOptions opts, final boolean userDirIsRoot) |
| { |
| setParam(opts, USER_DIR_IS_ROOT, userDirIsRoot ? Boolean.TRUE : Boolean.FALSE); |
| } |
| |
| } |