summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
blob: 7e56b0e80aa4592ddc5226f86ce927fd98216f43 (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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.logging.log4j.LogManager;
import org.apache.logging.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.I18n;
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;

public class UploadPanel extends TransferPanel implements QuitNotification {

	/**
	 * Version for serialization.
	 */
	private static final long serialVersionUID = -8905745015422520339L;

	private static final Logger LOGGER = LogManager.getLogger(UploadPanel.class);

	private 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(I18n.ACTIVITY.getString("UploadPanel.CheckBox.serverSideCopy.text"));
			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 == null)
				return;
			state.getUploadTask().removeListener(panel);
			if (!state.getUploadTask().isCanceled()) {
				if (!Gui.showMessageBox(panel, I18n.ACTIVITY.getString("UploadPanel.Message.yesNo.cancelTransfer"),
						MessageType.QUESTION_YESNO, null, null))
					return;
				final UploadInitiator fstate = state;
				QuickTimer.scheduleOnce(new Task() {
					@Override
					public void fire() {
						fstate.cancelError("UploadPanel: Requested by user through button press");
					}
				});
			}
			close();
			state = null;
		}
	}

	private class SscToggle implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (state == null)
				return;
			final UploadOptions options = new UploadOptions(chkServerSideCopy.isSelected());
			final UploadInitiator fstate = state;
			QuickTimer.scheduleOnce(new Task() {
				@Override
				public void fire() {
					boolean dis = false;
					UploadOptions newOpt = null;
					try {
						newOpt = ThriftManager.getSatClient().setUploadOptions(Session.getSatelliteToken(),
								fstate.getToken(), options);
					} catch (TAuthorizationException | TInvalidTokenException e) {
						dis = true;
					} catch (TException e) {
						Gui.asyncMessageBox(I18n.ACTIVITY.getString("UploadPanel.Message.error.setUploadOptions"),
								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
		if (state == null)
			return;
		state.cancelError("Application quit (via UploadPanel)");
	}
	
	@Override
	protected void releaseResources() {
		state = null;
	}
}