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); try { switch (conDef.getContainerImageContext()) { case DOCKERFILE: 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_REPOSITORY: 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_ARCHIVE: 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); } }); } }