JAL-1740 implemented auto-update of BioJsMSA, introduced FTP client for downloading...
[jalview.git] / src / jalview / ftp / FtpClient.java
diff --git a/src/jalview/ftp/FtpClient.java b/src/jalview/ftp/FtpClient.java
new file mode 100644 (file)
index 0000000..8c9b3e1
--- /dev/null
@@ -0,0 +1,134 @@
+package jalview.ftp;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.SocketException;
+
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+
+public class FtpClient
+{
+
+  public static boolean authenticateUser(FTPClient ftpClient,
+          String username, String password)
+  {
+    boolean loggedIn = false;
+
+    try
+    {
+      loggedIn = ftpClient.login(username, password);
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    disconectFTP(ftpClient);
+
+    return loggedIn;
+  }
+
+  public static FTPClient getFtpClient(String serverHost)
+  {
+    FTPClient ftpClient = new FTPClient();
+    try
+    {
+      ftpClient.connect(serverHost);
+    } catch (SocketException e)
+    {
+      e.printStackTrace();
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    return ftpClient;
+  }
+
+  public static void disconectFTP(FTPClient ftpClient)
+  {
+    try
+    {
+      if (ftpClient.isConnected())
+      {
+        ftpClient.logout();
+        ftpClient.disconnect();
+      }
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+  }
+
+  public static void listDirectory(FTPClient ftpClient, String parentDir,
+          String currentDir, int level) throws IOException
+  {
+    String dirToList = parentDir;
+    if (!currentDir.equals(""))
+    {
+      dirToList += "/" + currentDir;
+    }
+    FTPFile[] subFiles = ftpClient.listFiles(dirToList);
+    if (subFiles != null && subFiles.length > 0)
+    {
+      for (FTPFile aFile : subFiles)
+      {
+        String currentFileName = aFile.getName();
+        if (currentFileName.equals(".") || currentFileName.equals(".."))
+        {
+          // skip parent directory and directory itself
+          continue;
+        }
+        for (int i = 0; i < level; i++)
+        {
+          System.out.print("\t");
+        }
+        if (aFile.isDirectory())
+        {
+          System.out.println("[" + currentFileName + "]");
+          listDirectory(ftpClient, dirToList, currentFileName, level + 1);
+        }
+        else
+        {
+          System.out.println(currentFileName);
+        }
+      }
+    }
+  }
+
+  public static boolean downloadFile(FTPClient client, String remoteFile,
+          String local)
+  {
+    boolean success = false;
+    File downloadFile = new File(local);
+    OutputStream outputStream = null;
+    try
+    {
+      outputStream = new BufferedOutputStream(new FileOutputStream(
+              downloadFile));
+
+      success = client.retrieveFile(remoteFile, outputStream);
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    } finally
+    {
+      try
+      {
+        if (outputStream != null)
+        {
+          outputStream.close();
+        }
+      } catch (IOException e)
+      {
+        e.printStackTrace();
+      }
+    }
+    if (success)
+    {
+      System.out.println(remoteFile + " has been downloaded successfully.");
+    }
+    return success;
+  }
+}