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.SscMode; 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.gui.helper.QuitNotification; 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; @SuppressWarnings("serial") public class UploadPanel extends TransferPanel implements QuitNotification { private static final Logger LOGGER = Logger.getLogger(UploadPanel.class); 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) || Session.getSatelliteConfig().serverSideCopy != SscMode.USER) { 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); } private class ButtonAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (!state.getUploadTask().isCanceled()) { if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", MessageType.QUESTION_YESNO, null, null)) return; QuickTimer.scheduleOnce(new Task() { @Override public void fire() { state.cancelError(); } }); } state.getUploadTask().removeListener(panel); 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); } }); } }); } } @Override public void onApplicationQuit() { // Application quit, tell server we cancel state.cancelError(); } }