diff options
author | Simon Rettberg | 2015-08-07 17:42:25 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-07 17:42:25 +0200 |
commit | 76aa5675c7b1a5488593bd2ca51b8db910605518 (patch) | |
tree | e40b50892784114aa2b733551b16b57201c52b64 /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) | |
download | tutor-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.java | 119 |
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(); + } + }); + } } |