summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
diff options
context:
space:
mode:
authorJonathan Bauer2016-08-31 16:54:59 +0200
committerJonathan Bauer2016-08-31 16:54:59 +0200
commit26cd5699373dbe35ee24700189e8a3e580ae6243 (patch)
tree0389541c704fbfe05aeb514365e4643f84bbfa20 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
parent[client] Reset filter when hiding lecture list if filtered by linked image (diff)
downloadtutor-module-26cd5699373dbe35ee24700189e8a3e580ae6243.tar.gz
tutor-module-26cd5699373dbe35ee24700189e8a3e580ae6243.tar.xz
tutor-module-26cd5699373dbe35ee24700189e8a3e580ae6243.zip
[client] vm-config editor finished, accessible from the popup menu of image's versions
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java99
1 files changed, 61 insertions, 38 deletions
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 e2d55f29..47022be9 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
@@ -11,6 +11,9 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -32,7 +35,6 @@ import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
-import org.openslx.bwlp.thrift.iface.ImagePublishData;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.bwlp.thrift.iface.LectureSummary;
@@ -47,7 +49,7 @@ import org.openslx.dozmod.gui.helper.PopupMenu;
import org.openslx.dozmod.gui.helper.TextChangeListener;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback;
-import org.openslx.dozmod.gui.window.VmxEditorWindow.VmxChangedCallback;
+import org.openslx.dozmod.gui.window.VirtConfigEditorWindow.VirtConfigChanged;
import org.openslx.dozmod.gui.window.layout.ImageDetailsWindowLayout;
import org.openslx.dozmod.gui.wizard.ImageUpdateWizard;
import org.openslx.dozmod.gui.wizard.LectureWizard;
@@ -66,7 +68,9 @@ import org.openslx.dozmod.util.MapHelper;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
+import org.openslx.util.ThriftUtil;
import org.openslx.util.Util;
+import org.openslx.util.vm.VmwareConfig;
/**
* Window for displaying and editing the details of an image.
@@ -124,6 +128,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
*/
private final JMenuItem mnuNewLecture = new JMenuItem("Neue Veranstaltung");
private final JMenuItem mnuDownload = new JMenuItem("Download");
+ private final JMenuItem mnuVmConfig = new JMenuItem("VM-Konfiguration");
private final JMenuItem mnuDelete = new JMenuItem("Löschen");
private final JMenuItem mnuExtendExpiryDate = new JMenuItem(
"Ablaufzeitpunk vom aktuellen Datum ausgehend neu berechnen");
@@ -208,42 +213,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}, "Besitzer festlegen", image.ownerId);
}
});
- btnEditVmx.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- QuickTimer.scheduleOnce(new Task() {
- ImagePublishData data = null;
- @Override
- public void fire() {
- data = ThriftActions.getImageData(image.imageBaseId);
- Gui.asyncExec(new Runnable() {
- @Override
- public void run() {
- if (data == null) {
- // TODO warn user about failure
- return;
- }
- // open basic vmx editor
- byte[] bytes;
- if(data.machineDescription.hasArray()) {
- bytes = data.machineDescription.array();
- } else {
- bytes = new byte[data.machineDescription.remaining()];
- data.machineDescription.get(bytes);
- }
- String dataString = new String(bytes, java.nio.charset.StandardCharsets.UTF_8);
- VmxEditorWindow.open(me, new VmxChangedCallback() {
- @Override
- public void vmxChanged(String newVmx) {
- // TODO save it
- }
- }, dataString);
- }
- });
- }
- });
- }
- });
+
btnPermissions.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
@@ -280,6 +250,9 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
if (e.getSource().equals(mnuDelete)) {
deleteVersions(tblVersions.getSelectedItems());
}
+ if (e.getSource().equals(mnuVmConfig)) {
+ editVmConfig(selected);
+ }
if (e.getSource().equals(mnuExtendExpiryDate)) {
extendVersionExpiry(tblVersions.getSelectedItems());
}
@@ -288,6 +261,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
});
pop.addMenuItem(mnuNewLecture);
pop.addMenuItem(mnuDownload);
+ pop.addMenuItem(mnuVmConfig);
pop.addSeparator();
pop.addMenuItem(mnuDelete);
if (Session.canExtendImageExpiry()) {
@@ -346,6 +320,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
&& ImagePerms.canLink(image));
mnuDownload.setEnabled(!multiSelection && tblVersions.getSelectedItem().isValid
&& ImagePerms.canDownload(image));
+ mnuVmConfig.setEnabled(!multiSelection && tblVersions.getSelectedItem().isValid
+ && ImagePerms.canEdit(image));
mnuDelete.setEnabled(ImagePerms.canEdit(image));
mnuExtendExpiryDate.setEnabled(multiSelection
|| tblVersions.getSelectedItem().isValid);
@@ -400,6 +376,51 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
cboShareMode.setEnabled(false);
}
+ private void editVmConfig(final ImageVersionDetails selected) {
+ QuickTimer.scheduleOnce(new Task() {
+ ByteBuffer machineDescription = null;
+ @Override
+ public void fire() {
+ try {
+ machineDescription = ThriftManager.getSatClient().getImageVersionVirtConfig(Session.getSatelliteToken(), selected.versionId);
+ } catch (TException e) {
+ LOGGER.error("Failed to retrieve virtualizer config for image version "
+ + "'" + image.latestVersionId + ", see trace: ", e);
+ }
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (machineDescription == null) {
+ Gui.showMessageBox("Konnte VM-Konfiguration nicht abrufen.", MessageType.ERROR, LOGGER, null);
+ return;
+ }
+ byte[] bytes = ThriftUtil.unwrapByteBuffer(machineDescription);
+ BufferedReader reader;
+ StringBuffer content = new StringBuffer("");
+ try {
+ reader = VmwareConfig.getVmxReader(bytes, bytes.length);
+ String line="";
+ while ((line=reader.readLine()) != null) {
+ content.append(line + "\n");
+ }
+ reader.close();
+ } catch (IOException e) {
+ LOGGER.error("Could not get a reader for byte[] !?");
+ }
+ VirtConfigEditorWindow.open(me, new VirtConfigChanged() {
+ @Override
+ public void virtConfigChanged(String newMachineDescription) {
+ if (newMachineDescription == null || newMachineDescription.isEmpty())
+ return;
+ actionHandler.setVirtualizerConfig(selected.versionId, newMachineDescription);
+ }
+ }, content.toString());
+ }
+ });
+ }
+ });
+ }
+
/********************************************************************************
*
* Helper triggering the actual thrift calls
@@ -623,6 +644,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
refresh(true);
}
}
+
+
/********************************************************************************
*