diff options
author | Jonathan Bauer | 2016-08-31 16:54:59 +0200 |
---|---|---|
committer | Jonathan Bauer | 2016-08-31 16:54:59 +0200 |
commit | 26cd5699373dbe35ee24700189e8a3e580ae6243 (patch) | |
tree | 0389541c704fbfe05aeb514365e4643f84bbfa20 /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) | |
download | tutor-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.java | 99 |
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); } } + + /******************************************************************************** * |