summaryrefslogtreecommitdiffstats
path: root/dozentenmodul
diff options
context:
space:
mode:
authorralph isenmann2021-10-15 15:01:34 +0200
committerralph isenmann2021-10-15 15:01:34 +0200
commita7c5fb30d95043306d31ec867966005893a346f8 (patch)
treeb1b2d98bbe3757ae89be4974db5b1707e989dfef /dozentenmodul
parent[client] allow users to upload new versions of container images. (diff)
downloadtutor-module-a7c5fb30d95043306d31ec867966005893a346f8.tar.gz
tutor-module-a7c5fb30d95043306d31ec867966005893a346f8.tar.xz
tutor-module-a7c5fb30d95043306d31ec867966005893a346f8.zip
[client] Update process of the download for container images
- show some info to user what was actually downloaded und what to do with it.
Diffstat (limited to 'dozentenmodul')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerUtils.java28
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerWrapper.java80
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java25
3 files changed, 112 insertions, 21 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerUtils.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerUtils.java
index 571b9c44..3d65ea5d 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerUtils.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerUtils.java
@@ -10,6 +10,7 @@ import org.kamranzafar.jtar.TarInputStream;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.LectureSummary;
import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.model.ContainerDefinition;
@@ -18,7 +19,7 @@ import org.openslx.thrifthelper.TConst;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.ThriftUtil;
-
+import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.nio.ByteBuffer;
@@ -143,4 +144,29 @@ public class ContainerUtils {
}
return isValid;
}
+
+ public static JPanel createDownloadContainerInfo(String imageRepo, String infoText) {
+ JPanel pnlUserInfo = new JPanel();
+ GridManager grid = new GridManager(pnlUserInfo, 1, true);
+
+ JTextArea txtInfoText = new JTextArea();
+ txtInfoText.setBorder(BorderFactory.createTitledBorder(
+ I18n.PAGE_LAYOUT.getString("Info")));
+ txtInfoText.setLineWrap(true);
+ txtInfoText.setWrapStyleWord(true);
+ txtInfoText.setEditable(false);
+ txtInfoText.setFocusable(false);
+ txtInfoText.setOpaque(false);
+ txtInfoText.setText(infoText);
+ grid.add(txtInfoText).fill(true,true);
+ grid.nextRow();
+
+ JTextField txtUserInfo = new JTextField();
+ txtUserInfo.setText(imageRepo);
+ grid.add(txtUserInfo).fill(true,true);
+ grid.finish(true);
+
+ return pnlUserInfo;
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerWrapper.java
new file mode 100644
index 00000000..d7ce40a7
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ContainerWrapper.java
@@ -0,0 +1,80 @@
+package org.openslx.dozmod.util;
+
+import org.apache.log4j.Logger;
+import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.helper.MessageType;
+import org.openslx.virtualization.configuration.container.ContainerDefinition;
+
+import javax.swing.*;
+import java.awt.*;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+public class ContainerWrapper {
+
+ private static final Logger LOGGER = Logger.getLogger(ContainerWrapper.class);
+
+
+ public static void unwrapContainer(File tmpDiskFile, String imageName, File destDir,
+ byte[] virtualizerConfig) {
+ ContainerDefinition conDef = ContainerDefinition.fromByteArray(virtualizerConfig);
+ String infoText;
+ try {
+ switch (conDef.getBuildContextMethod()) {
+ case FILE:
+ conDef.saveLocal(destDir);
+ showImageMessageInfo(destDir.getPath(),
+ "Dieses Image wird durch ein Dockerfile gebaut. Wechseln Sie in das Verzeichnis und bauen Sie das Image lokal (docker build).");
+
+ break;
+ case GIT_REPOSITORY:
+ Files.delete(tmpDiskFile.toPath());
+ Files.delete(destDir.toPath());
+
+ showImageMessageInfo(conDef.getContainerMeta().getBuildContextUrl(),
+ "Dieses Image wird durch ein öffentliches Git-Repository gebaut. Das Image kann mit dem angezeigten Link lokal gebaut werden (docker build), zudem können die Image-Quellen über diesen betrachtet werden.");
+ break;
+ case IMAGE_REPO:
+ Files.delete(tmpDiskFile.toPath());
+ Files.delete(destDir.toPath());
+
+ showImageMessageInfo(
+ conDef.getContainerMeta().getImageRepo(),
+ "Dieses Image ist lediglich eine Referenz auf ein öffentliches Image. Das Image kann mittels des angezeigten Links gepullt werden."
+ );
+ break;
+ case DOCKER_TAR:
+ File destImage = new File(destDir.getAbsolutePath(),
+ VmWrapper.generateFilename(imageName, "tar"));
+ if (destImage.exists())
+ Files.delete(destImage.toPath());
+ Files.move(tmpDiskFile.toPath(),destImage.toPath());
+ break;
+ }
+
+ if (tmpDiskFile.exists())
+ Files.delete(tmpDiskFile.toPath());
+ } catch (IOException e) {
+ Gui.asyncMessageBox("Konnte temporäre Download Datei nicht löschen", MessageType.WARNING,
+ LOGGER, e);
+ }
+ }
+
+ private static void showImageMessageInfo(String imageSourceUrl, String infoText) {
+ Gui.asyncExec(new Runnable() {
+ @Override public void run() {
+ Object oldDimension = UIManager.get("OptionPane.minimumSize");
+ UIManager.put("OptionPane.minimumSize",new Dimension(400,200));
+ JOptionPane.showMessageDialog(null,
+ ContainerUtils.createDownloadContainerInfo(
+ imageSourceUrl,
+ infoText
+ ),
+ "Container-Image Info",
+ JOptionPane.INFORMATION_MESSAGE);
+ UIManager.put("OptionPane.minimumSize",oldDimension);
+ }
+ });
+ }
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
index fe884a15..3c3a5f1c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
@@ -7,22 +7,16 @@ import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.thrifthelper.TConst;
import org.openslx.virtualization.configuration.VirtualizationConfigurationException;
-import org.openslx.virtualization.configuration.container.ContainerDefinition;
import org.openslx.virtualization.disk.DiskImage;
import org.openslx.virtualization.disk.DiskImage.ImageFormat;
import org.openslx.virtualization.disk.DiskImageException;
import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
/**
* This Class handle the unpacking of Images downloaded from
* the server individually (VM-Images, Docker-Images (Container Images)).
- *
- * In case of Container-Images the Image-Blob is not important because it can be recreated with the
- * recipe (e.g. dockerfile).
- * TODO Do not download the Image-Blob of a Container-Image.
*/
public class ImageWrapper {
@@ -47,20 +41,10 @@ public class ImageWrapper {
boolean imageIsCompressed = false;
ImageFormat imageFormat = null;
- // unwrap each image individually
- // TODO In future maybe this is a check to distinguish between VM-Image and Container Image
+ // unwrap container image individually
if (virtualizerId.equals(TConst.VIRT_DOCKER)) {
- ContainerDefinition conDef = ContainerDefinition.fromByteArray(virtualizerConfig);
- conDef.saveLocal(destDir);
-
- try {
- // delete image file, unused in container Context.
- Files.delete(tmpDiskFile.toPath());
- } catch (IOException e) {
- Gui.asyncMessageBox("Konnte temporäre Download Datei nicht löschen", MessageType.WARNING,
- LOGGER, e);
- }
+ ContainerWrapper.unwrapContainer(tmpDiskFile, imageName, destDir, virtualizerConfig);
} else {
@@ -73,8 +57,9 @@ public class ImageWrapper {
}
if (imageIsCompressed && imageFormat != ImageFormat.QCOW2) {
- Gui.asyncMessageBox(I18n.THRIFT.getString("ThriftActions.Message.warning.diskImageCompressed",
- imageName, Branding.getServiceFAQWebsite()), MessageType.WARNING, null, null);
+ Gui.asyncMessageBox(
+ I18n.THRIFT.getString("ThriftActions.Message.warning.diskImageCompressed", imageName,
+ Branding.getServiceFAQWebsite()), MessageType.WARNING, null, null);
}
File destImage = new File(destDir.getAbsolutePath(), VmWrapper.generateFilename(imageName, ext));
destImage.delete();