summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-07 17:42:25 +0200
committerSimon Rettberg2015-08-07 17:42:25 +0200
commit76aa5675c7b1a5488593bd2ca51b8db910605518 (patch)
treee40b50892784114aa2b733551b16b57201c52b64 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
parent[client] make image details editable also if user has admin rights or if he d... (diff)
downloadtutor-module-76aa5675c7b1a5488593bd2ca51b8db910605518.tar.gz
tutor-module-76aa5675c7b1a5488593bd2ca51b8db910605518.tar.xz
tutor-module-76aa5675c7b1a5488593bd2ca51b8db910605518.zip
[client] Implement progress bar for uploads in main window
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java119
1 files changed, 112 insertions, 7 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
index 430f6ae6..46ffb51c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
@@ -1,5 +1,6 @@
package org.openslx.dozmod.gui.activity;
+import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
@@ -13,20 +14,43 @@ import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import org.apache.log4j.Logger;
+import org.openslx.dozmod.filetransfer.TransferEvent;
+import org.openslx.dozmod.filetransfer.TransferEventListener;
+import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.BlockProgressBar;
+import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.state.UploadWizardState;
+import org.openslx.thrifthelper.ThriftManager;
+import org.openslx.util.QuickTimer;
+import org.openslx.util.QuickTimer.Task;
@SuppressWarnings("serial")
-public class UploadPanel extends ActivityPanel {
+public class UploadPanel extends ActivityPanel implements TransferEventListener {
+
+ private static final Logger LOGGER = Logger.getLogger(UploadPanel.class);
private final JLabel lblStatus;
+ private final JLabel lblError;
+
+ private final JLabel lblSpeed;
+
+ private final JLabel lblRemaining;
+
private final BlockProgressBar progress;
private final UploadWizardState state;
- public UploadPanel(JPanel container, UploadWizardState state) {
- super(container);
+ private final UploadPanel panel = this;
+
+ private final Color defaultLabelColor;
+
+ private int errorCountdown = 0;
+
+ private final JButton btnClose;
+
+ public UploadPanel(UploadWizardState state) {
this.state = state;
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
@@ -42,9 +66,9 @@ public class UploadPanel extends ActivityPanel {
header.add(Box.createHorizontalGlue());
header.add(new JLabel(state.diskFile.getName()));
header.add(Box.createHorizontalStrut(10));
- JButton button = new JButton("Knopf");
- button.addActionListener(new ButtonAction());
- header.add(button);
+ btnClose = new JButton("Abbrechen");
+ btnClose.addActionListener(new ButtonAction());
+ header.add(btnClose);
add(header);
// ProgressBar
JPanel progressWrapper = new JPanel();
@@ -54,17 +78,98 @@ public class UploadPanel extends ActivityPanel {
progress = new BlockProgressBar(null);
progressWrapper.add(progress);
add(progressWrapper);
+ // Speed & error
+ JPanel footer = new JPanel();
+ footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS));
+ lblError = new JLabel();
+ lblSpeed = new JLabel("-");
+ lblRemaining = new JLabel("-");
+ lblSpeed.setMinimumSize(new Dimension(50, 0));
+ lblRemaining.setMinimumSize(new Dimension(60, 0));
+ footer.add(lblError);
+ footer.add(Box.createGlue());
+ footer.add(lblSpeed);
+ footer.add(Box.createRigidArea(new Dimension(6, 6)));
+ footer.add(lblRemaining);
+ add(footer);
+ defaultLabelColor = lblError.getForeground();
+ state.uploadTask.addListener(this);
}
@Override
public boolean wantConfirmQuit() {
- return false;
+ return state != null && state.uploadTask != null && !state.uploadTask.isCanceled();
}
private class ButtonAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
+ if (!state.uploadTask.isCanceled()) {
+ if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?",
+ MessageType.QUESTION_YESNO, null, null))
+ return;
+ state.uploadTask.cancel();
+ QuickTimer.scheduleOnce(new Task() {
+ @Override
+ public void fire() {
+ try {
+ ThriftManager.getSatClient().cancelUpload(state.transferInformation.getToken());
+ } catch (Exception ex) {
+ LOGGER.debug("Remote error while canceling upload for " + state.uuid, ex);
+ }
+ }
+ });
+ }
+ state.uploadTask.removeListener(panel);
+ close();
}
}
+ @Override
+ public void update(final TransferEvent event) {
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ // Any error message?
+ if (event.errorMessage != null && !event.errorMessage.isEmpty()) {
+ lblError.setText(event.errorMessage);
+ lblError.setForeground(Color.RED);
+ errorCountdown = 20;
+ } else if (errorCountdown > 0) {
+ errorCountdown--;
+ if (errorCountdown == 10) {
+ lblError.setForeground(defaultLabelColor);
+ } else if (errorCountdown == 0) {
+ lblError.setText("");
+ }
+ }
+ // Status?
+ if (event.state != null) {
+ switch (event.state) {
+ case ERROR:
+ errorCountdown = 20;
+ break;
+ case FINISHED:
+ btnClose.setText("Schließen");
+ lblRemaining.setText("-");
+ state.uploadTask.removeListener(panel);
+ break;
+ }
+ lblStatus.setText(event.state.toString());
+ }
+ // Remaining + Speed
+ if (event.remainingRaw != 0) {
+ lblRemaining.setText(event.remaining);
+ }
+ if (event.speedRaw != 0) {
+ lblSpeed.setText(event.speed);
+ }
+ // Progress bar
+ if (event.progress != null) {
+ progress.setStatus(event.progress);
+ }
+ panel.validate();
+ }
+ });
+ }
}