package htsjdk.tribble.util; import htsjdk.samtools.util.ftp.FTPClient; import htsjdk.samtools.util.ftp.FTPStream; import htsjdk.samtools.util.ftp.FTPUtils; import java.io.IOException; import java.io.InputStream; import java.net.URL; /** * @author jacob * @date 2013-Apr-11 */ public class FTPHelper implements URLHelper { private URL url; public FTPHelper(URL url){ if(!url.getProtocol().toLowerCase().equals("ftp")){ throw new IllegalArgumentException("FTPHelper can only be used with ftp protocol, not " + url.getProtocol()); } this.url = url; } @Override public URL getUrl() { return this.url; } @Override public long getContentLength() throws IOException { return FTPUtils.getContentLength(this.url); } @Override public InputStream openInputStream() throws IOException { String file = url.getPath(); FTPClient ftp = FTPUtils.connect(url.getHost(), url.getUserInfo(), null); ftp.pasv(); ftp.retr(file); return new FTPStream(ftp); } @Override public InputStream openInputStreamForRange(long start, long end) throws IOException { throw new UnsupportedOperationException("Cannot perform range operations over FTP"); } @Override public boolean exists() throws IOException { return FTPUtils.resourceAvailable(this.url); } }