summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
blob: df396b55c787526498eb75a6d23d461a5064c0c7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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.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 {

	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);
						}
					});
				}
			});
		}
	}
}