Class FileTransferProtocolClient

  • All Implemented Interfaces:
    org.ikasan.connector.base.command.TransactionalResource, org.ikasan.connector.basefiletransfer.net.FileTransferClient, FileTransferProtocol

    public class FileTransferProtocolClient
    extends java.lang.Object
    implements FileTransferProtocol

    This class provides the basic functionality of an FTP client based on Apache's commons-net library. Some of the basic functionality is wrapped to provide FileTransferProtocolClient specific exceptions, or to provide the functionality required by a framework component.

    TODO This has a good deal of similar code to SFTP client, might be able to get some common code out of that
    Author:
    Ikasan Development Team
    • Constructor Summary

      Constructors 
      Constructor Description
      FileTransferProtocolClient​(boolean active, java.lang.String remoteHostname, java.lang.String localHost, java.lang.Integer maxRetryAttempts, java.lang.String password, java.lang.Integer remotePort, java.lang.String username, java.lang.String systemKey, java.lang.Integer connectionTimeout, java.lang.Integer soTimeout, java.lang.Integer dataTimeout)
      Constructor
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void cd​(java.lang.String targetPath)  
      void connect()
      Connect to the FTP server
      void deleteRemoteDirectory​(java.lang.String directoryPath, boolean recurse)  
      void deleteRemoteFile​(java.lang.String filename)  
      void disconnect()
      Disconnect
      void echoConfig()
      Method used to log the configuration information used to initialise the client.
      void ensureConnection()  
      org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(java.lang.String filePath)  
      void get​(java.lang.String filePath, java.io.OutputStream outputStream)
      OutputStream is closed by the caller
      void get​(java.lang.String filePath, java.io.OutputStream outputStream, int resume, long offset)  
      org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(org.ikasan.connector.basefiletransfer.net.ClientListEntry clientListEntry)  
      java.io.InputStream getAsInputStream​(java.lang.String filePath)  
      java.io.InputStream getContentAsStream​(org.ikasan.connector.basefiletransfer.net.ClientListEntry entry)  
      boolean isConnected()
      Method that tests if the underlying library is valid and connected.
      void login()
      login to the FTP server
      java.util.List<org.ikasan.connector.basefiletransfer.net.ClientListEntry> ls​(java.lang.String path)
      Method used to get a list of all files and directories in the target path including the "." and ".." directories.
      void mkdir​(java.lang.String newPath)
      Utility method for mkdir(String newDirPath, boolean force) that defaults the force parameter to true.
      void put​(java.lang.String name, byte[] content)  
      void putWithOutputStream​(java.lang.String fileName, java.io.InputStream inputStream)
      FTP Put using an output stream form an input stream.
      java.lang.String pwd()  
      void rename​(java.lang.String currentPath, java.lang.String newPath)  
      void validateConstructorArgs()
      All constructor arguments are essential, so use this method to validate them before attempting connection
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FileTransferProtocolClient

        public FileTransferProtocolClient​(boolean active,
                                          java.lang.String remoteHostname,
                                          java.lang.String localHost,
                                          java.lang.Integer maxRetryAttempts,
                                          java.lang.String password,
                                          java.lang.Integer remotePort,
                                          java.lang.String username,
                                          java.lang.String systemKey,
                                          java.lang.Integer connectionTimeout,
                                          java.lang.Integer soTimeout,
                                          java.lang.Integer dataTimeout)
        Constructor
        Parameters:
        active - Whether we are active or passive mode
        remoteHostname - The remote hostname
        localHost - the local host
        maxRetryAttempts - The maximum amount of retries
        password - The password to connect with
        remotePort - The remote port to connect to
        username - The username
        systemKey - The system key
        connectionTimeout - connection timeout
        soTimeout - Socket timeout in ms after getting a connection
        dataTimeout - Data connection timeout in ms after opening a socket
    • Method Detail

      • validateConstructorArgs

        public void validateConstructorArgs()
                                     throws org.ikasan.connector.basefiletransfer.net.ClientInitialisationException
        All constructor arguments are essential, so use this method to validate them before attempting connection
        Specified by:
        validateConstructorArgs in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientInitialisationException - if any of the required parameters are invalid
      • connect

        public void connect()
                     throws org.ikasan.connector.basefiletransfer.net.ClientConnectionException
        Connect to the FTP server
        Specified by:
        connect in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientConnectionException - Exception thrown when we can't connect
      • login

        public void login()
                   throws org.ikasan.connector.basefiletransfer.net.ClientConnectionException
        login to the FTP server
        Specified by:
        login in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientConnectionException - Exception thrown when we can't connect
      • isConnected

        public boolean isConnected()
        Method that tests if the underlying library is valid and connected.
        Specified by:
        isConnected in interface FileTransferProtocol
        Returns:
        true if fully connected, false otherwise
      • disconnect

        public void disconnect()
        Disconnect
        Specified by:
        disconnect in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
      • echoConfig

        public void echoConfig()
        Method used to log the configuration information used to initialise the client.
        Specified by:
        echoConfig in interface FileTransferProtocol
      • ensureConnection

        public void ensureConnection()
                              throws javax.resource.ResourceException
        Specified by:
        ensureConnection in interface org.ikasan.connector.base.command.TransactionalResource
        Throws:
        javax.resource.ResourceException
      • cd

        public void cd​(java.lang.String targetPath)
                throws org.ikasan.connector.basefiletransfer.net.ClientCommandCdException
        Specified by:
        cd in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandCdException
      • deleteRemoteDirectory

        public void deleteRemoteDirectory​(java.lang.String directoryPath,
                                          boolean recurse)
                                   throws org.ikasan.connector.basefiletransfer.net.ClientException,
                                          org.ikasan.connector.basefiletransfer.net.ClientCommandLsException
        Specified by:
        deleteRemoteDirectory in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientException
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException
      • deleteRemoteFile

        public void deleteRemoteFile​(java.lang.String filename)
                              throws org.ikasan.connector.basefiletransfer.net.ClientException
        Specified by:
        deleteRemoteFile in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientException
      • get

        public org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(org.ikasan.connector.basefiletransfer.net.ClientListEntry clientListEntry)
                                                                                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • get

        public org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(java.lang.String filePath)
                                                                                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • get

        public void get​(java.lang.String filePath,
                        java.io.OutputStream outputStream)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        OutputStream is closed by the caller
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        filePath - The path to the file that we're getting
        outputStream - The stream we're getting the file with
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException - Exception if we could not get the file
      • get

        public void get​(java.lang.String filePath,
                        java.io.OutputStream outputStream,
                        int resume,
                        long offset)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • getAsInputStream

        public java.io.InputStream getAsInputStream​(java.lang.String filePath)
                                             throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        getAsInputStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • getContentAsStream

        public java.io.InputStream getContentAsStream​(org.ikasan.connector.basefiletransfer.net.ClientListEntry entry)
                                               throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        getContentAsStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • ls

        public java.util.List<org.ikasan.connector.basefiletransfer.net.ClientListEntry> ls​(java.lang.String path)
                                                                                     throws org.ikasan.connector.basefiletransfer.net.ClientCommandLsException,
                                                                                            java.net.URISyntaxException
        Method used to get a list of all files and directories in the target path including the "." and ".." directories.
        Specified by:
        ls in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        path - The (directory) path to list.
        Returns:
        A ClientListEntry typed List
        Throws:
        java.net.URISyntaxException - If a malformed URI is created
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException - If the directory listing fails (i.e. path not a directory or path not found)
      • put

        public void put​(java.lang.String name,
                        byte[] content)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandPutException
        Specified by:
        put in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPutException
      • putWithOutputStream

        public void putWithOutputStream​(java.lang.String fileName,
                                        java.io.InputStream inputStream)
                                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandPutException,
                                        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException,
                                        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException
        FTP Put using an output stream form an input stream.
        Specified by:
        putWithOutputStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        fileName - Name of the file we're putting
        inputStream - Stream we're putting the file with
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPutException - Exception if we can't put
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException - Exception if we can't lista directory
        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException - Exception if we can't make a directory
      • pwd

        public java.lang.String pwd()
                             throws org.ikasan.connector.basefiletransfer.net.ClientCommandPwdException
        Specified by:
        pwd in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPwdException
      • rename

        public void rename​(java.lang.String currentPath,
                           java.lang.String newPath)
                    throws org.ikasan.connector.basefiletransfer.net.ClientCommandRenameException
        Specified by:
        rename in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandRenameException
      • mkdir

        public void mkdir​(java.lang.String newPath)
                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException
        Utility method for mkdir(String newDirPath, boolean force) that defaults the force parameter to true.
        Specified by:
        mkdir in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        newPath - The new path to create
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException - Exception if we can't make a directory