summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/ftp/UploadTask.java
diff options
context:
space:
mode:
authorJonathan Bauer2014-09-11 15:04:50 +0200
committerJonathan Bauer2014-09-11 15:04:50 +0200
commite90286005f1cbedc77bfff91f867cb6aec25a595 (patch)
tree361faf449e987518ffe33757d64af69539f0ef5c /dozentenmodul/src/main/java/ftp/UploadTask.java
parentlower case names for folder please (diff)
downloadtutor-module-e90286005f1cbedc77bfff91f867cb6aec25a595.tar.gz
tutor-module-e90286005f1cbedc77bfff91f867cb6aec25a595.tar.xz
tutor-module-e90286005f1cbedc77bfff91f867cb6aec25a595.zip
oops
Diffstat (limited to 'dozentenmodul/src/main/java/ftp/UploadTask.java')
-rw-r--r--dozentenmodul/src/main/java/ftp/UploadTask.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/ftp/UploadTask.java b/dozentenmodul/src/main/java/ftp/UploadTask.java
new file mode 100644
index 00000000..e7ebe43b
--- /dev/null
+++ b/dozentenmodul/src/main/java/ftp/UploadTask.java
@@ -0,0 +1,108 @@
+package ftp;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingWorker;
+
+import models.Image;
+
+/**
+ * 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;
+ private int percentCompleted;
+
+ 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;
+ int i = 0;
+ long totalBytesRead = 0;
+ percentCompleted = 0;
+ long fileSize = uploadFile.length();
+ Image.image.setFilesize(fileSize);
+ 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() && percentCompleted==100) {
+ System.out.println("Datei erfolgreich hochgeladen");
+ JOptionPane.showMessageDialog(null,
+ "Datei erfolgreich hochgeladen.", "Message",
+ JOptionPane.INFORMATION_MESSAGE);
+ } else if(!isCancelled() && percentCompleted != 100){
+ System.out.println("Datein wurde unvollständig hochgeladen");
+ JOptionPane.showMessageDialog(null,
+ "Datei wurde unvollständig hochgeladen. Bitte wiederholen.", "Message",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+} \ No newline at end of file