summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-03 11:22:26 +0200
committerSimon Rettberg2015-09-03 11:22:26 +0200
commitceb88beda8d010ac11a35bfe3db1ca49fdcea712 (patch)
tree4892453de01e7d3d1ad75cf26f252f6e5c62aed5
parent[client] Generate VMX on download (diff)
downloadtutor-module-ceb88beda8d010ac11a35bfe3db1ca49fdcea712.tar.gz
tutor-module-ceb88beda8d010ac11a35bfe3db1ca49fdcea712.tar.xz
tutor-module-ceb88beda8d010ac11a35bfe3db1ca49fdcea712.zip
[client] Add "open folder" button to download panel
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java37
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java2
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java8
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java27
6 files changed, 67 insertions, 15 deletions
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 fabf1d66..056e5f71 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
@@ -235,6 +235,10 @@ public abstract class TransferTask implements Runnable {
}
}
+ public File getFile() {
+ return localFile;
+ }
+
protected abstract static class TransferThread extends Thread {
@Override
public abstract void run();
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
index 31946abd..f2434b1b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
@@ -3,9 +3,14 @@ package org.openslx.dozmod.gui.activity;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import javax.swing.JButton;
+
+import org.openslx.bwlp.thrift.iface.TransferState;
import org.openslx.dozmod.filetransfer.DownloadTask;
+import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
+import org.openslx.dozmod.util.OpenLinks;
@SuppressWarnings("serial")
public class DownloadPanel extends TransferPanel {
@@ -14,8 +19,13 @@ public class DownloadPanel extends TransferPanel {
private final DownloadTask download;
+ private final JButton btnOpenFolder;
+
public DownloadPanel(String displayName, String diskFile, DownloadTask download) {
super(download, displayName, diskFile);
+ btnOpenFolder = new JButton("Ordner öffnen");
+ btnOpenFolder.setEnabled(false);
+ header.add(btnOpenFolder, 6);
btnClose.addActionListener(new ButtonAction());
this.download = download;
download.addListener(this);
@@ -24,14 +34,27 @@ public class DownloadPanel extends TransferPanel {
private class ButtonAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
- if (!download.isCanceled()) {
- if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?",
- MessageType.QUESTION_YESNO, null, null))
- return;
- download.cancel();
+ if (e.getSource() == btnClose) {
+ if (!download.isCanceled()) {
+ if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?",
+ MessageType.QUESTION_YESNO, null, null))
+ return;
+ download.cancel();
+ }
+ download.removeListener(panel);
+ close();
+ } else if (e.getSource() == btnOpenFolder) {
+ OpenLinks.openLocal(download.getFile().getAbsoluteFile().getParentFile());
}
- download.removeListener(panel);
- close();
}
}
+
+ @Override
+ public void update(final TransferEvent event) {
+ super.update(event);
+ if (event.state == TransferState.FINISHED) {
+ btnOpenFolder.setEnabled(true);
+ }
+ }
+
}
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 96171e6d..cbb0fd2f 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
@@ -39,13 +39,15 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve
private final Color defaultLabelColor;
+ protected final JPanel header;
+
private int errorCountdown = 0;
public TransferPanel(TransferTask transfer, String displayName, String fileName) {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
// Header: [status] VM-Name ---- fileName [Button]
- JPanel header = new JPanel();
+ header = new JPanel();
header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS));
lblStatus = new QLabel("[init]");
header.add(lblStatus);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java
index 5c2cf974..b1e301ce 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/QFileChooser.java
@@ -15,7 +15,7 @@ public class QFileChooser extends JFileChooser {
// Ugly hack to get a prettier file chooser with GTK
LookAndFeel old = UIManager.getLookAndFeel();
- if (old == null || !old.getName().toLowerCase().contains("gtk")) {
+ if (dirMode || old == null || !old.getName().toLowerCase().contains("gtk")) {
old = null;
} else {
try {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
index 6c1d1a58..2900ee20 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -406,10 +406,10 @@ public class ThriftActions {
final File tmpDiskFile = new File(destDir.getAbsolutePath(), VmWrapper.generateFilename(imageName,
null) + ".part");
- if (tmpDiskFile.exists()) {
- boolean ret = Gui.showMessageBox(frame, "Datei '" + tmpDiskFile.getAbsolutePath()
- + "' existiert bereits, wollen Sie sie überschreiben?", MessageType.QUESTION_YESNO,
- LOGGER, null);
+ if (destDir.exists()) {
+ boolean ret = Gui.showMessageBox(frame, "Verzeichnis '" + destDir.getAbsolutePath()
+ + "' existiert bereits, wollen Sie die VM darin überschreiben?",
+ MessageType.QUESTION_YESNO, LOGGER, null);
if (!ret) {
// user aborted
if (callback != null)
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java
index 0819fb1f..0443c2cf 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/OpenLinks.java
@@ -1,6 +1,7 @@
package org.openslx.dozmod.util;
import java.awt.Desktop;
+import java.io.File;
import java.net.URI;
import java.net.URLEncoder;
@@ -17,8 +18,10 @@ public class OpenLinks {
public static enum Link {
FAQ("http://bwlehrpool.hs-offenburg.de"),
- VMWARE("https://my.vmware.com/de/web/vmware/free#desktop_end_user_computing/vmware_player/6_0%7CPLAYER-603%7Cproduct_downloads"),
- INTRO("http://www.hs-offenburg.de/fileadmin/Einrichtungen/hrz/Projekte/bwLehrpool/3_bwLehrpool_-_Image_einbinden_und_starten.pdf");
+ VMWARE(
+ "https://my.vmware.com/de/web/vmware/free#desktop_end_user_computing/vmware_player/6_0%7CPLAYER-603%7Cproduct_downloads"),
+ INTRO(
+ "http://www.hs-offenburg.de/fileadmin/Einrichtungen/hrz/Projekte/bwLehrpool/3_bwLehrpool_-_Image_einbinden_und_starten.pdf");
private final URI uri;
@@ -47,6 +50,26 @@ public class OpenLinks {
return false;
}
+ public static boolean openLocal(File path) {
+ try {
+ desktop.open(path);
+ return true;
+ } catch (Exception e) {
+ LOGGER.error("Got exception in openLocal: ", e);
+ }
+ try {
+ int exitCode = Runtime.getRuntime()
+ .exec(new String[] { "xdg-open", path.getAbsolutePath() })
+ .waitFor();
+ if (exitCode == 0)
+ return true;
+ LOGGER.error("xdg-open returned " + exitCode);
+ } catch (Exception e) {
+ LOGGER.error("xdg-open fallback failed", e);
+ }
+ return false;
+ }
+
/**
* Send an email to the given email address, with an optional subject. This
* will open the user's default mail application.