diff options
| author | unknown | 2014-02-25 11:04:51 +0100 |
|---|---|---|
| committer | unknown | 2014-02-25 11:04:51 +0100 |
| commit | 2a3ec0fbda66ed07adcdc968a9365096ecd54f40 (patch) | |
| tree | 187af202e5a404a15c31f0915e73cb23bf5b7900 /Dozentenmodul/src/ftp | |
| parent | Problem der herumspringenden Fenster entfernt (diff) | |
| download | tutor-module-2a3ec0fbda66ed07adcdc968a9365096ecd54f40.tar.gz tutor-module-2a3ec0fbda66ed07adcdc968a9365096ecd54f40.tar.xz tutor-module-2a3ec0fbda66ed07adcdc968a9365096ecd54f40.zip | |
Kommunikation von BwLehrpool Suite zu BwLehrpool Suite Server läuft nun über Thrift
Diffstat (limited to 'Dozentenmodul/src/ftp')
| -rw-r--r-- | Dozentenmodul/src/ftp/DownloadTask.java | 112 | ||||
| -rw-r--r-- | Dozentenmodul/src/ftp/FTPException.java | 8 | ||||
| -rw-r--r-- | Dozentenmodul/src/ftp/FTPUtility.java | 230 | ||||
| -rw-r--r-- | Dozentenmodul/src/ftp/UploadTask.java | 93 |
4 files changed, 443 insertions, 0 deletions
diff --git a/Dozentenmodul/src/ftp/DownloadTask.java b/Dozentenmodul/src/ftp/DownloadTask.java new file mode 100644 index 00000000..8a643325 --- /dev/null +++ b/Dozentenmodul/src/ftp/DownloadTask.java @@ -0,0 +1,112 @@ +package ftp; + +import gui.FTPDownloader_GUI; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; + +import javax.swing.JOptionPane; +import javax.swing.SwingWorker; + +/** + * Execute file download in a background thread and update the progress. + * @author www.codejava.net + * + */ +public class DownloadTask extends SwingWorker<Void, Void> { + + private static final int BUFFER_SIZE = 4096; + + private String host; + private int port; + private String username; + private String password; + + private String downloadPath; + private String saveDir; + + @SuppressWarnings("unused") + private FTPDownloader_GUI gui; + + public DownloadTask(String host, int port, String username, + String password, String downloadPath, String saveDir, + FTPDownloader_GUI gui) { + this.host = host; + this.port = port; + this.username = username; + this.password = password; + this.downloadPath = downloadPath; + this.saveDir = saveDir; + this.gui = gui; + + } + + /** + * Executed in background thread + */ + @Override + protected Void doInBackground() throws Exception { + FTPUtility util = new FTPUtility(host, port, username, password); + try { + util.connect(); + + byte[] buffer = new byte[BUFFER_SIZE]; + int bytesRead = -1; + long totalBytesRead = 0; + int percentCompleted = 0; + long start=System.nanoTime(); + final double NANOS_PER_SECOND = 1000000000.0; + final double BYTES_PER_MIB = 1024*1024; + long fileSize = util.getFileSize(downloadPath); + //gui.setFileSize(fileSize); + + String fileName = new File(downloadPath).getName(); + + File downloadFile = new File(saveDir + File.separator + fileName); + FileOutputStream outputStream = new FileOutputStream(downloadFile); + + util.downloadFile(downloadPath); + InputStream inputStream = util.getInputStream(); + + while ((bytesRead = inputStream.read(buffer)) != -1 && isCancelled()==false) { + outputStream.write(buffer, 0, bytesRead); + totalBytesRead += bytesRead; + //System.out.println(totalBytesRead); + double speed = NANOS_PER_SECOND / BYTES_PER_MIB * totalBytesRead / (System.nanoTime() - start + 1); + percentCompleted = (int) (totalBytesRead * 100 / fileSize); + setProgress(percentCompleted); + firePropertyChange("speed", 0, speed); + firePropertyChange("filesize", 0,fileSize); + firePropertyChange("bytesread", 0,totalBytesRead); + + } + + outputStream.close(); + + util.finish(); + } catch (FTPException ex) { + JOptionPane.showMessageDialog(null, "Error downloading file: " + ex.getMessage(), + "Error", JOptionPane.ERROR_MESSAGE); + ex.printStackTrace(); + setProgress(0); + cancel(true); + } finally { + util.disconnect(); + } + + return null; + } + + /** + * Executed in Swing's event dispatching thread + */ + @Override + protected void done() { + if (!isCancelled()) { + JOptionPane.showMessageDialog(null, + "File has been downloaded successfully!", "Message", + JOptionPane.INFORMATION_MESSAGE); + } + } +}
\ No newline at end of file diff --git a/Dozentenmodul/src/ftp/FTPException.java b/Dozentenmodul/src/ftp/FTPException.java new file mode 100644 index 00000000..bc3193e0 --- /dev/null +++ b/Dozentenmodul/src/ftp/FTPException.java @@ -0,0 +1,8 @@ +package ftp; + +@SuppressWarnings("serial") +public class FTPException extends Exception { + public FTPException(String message) { + super(message); + } +}
\ No newline at end of file diff --git a/Dozentenmodul/src/ftp/FTPUtility.java b/Dozentenmodul/src/ftp/FTPUtility.java new file mode 100644 index 00000000..c62ba07d --- /dev/null +++ b/Dozentenmodul/src/ftp/FTPUtility.java @@ -0,0 +1,230 @@ +package ftp; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.SocketException; +import java.security.NoSuchAlgorithmException; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPFile; +import org.apache.commons.net.ftp.FTPReply; +import org.apache.commons.net.ftp.FTPSClient; + + +/** + * A utility class that provides functionality for downloading files from a FTP + * server. + * + * @author www.codejava.net + * + */ +public class FTPUtility { + + // FTP server information + private String host; + private int port; + private String username; + private String password; + + private FTPSClient ftpClient = new FTPSClient(); + private int replyCode; + + private InputStream inputStream; + private OutputStream outputStream; + + public FTPUtility(String host, int port, String user, String pass) { + this.host = host; + this.port = port; + this.username = user; + this.password = pass; + } + + /** + * Connect and login to the server. + * + * @throws FTPException + * @throws NoSuchAlgorithmException + */ + public void connect() throws FTPException, NoSuchAlgorithmException { + try { + ftpClient.connect(host, port); + replyCode = ftpClient.getReplyCode(); + if (!FTPReply.isPositiveCompletion(replyCode)) { + throw new FTPException("FTP serve refused connection."); + } + + + boolean logged = ftpClient.login(username, password); + if (!logged) { + // failed to login + ftpClient.execPROT("P"); + ftpClient.disconnect(); + throw new FTPException("Could not login to the server."); + } + + ftpClient.enterLocalPassiveMode(); + + } catch (IOException ex) { + throw new FTPException("I/O error: " + ex.getMessage()); + } + } + + /** + * Gets size (in bytes) of the file on the server. + * + * @param filePath + * Path of the file on server + * @return file size in bytes + * @throws FTPException + */ + public long getFileSize(String filePath) throws FTPException { + try { + FTPFile file = ftpClient.mlistFile(filePath); + if (file == null) { + throw new FTPException("The file may not exist on the server!"); + } + return file.getSize(); + } catch (IOException ex) { + throw new FTPException("Could not determine size of the file: " + + ex.getMessage()); + } + } + + /** + * Start downloading a file from the server + * + * @param downloadPath + * Full path of the file on the server + * @throws FTPException + * if client-server communication error occurred + */ + public void downloadFile(String downloadPath) throws FTPException { + try { + + boolean success = ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + if (!success) { + throw new FTPException("Could not set binary file type."); + } + + inputStream = ftpClient.retrieveFileStream(downloadPath); + + if (inputStream == null) { + throw new FTPException( + "Could not open input stream. The file may not exist on the server."); + } + } catch (IOException ex) { + throw new FTPException("Error downloading file: " + ex.getMessage()); + } + } + + + /** + * Start uploading a file to the server + * @param uploadFile the file to be uploaded + * @param destDir destination directory on the server + * where the file is stored + * @throws FTPException if client-server communication error occurred + */ + public void uploadFile(File uploadFile, String destDir) throws FTPException { + try { + boolean success = ftpClient.changeWorkingDirectory(destDir); + if (!success) { + throw new FTPException("Could not change working directory to " + + destDir + ". The directory may not exist."); + } + + success = ftpClient.setFileType(FTP.BINARY_FILE_TYPE); + if (!success) { + throw new FTPException("Could not set binary file type."); + } + + outputStream = ftpClient.storeFileStream(uploadFile.getName()); + // ftpClient.rename(uploadFile.getName(), vm.vl.getLaborname()); + } catch (IOException ex) { + throw new FTPException("Error uploading file: " + ex.getMessage()); + } + } + + /** + * Write an array of bytes to the output stream. + */ + public void writeFileBytes(byte[] bytes, int offset, int length) + throws IOException { + outputStream.write(bytes, offset, length); + } + + /** + * Complete the download operation. + */ + public void finish() throws IOException { + inputStream.close(); + ftpClient.completePendingCommand(); + } + + /** + * Log out and disconnect from the server + */ + public void disconnect() throws FTPException { + if (ftpClient.isConnected()) { + try { + if (!ftpClient.logout()) { + throw new FTPException("Could not log out from the server"); + } + ftpClient.disconnect(); + } catch (IOException ex) { + throw new FTPException("Error disconnect from the server: " + + ex.getMessage()); + } + } + } + + /** + * Return InputStream of the remote file on the server. + */ + public InputStream getInputStream() { + return inputStream; + } + + public OutputStream getOutputStream() { + return outputStream; + } + + public String[] getAllRohling(String SearchString) throws SocketException + { + //FTPClient ftp=new FTPClient(); + + String[] filenamelist; + + + try { + + + ftpClient.changeWorkingDirectory("/home/openslx/images"); + filenamelist=ftpClient.listNames(); + + String[] search=new String[filenamelist.length]; + for(int i=0;i<filenamelist.length;i++) + { + /*if(filenamelist[i].startsWith(SearchString)==true) + { + search[i]=filenamelist[i]; + }*/ + + if(filenamelist[i].contains(SearchString)==true) + { + search[i]=filenamelist[i]; + } + } + return search; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + return null; + } + +}
\ No newline at end of file diff --git a/Dozentenmodul/src/ftp/UploadTask.java b/Dozentenmodul/src/ftp/UploadTask.java new file mode 100644 index 00000000..e5d8a817 --- /dev/null +++ b/Dozentenmodul/src/ftp/UploadTask.java @@ -0,0 +1,93 @@ +package ftp; + +import java.io.File; +import java.io.FileInputStream; + +import javax.swing.JOptionPane; +import javax.swing.SwingWorker; + +/** + * Executes the file upload in a background thread and updates progress to + * listeners that implement the java.beans.PropertyChangeListener interface. + * @author www.codejava.net + * + */ +public class UploadTask extends SwingWorker<Void, Void> { + private static final int BUFFER_SIZE = 4096; + + private String host; + private int port; + private String username; + private String password; + + private String destDir; + private File uploadFile; + + public UploadTask(String host, int port, String username, String password, + String destDir, File uploadFile) { + this.host = host; + this.port = port; + this.username = username; + this.password = password; + this.destDir = destDir; + this.uploadFile = uploadFile; + } + + /** + * Executed in background thread + */ + @Override + protected Void doInBackground() throws Exception { + FTPUtility util = new FTPUtility(host, port, username, password); + try { + util.connect(); + util.uploadFile(uploadFile, destDir); + + FileInputStream inputStream = new FileInputStream(uploadFile); + byte[] buffer = new byte[BUFFER_SIZE]; + int bytesRead = -1; + long totalBytesRead = 0; + int percentCompleted = 0; + long fileSize = uploadFile.length(); + long start=System.nanoTime(); + final double NANOS_PER_SECOND = 1000000000.0; + final double BYTES_PER_MIB = 1024*1024; + while ((bytesRead = inputStream.read(buffer)) != -1 && isCancelled()==false) { + util.writeFileBytes(buffer, 0, bytesRead); + totalBytesRead += bytesRead; + percentCompleted = (int) (totalBytesRead * 100 / fileSize); + double speed = NANOS_PER_SECOND / BYTES_PER_MIB * totalBytesRead / (System.nanoTime() - start + 1); + setProgress(percentCompleted); + firePropertyChange("speed", 0, speed); + firePropertyChange("filesize", 0,fileSize); + firePropertyChange("bytesread", 0,totalBytesRead); + } + + inputStream.close(); + + util.finish(); + } catch (FTPException ex) { + JOptionPane.showMessageDialog(null, "Error uploading file: " + ex.getMessage(), + "Error", JOptionPane.ERROR_MESSAGE); + ex.printStackTrace(); + setProgress(0); + cancel(true); + } finally { + util.disconnect(); + } + + return null; + } + + /** + * Executed in Swing's event dispatching thread + */ + @Override + protected void done() { + if (!isCancelled()) { + JOptionPane.showMessageDialog(null, + "File has been uploaded successfully!", "Message", + JOptionPane.INFORMATION_MESSAGE); + } + } +}
\ No newline at end of file |
