You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Rory Winston (JIRA)" <ji...@apache.org> on 2008/02/19 23:32:43 UTC

[jira] Closed: (NET-166) [FTP] FTPClient should be an Interface

     [ https://issues.apache.org/jira/browse/NET-166?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rory Winston closed NET-166.
----------------------------

    Resolution: Later

> [FTP] FTPClient should be an Interface
> --------------------------------------
>
>                 Key: NET-166
>                 URL: https://issues.apache.org/jira/browse/NET-166
>             Project: Commons Net
>          Issue Type: Improvement
>    Affects Versions: 2.0
>            Reporter: Stefan Tauner
>
> imho the FTPClient inheritance hierarchy should be changed as follows:
> FTPClient should be renamed to something else (e.g. FTPClientImpl).
> a new Interface named FTPClient should be introduced which should be implemented by both, the old FTPClient and FTPSClient.
> shared code should be extracted and inherited.
> why?
> because atm its not possible (pls correct me if im wrong!) to extend the ftp classes in such a way, that the resulting classes could have a common superclass other than FTPClient.
> e.g. i want to implement caching of dirlistings
> the easiest way would be to define an interface CachingClient which extends the new FTPClient interface with a method like
> public FTPFile[] list(String dir, long timeDeltaMS) throws IOException;
> one could then create two new classes CachingFTPClient and CachingFTPSClient, which would implement the CachingClient interface and extend either FTPClientImpl or FTPSClient.
> that way you could have two caching client classes with a common parent class/interface other than the current FTPClient, which is highly restrictive when extending the current FTPClient classes: i cant use any other method than those specified in FTPClient, if i want to share the source from both client implementations.
> another option to implement a feature like caching would be a proxy, but one would have to forward all current FTPClient methods inside the proxy object, which isnt very neat.
> third option would be to use FTP directly, but thats a lot of unnecessary work too.
> i hope someone can understand what i wrote :)
> cons: this would break client code, that tries to instantiate FTPClient.
> thats a reason to change it before the release of commons net 2.0. btw
> id be glad to help with this, if you contact/instruct me :)
> edit: what i havent thought about, is, that current FTPClient extends class FTP, which extends abstract class SocketClient
> crap. :(
> ill leave this issue open, because id like to hear some comments anyway

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.