diff options
| author | Simon Rettberg | 2018-05-12 16:19:55 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2018-05-12 16:19:55 +0200 |
| commit | d324ed28fe622b48c0c3d420b949070ec4f895c7 (patch) | |
| tree | d0411b453ce2f9b9655993cb9af0b8c916c50934 /dozentenmodul/src/main/java | |
| parent | [client] Fix call (diff) | |
| download | tutor-module-d324ed28fe622b48c0c3d420b949070ec4f895c7.tar.gz tutor-module-d324ed28fe622b48c0c3d420b949070ec4f895c7.tar.xz tutor-module-d324ed28fe622b48c0c3d420b949070ec4f895c7.zip | |
[client] UploadPanel: Add checkbox to toggle server side copying
Diffstat (limited to 'dozentenmodul/src/main/java')
3 files changed, 73 insertions, 5 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java index 4d3155e2..00ce10d3 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java @@ -49,7 +49,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve private JPanel progressWrapper; - private JPanel footer; + protected JPanel footer; public TransferPanel(TransferEventEmitter transfer, String displayName, String fileName) { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 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 d71a4a1c..ea339651 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 @@ -3,11 +3,21 @@ package org.openslx.dozmod.gui.activity; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.Box; +import javax.swing.JCheckBox; + import org.apache.log4j.Logger; +import org.apache.thrift.TException; +import org.openslx.bwlp.thrift.iface.TAuthorizationException; +import org.openslx.bwlp.thrift.iface.TInvalidTokenException; +import org.openslx.bwlp.thrift.iface.UploadOptions; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.state.UploadWizardState; +import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.UploadInitiator; +import org.openslx.sat.thrift.version.Feature; +import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; @@ -19,9 +29,19 @@ public class UploadPanel extends TransferPanel { private final UploadInitiator state; private final UploadPanel panel = this; + + private final JCheckBox chkServerSideCopy; public UploadPanel(UploadWizardState state) { super(state.upload.getUploadTask(), state.name, state.diskFile.getName()); + if (!Session.hasFeature(Feature.SERVER_SIDE_COPY)) { + chkServerSideCopy = null; + } else { + chkServerSideCopy = new JCheckBox("ServerSide Copy"); + footer.add(Box.createHorizontalStrut(15)); + footer.add(chkServerSideCopy); + chkServerSideCopy.addActionListener(new SscToggle()); + } btnClose.addActionListener(new ButtonAction()); this.state = state.upload; state.upload.getUploadTask().addListener(this); @@ -45,4 +65,43 @@ public class UploadPanel extends TransferPanel { close(); } } + + private class SscToggle implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + final UploadOptions options = new UploadOptions(chkServerSideCopy.isSelected()); + QuickTimer.scheduleOnce(new Task() { + @Override + public void fire() { + boolean dis = false; + UploadOptions newOpt = null; + try { + newOpt = ThriftManager.getSatClient().setUploadOptions(Session.getSatelliteToken(), + state.getToken(), options); + } catch (TAuthorizationException | TInvalidTokenException e) { + dis = true; + } catch (TException e) { + Gui.asyncMessageBox("Unerwarteter Fehler beim Setzen der Transferoptionen", + MessageType.ERROR, LOGGER, e); + } + final UploadOptions newOptions = newOpt; + final boolean disableBox = dis; + Gui.asyncExec(new Runnable() { + @Override + public void run() { + chkServerSideCopy.setEnabled(!disableBox); + if (newOptions == null) { + // Most likely error, revert + chkServerSideCopy.setSelected(!chkServerSideCopy.isSelected()); + } else if (newOptions.isSetServerSideCopying()) { + chkServerSideCopy.setSelected(newOptions.serverSideCopying); + } + progress.showOptimisticComplete(newOptions != null + && newOptions.isSetServerSideCopying() && newOptions.serverSideCopying); + } + }); + } + }); + } + } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/BlockProgressBar.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/BlockProgressBar.java index 2b26b397..131a5a07 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/BlockProgressBar.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/BlockProgressBar.java @@ -18,7 +18,7 @@ public class BlockProgressBar extends JPanel { private final Color[] blockColors = new Color[6]; - private static final Color potentialCompleteColor = new Color(200, 220, 255, 255); + private static final Color potentialCompleteColor = new Color(215, 230, 255, 255); private final TransferStatusWrapper blocks = new TransferStatusWrapper(null); @@ -26,6 +26,8 @@ public class BlockProgressBar extends JPanel { private boolean simpleMode = true; + private boolean showEstimatedComplete = false; + public BlockProgressBar(byte[] blocks) { super(); setPreferredSize(Gui.getScaledDimension(100, 32)); @@ -85,11 +87,14 @@ public class BlockProgressBar extends JPanel { blocks.getCompleteEx(progress); final int doneWidth = (int) ((float) width * progress.done); final int potentialWidth = (int) ((float) width * progress.potentiallyDone); - final int sumWidth = doneWidth + potentialWidth; + int sumWidth = doneWidth; g.setColor(Color.BLUE); g.fillRect(0, 0, doneWidth, height); - g.setColor(potentialCompleteColor); - g.fillRect(doneWidth, 0, potentialWidth, height); + if (showEstimatedComplete) { + g.setColor(potentialCompleteColor); + g.fillRect(doneWidth, 0, potentialWidth, height); + sumWidth += potentialWidth; + } g.setColor(Color.WHITE); g.fillRect(sumWidth, 0, width - sumWidth, height); final String percentDisplay = (int) (progress.done * 100) + "%"; @@ -149,4 +154,8 @@ public class BlockProgressBar extends JPanel { } } + public void showOptimisticComplete(boolean b) { + this.showEstimatedComplete = b; + } + } |
