summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-18 18:03:01 +0200
committerSimon Rettberg2016-04-18 18:03:01 +0200
commite0e6b82b54bef667d077efe933d1b7b35983a2cd (patch)
treed94bb33d5a9f931cf643f4f4acbdcf4e982578aa
parent[server] added 'hasusbaccess' field updater to Updater class (diff)
downloadtutor-module-e0e6b82b54bef667d077efe933d1b7b35983a2cd.tar.gz
tutor-module-e0e6b82b54bef667d077efe933d1b7b35983a2cd.tar.xz
tutor-module-e0e6b82b54bef667d077efe933d1b7b35983a2cd.zip
[*] Display sat->master progress in client
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/PassiveTransfer.java96
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEventEmitter.java11
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java19
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java33
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java8
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java11
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java6
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java5
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java3
10 files changed, 175 insertions, 22 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/PassiveTransfer.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/PassiveTransfer.java
new file mode 100644
index 00000000..c4f030f3
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/PassiveTransfer.java
@@ -0,0 +1,96 @@
+package org.openslx.dozmod.filetransfer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
+import org.openslx.bwlp.thrift.iface.TInvalidTokenException;
+import org.openslx.bwlp.thrift.iface.TransferState;
+import org.openslx.bwlp.thrift.iface.TransferStatus;
+import org.openslx.thrifthelper.ThriftManager;
+import org.openslx.util.QuickTimer;
+import org.openslx.util.QuickTimer.Task;
+
+/**
+ * Used to "watch" a transfer between a satellite server and the master server.
+ * We simply query the status of the upload from the master server.
+ */
+public class PassiveTransfer implements TransferEventEmitter {
+
+ private static final Logger LOGGER = Logger.getLogger(PassiveTransfer.class);
+
+ private static final long THRIFT_INTERVAL_MS = 2000;
+
+ /**
+ * List of listeners that want to get status updates about the transfer.
+ */
+ private final List<TransferEventListener> listeners = new ArrayList<>();
+
+ private final String uploadToken;
+
+ private long lastThriftUpdate = 0;
+
+ private boolean isCancelled = false;
+
+ public PassiveTransfer(String token) {
+ this.uploadToken = token;
+ QuickTimer.scheduleAtFixedDelay(new Task() {
+ @Override
+ public void fire() {
+ update();
+ if (isCancelled) {
+ this.cancel();
+ }
+ }
+ }, 1, THRIFT_INTERVAL_MS + 1);
+ }
+
+ @Override
+ public void addListener(TransferEventListener listener) {
+ synchronized (listeners) {
+ listeners.add(listener);
+ }
+ }
+
+ @Override
+ public void removeListener(TransferEventListener listener) {
+ synchronized (listeners) {
+ while (listeners.remove(listener)) {
+ }
+ }
+ }
+
+ @Override
+ public boolean isCanceled() {
+ return isCancelled;
+ }
+
+ private void update() {
+ final long now = System.currentTimeMillis();
+ if (lastThriftUpdate + THRIFT_INTERVAL_MS > now)
+ return;
+ TransferState state = null;
+ byte[] blocks = null;
+ String error = null;
+ lastThriftUpdate = now;
+ try {
+ TransferStatus uploadStatus = ThriftManager.getMasterClient().queryUploadStatus(uploadToken);
+ state = uploadStatus.getState();
+ blocks = uploadStatus.getBlockStatus();
+ } catch (TInvalidTokenException e) {
+ error = "Upload token unknown!?";
+ state = TransferState.ERROR;
+ } catch (TException e) {
+ error = "Exception quering upload status: " + e.toString();
+ }
+ TransferEvent event = new TransferEvent(state, blocks, 0, 0, error);
+ isCancelled = state == null || state == TransferState.ERROR || state == TransferState.FINISHED;
+ synchronized (listeners) {
+ for (int i = listeners.size() - 1; i >= 0; --i) {
+ listeners.get(i).update(event);
+ }
+ }
+ }
+
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEventEmitter.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEventEmitter.java
new file mode 100644
index 00000000..0b1e8d33
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferEventEmitter.java
@@ -0,0 +1,11 @@
+package org.openslx.dozmod.filetransfer;
+
+public interface TransferEventEmitter {
+
+ public void addListener(TransferEventListener listener);
+
+ public void removeListener(TransferEventListener listener);
+
+ public boolean isCanceled();
+
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
index 53d8f436..59508f4f 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
@@ -12,7 +12,7 @@ import org.openslx.dozmod.thrift.Session;
import org.openslx.filetransfer.Transfer;
import org.openslx.util.Util;
-public abstract class TransferTask implements Runnable {
+public abstract class TransferTask implements Runnable, TransferEventEmitter {
private static final Logger LOGGER = Logger.getLogger(TransferTask.class);
@@ -93,6 +93,7 @@ public abstract class TransferTask implements Runnable {
return isComplete;
}
+ @Override
public boolean isCanceled() {
return isCancelled;
}
@@ -124,12 +125,14 @@ public abstract class TransferTask implements Runnable {
}
}
+ @Override
public void addListener(TransferEventListener listener) {
synchronized (listeners) {
listeners.add(listener);
}
}
+ @Override
public void removeListener(TransferEventListener listener) {
synchronized (listeners) {
while (listeners.remove(listener)) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
index 0c90d60b..6ca0a4d0 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
@@ -33,12 +33,14 @@ import org.openslx.bwlp.thrift.iface.TransferState;
import org.openslx.dozmod.App;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.filetransfer.DownloadTask;
+import org.openslx.dozmod.filetransfer.PassiveTransfer;
import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.filetransfer.TransferEventListener;
import org.openslx.dozmod.filetransfer.UploadTask;
import org.openslx.dozmod.gui.Gui.GuiCallable;
import org.openslx.dozmod.gui.activity.ActivityPanel;
import org.openslx.dozmod.gui.activity.DownloadPanel;
+import org.openslx.dozmod.gui.activity.PassiveUploadPanel;
import org.openslx.dozmod.gui.activity.UpdatePanel;
import org.openslx.dozmod.gui.activity.UploadPanel;
import org.openslx.dozmod.gui.control.QLabel;
@@ -356,6 +358,23 @@ public abstract class MainWindow {
});
}
+ public static void addUpload(String masterTransferToken, String name) {
+ final PassiveTransfer transfer = new PassiveTransfer(masterTransferToken);
+ addPanel(new PassiveUploadPanel(transfer, name));
+ transfer.addListener(new TransferEventListener() {
+ @Override
+ public void update(TransferEvent event) {
+ if (event.state == TransferState.FINISHED) {
+ ImageListWindow page = getPage(ImageListWindow.class);
+ if (page != null) {
+ page.refresh(true);
+ }
+ transfer.removeListener(this);
+ }
+ }
+ });
+ }
+
public static void addDownload(String imageName, String diskFile, DownloadTask dlTask) {
addPanel(new DownloadPanel(imageName, diskFile, dlTask));
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java
new file mode 100644
index 00000000..a889e7b6
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java
@@ -0,0 +1,33 @@
+package org.openslx.dozmod.gui.activity;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import org.apache.log4j.Logger;
+import org.openslx.dozmod.filetransfer.TransferEventEmitter;
+
+@SuppressWarnings("serial")
+public class PassiveUploadPanel extends TransferPanel {
+
+ private static final Logger LOGGER = Logger.getLogger(PassiveUploadPanel.class);
+
+ private final TransferEventEmitter state;
+
+ private final PassiveUploadPanel panel = this;
+
+ public PassiveUploadPanel(TransferEventEmitter state, String name) {
+ super(state, name, "");
+ btnClose.addActionListener(new ButtonAction());
+ this.state = state;
+ state.addListener(this);
+ btnClose.setText("Ausblenden");
+ }
+
+ private class ButtonAction implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ state.removeListener(panel);
+ close();
+ }
+ }
+}
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 6e2e38ec..7a3582df 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
@@ -5,17 +5,15 @@ import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
-import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
-import javax.swing.JSeparator;
import org.apache.log4j.Logger;
import org.openslx.dozmod.filetransfer.TransferEvent;
+import org.openslx.dozmod.filetransfer.TransferEventEmitter;
import org.openslx.dozmod.filetransfer.TransferEventListener;
-import org.openslx.dozmod.filetransfer.TransferTask;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.BlockProgressBar;
import org.openslx.dozmod.gui.control.QLabel;
@@ -37,7 +35,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve
protected final BlockProgressBar progress;
- private final TransferTask transfer;
+ private final TransferEventEmitter transfer;
private final TransferPanel panel = this;
@@ -53,7 +51,7 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve
private JPanel footer;
- public TransferPanel(TransferTask transfer, String displayName, String fileName) {
+ public TransferPanel(TransferEventEmitter transfer, String displayName, String fileName) {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
// Header: [status] VM-Name ---- fileName [Button]
header = new JPanel();
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 e8313120..d71a4a1c 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
@@ -7,6 +7,7 @@ import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.state.UploadWizardState;
+import org.openslx.dozmod.thrift.UploadInitiator;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
@@ -15,32 +16,32 @@ public class UploadPanel extends TransferPanel {
private static final Logger LOGGER = Logger.getLogger(UploadPanel.class);
- private final UploadWizardState state;
+ private final UploadInitiator state;
private final UploadPanel panel = this;
public UploadPanel(UploadWizardState state) {
super(state.upload.getUploadTask(), state.name, state.diskFile.getName());
btnClose.addActionListener(new ButtonAction());
- this.state = state;
+ this.state = state.upload;
state.upload.getUploadTask().addListener(this);
}
private class ButtonAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
- if (!state.upload.getUploadTask().isCanceled()) {
+ 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.upload.cancelError();
+ state.cancelError();
}
});
}
- state.upload.getUploadTask().removeListener(panel);
+ state.getUploadTask().removeListener(panel);
close();
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
index a3541c0a..6c08dff8 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
@@ -414,16 +414,14 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
@Override
public void fire() {
try {
- String transferId = ThriftManager.getSatClient().publishImageVersion(
+ final String transferId = ThriftManager.getSatClient().publishImageVersion(
Session.getSatelliteToken(), image.latestVersionId);
- /*
Gui.asyncExec(new Runnable() {
@Override
public void run() {
- MainWindow.addUpload(transferId, );
+ MainWindow.addUpload(transferId, image.imageName);
}
});
- */
Gui.asyncMessageBox("Läuft: " + transferId, MessageType.INFO, null, null);
} catch (TException e1) {
ThriftError.showMessage(me, LOGGER, e1,
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
index 0276e0cd..3530a8fd 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
@@ -22,7 +22,6 @@ import org.openslx.bwlp.thrift.iface.ImagePublishData;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
import org.openslx.bwlp.thrift.iface.TransferInformation;
import org.openslx.bwlp.thrift.iface.TransferState;
-import org.openslx.bwlp.thrift.iface.TransferStatus;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.filetransfer.Downloader;
import org.openslx.filetransfer.util.FileChunk;
@@ -250,10 +249,6 @@ public class IncomingDataTransfer extends IncomingTransferBase {
return this.owner;
}
- public synchronized TransferStatus getStatus() {
- return new TransferStatus(getChunks().getStatusArray(), getState());
- }
-
@Override
public boolean isActive() {
return getState() == TransferState.IDLE || getState() == TransferState.WORKING;
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
index 581d7ba5..e2276908 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
@@ -6,7 +6,6 @@ import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
-import java.util.UUID;
import java.util.concurrent.ExecutorService;
import org.apache.log4j.Logger;
@@ -50,7 +49,7 @@ public class OutgoingDataTransfer extends AbstractTransfer {
* @param absFile file to send to master server
*/
public OutgoingDataTransfer(TransferInformation transferInfo, File absFile) {
- super(UUID.randomUUID().toString());
+ super(transferInfo.token);
this.masterTransferInfo = transferInfo;
this.sourceFile = absFile;
}