org.apache.commons.net.ftp
Class FTPClientConfig

java.lang.Object
  extended by org.apache.commons.net.ftp.FTPClientConfig

public class FTPClientConfig
extends Object

This class implements an alternate means of configuring the FTPClient object and also subordinate objects which it uses. Any class implementing the Configurable interface can be configured by this object.

In particular this class was designed primarily to support configuration of FTP servers which express file timestamps in formats and languages other than those for the US locale, which although it is the most common is not universal. Unfortunately, nothing in the FTP spec allows this to be determined in an automated way, so manual configuration such as this is necessary.

This functionality was designed to allow existing clients to work exactly as before without requiring use of this component. This component should only need to be explicitly invoked by the user of this package for problem cases that previous implementations could not solve.

Examples of use of FTPClientConfig

Use cases: You are trying to access a server that

Unpaged (whole list) access on a UNIX server that uses French month names but uses the "standard" MMM d yyyy date formatting

    FTPClient f=FTPClient();
    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
    conf.setServerLanguageCode("fr");
    f.configure(conf);
    f.connect(server);
    f.login(username, password);
    FTPFile[] files = listFiles(directory);
 

Paged access on a UNIX server that uses Danish month names and "European" date formatting in Denmark's time zone, when you are in some other time zone.

    FTPClient f=FTPClient();
    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
    conf.setServerLanguageCode("da");
    conf.setDefaultDateFormat("d MMM yyyy");
    conf.setRecentDateFormat("d MMM HH:mm");
    conf.setTimeZoneId("Europe/Copenhagen");
    f.configure(conf);
    f.connect(server);
    f.login(username, password);
    FTPListParseEngine engine =
       f.initiateListParsing("com.whatever.YourOwnParser", directory);

    while (engine.hasNext()) {
       FTPFile[] files = engine.getNext(25);  // "page size" you want
       //do whatever you want with these files, display them, etc.
       //expensive FTPFile objects not created until needed.
    }
 

Unpaged (whole list) access on a VMS server that uses month names in a language not supported by the system. but uses the "standard" MMM d yyyy date formatting

    FTPClient f=FTPClient();
    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_VMS);
    conf.setShortMonthNames(
        "jan|feb|mar|apr|maí|jún|júl|ágú|sep|okt|nóv|des");
    f.configure(conf);
    f.connect(server);
    f.login(username, password);
    FTPFile[] files = listFiles(directory);
 

Unpaged (whole list) access on a Windows-NT server in a different time zone. (Note, since the NT Format uses numeric date formatting, language issues are irrelevant here).

    FTPClient f=FTPClient();
    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
    conf.setTimeZoneId("America/Denver");
    f.configure(conf);
    f.connect(server);
    f.login(username, password);
    FTPFile[] files = listFiles(directory);
 

Unpaged (whole list) access on a Windows-NT server in a different time zone but which has been configured to use a unix-style listing format.
    FTPClient f=FTPClient();
    FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
    conf.setTimeZoneId("America/Denver");
    f.configure(conf);
    f.connect(server);
    f.login(username, password);
    FTPFile[] files = listFiles(directory);
 

Since:
1.4
See Also:
Configurable, FTPClient, FTPTimestampParserImpl.configure(FTPClientConfig), ConfigurableFTPFileEntryParserImpl

Field Summary
static String SYST_AS400
          Identifier by which an AS/400-based ftp server is known throughout the commons-net ftp system.
static String SYST_L8
          Some servers return an "UNKNOWN Type: L8" message in response to the SYST command.
static String SYST_MACOS_PETER
          Identifier by which a Mac pre OS-X -based ftp server is known throughout the commons-net ftp system.
static String SYST_MVS
          Identifier by which an MVS-based ftp server is known throughout the commons-net ftp system.
static String SYST_NETWARE
          Identifier by which an Netware-based ftp server is known throughout the commons-net ftp system.
static String SYST_NT
          Identifier by which a WindowsNT-based ftp server is known throughout the commons-net ftp system.
static String SYST_OS2
          Identifier by which an OS/2-based ftp server is known throughout the commons-net ftp system.
static String SYST_OS400
          Identifier by which an OS/400-based ftp server is known throughout the commons-net ftp system.
static String SYST_UNIX
          Identifier by which a unix-based ftp server is known throughout the commons-net ftp system.
static String SYST_VMS
          Identifier by which a vms-based ftp server is known throughout the commons-net ftp system.
 
Constructor Summary
FTPClientConfig()
          Convenience constructor mainly for use in testing.
FTPClientConfig(String systemKey)
          The main constructor for an FTPClientConfig object
FTPClientConfig(String systemKey, String defaultDateFormatStr, String recentDateFormatStr, String serverLanguageCode, String shortMonthNames, String serverTimeZoneId)
          Constructor which allows setting of all member fields
 
Method Summary
static DateFormatSymbols getDateFormatSymbols(String shortmonths)
          Returns a DateFormatSymbols object configured with short month names as in the supplied string
 String getDefaultDateFormatStr()
          getter for the defaultDateFormatStr property.
 String getRecentDateFormatStr()
          getter for the recentDateFormatStr property.
 String getServerLanguageCode()
           getter for the serverLanguageCode property.
 String getServerSystemKey()
          Getter for the serverSystemKey property.
 String getServerTimeZoneId()
          getter for the serverTimeZoneId property.
 String getShortMonthNames()
           getter for the shortMonthNames property.
static Collection<String> getSupportedLanguageCodes()
          Returns a Collection of all the language codes currently supported by this class.
 boolean isLenientFutureDates()
           getter for the lenientFutureDates property.
static DateFormatSymbols lookupDateFormatSymbols(String languageCode)
          Looks up the supplied language code in the internally maintained table of language codes.
 void setDefaultDateFormatStr(String defaultDateFormatStr)
           setter for the defaultDateFormatStr property.
 void setLenientFutureDates(boolean lenientFutureDates)
           setter for the lenientFutureDates property.
 void setRecentDateFormatStr(String recentDateFormatStr)
           setter for the recentDateFormatStr property.
 void setServerLanguageCode(String serverLanguageCode)
           setter for the serverLanguageCode property.
 void setServerTimeZoneId(String serverTimeZoneId)
           setter for the serverTimeZoneId property.
 void setShortMonthNames(String shortMonthNames)
           setter for the shortMonthNames property.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SYST_UNIX

public static final String SYST_UNIX
Identifier by which a unix-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_VMS

public static final String SYST_VMS
Identifier by which a vms-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_NT

public static final String SYST_NT
Identifier by which a WindowsNT-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_OS2

public static final String SYST_OS2
Identifier by which an OS/2-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_OS400

public static final String SYST_OS400
Identifier by which an OS/400-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_AS400

public static final String SYST_AS400
Identifier by which an AS/400-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_MVS

public static final String SYST_MVS
Identifier by which an MVS-based ftp server is known throughout the commons-net ftp system.

See Also:
Constant Field Values

SYST_L8

public static final String SYST_L8
Some servers return an "UNKNOWN Type: L8" message in response to the SYST command. We set these to be a Unix-type system. This may happen if the ftpd in question was compiled without system information. NET-230 - Updated to be UPPERCASE so that the check done in createFileEntryParser will succeed.

Since:
1.5
See Also:
Constant Field Values

SYST_NETWARE

public static final String SYST_NETWARE
Identifier by which an Netware-based ftp server is known throughout the commons-net ftp system.

Since:
1.5
See Also:
Constant Field Values

SYST_MACOS_PETER

public static final String SYST_MACOS_PETER
Identifier by which a Mac pre OS-X -based ftp server is known throughout the commons-net ftp system.

Since:
3.1
See Also:
Constant Field Values
Constructor Detail

FTPClientConfig

public FTPClientConfig(String systemKey)
The main constructor for an FTPClientConfig object

Parameters:
systemKey - key representing system type of the server being connected to. See serverSystemKey

FTPClientConfig

public FTPClientConfig()
Convenience constructor mainly for use in testing. Constructs a UNIX configuration.


FTPClientConfig

public FTPClientConfig(String systemKey,
                       String defaultDateFormatStr,
                       String recentDateFormatStr,
                       String serverLanguageCode,
                       String shortMonthNames,
                       String serverTimeZoneId)
Constructor which allows setting of all member fields

Parameters:
systemKey - key representing system type of the server being connected to. See serverSystemKey
defaultDateFormatStr - See defaultDateFormatStr
recentDateFormatStr - See recentDateFormatStr
serverLanguageCode - See serverLanguageCode
shortMonthNames - See shortMonthNames
serverTimeZoneId - See serverTimeZoneId
Method Detail

getServerSystemKey

public String getServerSystemKey()
Getter for the serverSystemKey property. This property specifies the general type of server to which the client connects. Should be either one of the FTPClientConfig.SYST_* codes or else the fully qualified class name of a parser implementing both the FTPFileEntryParser and Configurable interfaces.

Returns:
Returns the serverSystemKey property.

getDefaultDateFormatStr

public String getDefaultDateFormatStr()
getter for the defaultDateFormatStr property.

Returns:
Returns the defaultDateFormatStr property.

getRecentDateFormatStr

public String getRecentDateFormatStr()
getter for the recentDateFormatStr property.

Returns:
Returns the recentDateFormatStr property.

getServerTimeZoneId

public String getServerTimeZoneId()
getter for the serverTimeZoneId property.

Returns:
Returns the serverTimeZoneId property.

getShortMonthNames

public String getShortMonthNames()

getter for the shortMonthNames property.

Returns:
Returns the shortMonthNames.

getServerLanguageCode

public String getServerLanguageCode()

getter for the serverLanguageCode property.

Returns:
Returns the serverLanguageCode property.

isLenientFutureDates

public boolean isLenientFutureDates()

getter for the lenientFutureDates property.

Returns:
Returns the lenientFutureDates.
Since:
1.5

setDefaultDateFormatStr

public void setDefaultDateFormatStr(String defaultDateFormatStr)

setter for the defaultDateFormatStr property. This property specifies the main date format that will be used by a parser configured by this configuration to parse file timestamps. If this is not specified, such a parser will use as a default value, the most commonly used format which will be in as used in en_US locales.

This should be in the format described for java.text.SimpleDateFormat. property.

Parameters:
defaultDateFormatStr - The defaultDateFormatStr to set.

setRecentDateFormatStr

public void setRecentDateFormatStr(String recentDateFormatStr)

setter for the recentDateFormatStr property. This property specifies a secondary date format that will be used by a parser configured by this configuration to parse file timestamps, typically those less than a year old. If this is not specified, such a parser will not attempt to parse using an alternate format.

This is used primarily in unix-based systems.

This should be in the format described for java.text.SimpleDateFormat.

Parameters:
recentDateFormatStr - The recentDateFormatStr to set.

setLenientFutureDates

public void setLenientFutureDates(boolean lenientFutureDates)

setter for the lenientFutureDates property. This boolean property (default: false) only has meaning when a recentDateFormatStr property has been set. In that case, if this property is set true, then the parser, when it encounters a listing parseable with the recent date format, will only consider a date to belong to the previous year if it is more than one day in the future. This will allow all out-of-synch situations (whether based on "slop" - i.e. servers simply out of synch with one another or because of time zone differences - but in the latter case it is highly recommended to use the serverTimeZoneId property instead) to resolve correctly.

This is used primarily in unix-based systems.

Parameters:
lenientFutureDates - set true to compensate for out-of-synch conditions.

setServerTimeZoneId

public void setServerTimeZoneId(String serverTimeZoneId)

setter for the serverTimeZoneId property. This property allows a time zone to be specified corresponding to that known to be used by an FTP server in file listings. This might be particularly useful to clients such as Ant that try to use these timestamps for dependency checking.

This should be one of the identifiers used by java.util.TimeZone to refer to time zones, for example, America/Chicago or Asia/Rangoon.

Parameters:
serverTimeZoneId - The serverTimeZoneId to set.

setShortMonthNames

public void setShortMonthNames(String shortMonthNames)

setter for the shortMonthNames property. This property allows the user to specify a set of month names used by the server that is different from those that may be specified using the serverLanguageCode property.

This should be a string containing twelve strings each composed of three characters, delimited by pipe (|) characters. Currently, only 8-bit ASCII characters are known to be supported. For example, a set of month names used by a hypothetical Icelandic FTP server might conceivably be specified as "jan|feb|mar|apr|maí|jún|júl|ágú|sep|okt|nóv|des".

Parameters:
shortMonthNames - The value to set to the shortMonthNames property.

setServerLanguageCode

public void setServerLanguageCode(String serverLanguageCode)

setter for the serverLanguageCode property. This property allows user to specify a two-letter ISO-639 language code that will be used to configure the set of month names used by the file timestamp parser. If neither this nor the shortMonthNames is specified, parsing will assume English month names, which may or may not be significant, depending on whether the date format(s) specified via defaultDateFormatStr and/or recentDateFormatStr are using numeric or alphabetic month names.

If the code supplied is not supported here, en_US month names will be used. We are supporting here those language codes which, when a java.util.Locale is constucted using it, and a java.text.SimpleDateFormat is constructed using that Locale, the array returned by the SimpleDateFormat's getShortMonths() method consists solely of three 8-bit ASCII character strings. Additionally, languages which do not meet this requirement are included if a common alternative set of short month names is known to be used. This means that users who can tell us of additional such encodings may get them added to the list of supported languages by contacting the Apache Commons Net team.

Please note that this attribute will NOT be used to determine a locale-based date format for the language. Experience has shown that many if not most FTP servers outside the United States employ the standard en_US date format orderings of MMM d yyyy and MMM d HH:mm and attempting to deduce this automatically here would cause more problems than it would solve. The date format must be changed via the defaultDateFormatStr and/or recentDateFormatStr parameters.

Parameters:
serverLanguageCode - The value to set to the serverLanguageCode property.

lookupDateFormatSymbols

public static DateFormatSymbols lookupDateFormatSymbols(String languageCode)
Looks up the supplied language code in the internally maintained table of language codes. Returns a DateFormatSymbols object configured with short month names corresponding to the code. If there is no corresponding entry in the table, the object returned will be that for Locale.US

Parameters:
languageCode - See serverLanguageCode
Returns:
a DateFormatSymbols object configured with short month names corresponding to the supplied code, or with month names for Locale.US if there is no corresponding entry in the internal table.

getDateFormatSymbols

public static DateFormatSymbols getDateFormatSymbols(String shortmonths)
Returns a DateFormatSymbols object configured with short month names as in the supplied string

Parameters:
shortmonths - This should be as described in shortMonthNames
Returns:
a DateFormatSymbols object configured with short month names as in the supplied string

getSupportedLanguageCodes

public static Collection<String> getSupportedLanguageCodes()
Returns a Collection of all the language codes currently supported by this class. See serverLanguageCode for a functional descrption of language codes within this system.

Returns:
a Collection of all the language codes currently supported by this class


Copyright © 2001-2012 The Apache Software Foundation. All Rights Reserved.