From 07f20c09c48e350bca1c33c19dba25bb2b536679 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Fri, 13 Aug 2021 15:55:00 +0200 Subject: [client] minor fixes to container related part - fix typos - do not allow empty Dockerfiles - add translations --- .../gui/control/table/ContainerBindMountTable.java | 10 +++-- .../openslx/dozmod/gui/panel/ContainerPanel.java | 45 ++++++++++++++-------- .../wizard/layout/ContainerUploadPageLayout.java | 7 ++-- .../gui/wizard/layout/ImageMetaDataPageLayout.java | 18 ++------- .../gui/wizard/page/ContainerUploadPage.java | 4 ++ .../openslx/dozmod/model/ContainerDefinition.java | 22 +++++++++++ .../main/properties/i18n/configurator.properties | 6 ++- .../properties/i18n/configurator_de_DE.properties | 8 +++- .../src/main/properties/i18n/page.properties | 1 + .../src/main/properties/i18n/page_de_DE.properties | 1 + .../src/main/properties/i18n/panel.properties | 10 ++--- .../main/properties/i18n/panel_de_DE.properties | 11 +++--- .../main/properties/i18n/panel_tr_TR.properties | 10 ++--- 13 files changed, 93 insertions(+), 60 deletions(-) (limited to 'dozentenmodul/src') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ContainerBindMountTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ContainerBindMountTable.java index b812d9af..81c76303 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ContainerBindMountTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ContainerBindMountTable.java @@ -1,5 +1,6 @@ package org.openslx.dozmod.gui.control.table; +import org.openslx.dozmod.gui.helper.I18n; import org.openslx.virtualization.configuration.container.ContainerBindMount; import java.util.ArrayList; @@ -11,9 +12,12 @@ public class ContainerBindMountTable extends ListTable { */ private static final long serialVersionUID = -2908607335582645909L; - public static final ListTableColumn COL_SOURCE = new ListTableColumn("SOURCE"); - public static final ListTableColumn COL_TARGET = new ListTableColumn("TARGET"); - public static final ListTableColumn COL_OPTIONS = new ListTableColumn("OPTIONS"); + public static final ListTableColumn COL_SOURCE = new ListTableColumn( + I18n.CONFIGURATOR.getString("ContainerBindMount.BindMountTable.col.src")); + public static final ListTableColumn COL_TARGET = new ListTableColumn( + I18n.CONFIGURATOR.getString("ContainerBindMount.BindMountTable.col.dest")); + public static final ListTableColumn COL_OPTIONS = new ListTableColumn( + I18n.CONFIGURATOR.getString("ContainerBindMount.BindMountTable.col.opt")); public ContainerBindMountTable() { super(COL_SOURCE, COL_TARGET, COL_OPTIONS); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java index b2201239..1cb861ee 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java @@ -30,9 +30,8 @@ public class ContainerPanel extends JPanel { public static final String IMAGE_CONTEXT = "IMAGE"; public static final String CONTAINER_CONTEXT = "CONTAINER"; - private final Logger LOGGER = Logger.getLogger(ContainerBindMountConfigurator.class); + private final Logger LOGGER = Logger.getLogger(ContainerPanel.class); - // TODO ContainerImageType should be set in MetaData private final QLabel lblContainerImageType; private final ComboBox cboContainerImageType; @@ -65,6 +64,8 @@ public class ContainerPanel extends JPanel { QLabel lblContainerRunCommand = new QLabel( I18n.PANEL.getString("ContainerPanel.ContainerRunCommand.label")); + lblContainerRunCommand.setToolTipText( + I18n.PANEL.getString("ContainerPanel.ContainerRunCommand.tooltip")); txtContainerRunCommand = new JTextField(); grdContainerMeta.add(lblContainerRunCommand); grdContainerMeta.add(txtContainerRunCommand, 2).fill(true, false).expand(true, false); @@ -89,20 +90,9 @@ public class ContainerPanel extends JPanel { scrollableTextArea.setPreferredSize(Gui.getScaledDimension(0, 200)); grdContainer.add(scrollableTextArea, 2).fill(true, true).expand(true, true); - // TODO copy-paste in ImageMetaDataPageLayout for this ContainerImageType component - lblContainerImageType = new QLabel("Container Image Type"); - cboContainerImageType = new ComboBox<>( - new ComboBox.ComboBoxRenderer() { - @Override public String renderItem(ContainerMeta.ContainerImageType item) { - if (item == null) - return "null"; - return item.toString(); // shows the provided label - } - }, ContainerMeta.ContainerImageType.class); - for (ContainerMeta.ContainerImageType type : ContainerMeta.ContainerImageType.values()) { - cboContainerImageType.addItem(type); - } - cboContainerImageType.setSelectedItem(ContainerMeta.ContainerImageType.LECTURE); + lblContainerImageType = new QLabel( + I18n.PANEL.getString("ContainerPanel.Label.ContainerImageType.text")); + cboContainerImageType = ContainerPanel.createContainerImageTypeCBO(); grdContainer.add(lblContainerImageType); grdContainer.add(cboContainerImageType).fill(true, false).expand(true, false); @@ -236,5 +226,28 @@ public class ContainerPanel extends JPanel { } return true; } + + public static ComboBox createContainerImageTypeCBO (){ + ComboBox cbo = new ComboBox<>( + new ComboBox.ComboBoxRenderer() { + @Override public String renderItem(ContainerMeta.ContainerImageType item) { + switch (item){ + case LECTURE: + return "Pool"; + case BATCH: + return "Pool/Cluster"; + case DATA: + return "Daten"; + default: + return ""; + } + } + }, ContainerMeta.ContainerImageType.class); + for (ContainerMeta.ContainerImageType type : ContainerMeta.ContainerImageType.values()) { + cbo.addItem(type); + } + cbo.setSelectedItem(ContainerMeta.ContainerImageType.LECTURE); + return cbo; + } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ContainerUploadPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ContainerUploadPageLayout.java index e3c80ea3..b0201e47 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ContainerUploadPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ContainerUploadPageLayout.java @@ -83,10 +83,9 @@ public class ContainerUploadPageLayout extends WizardPage { tpInput = new JTabbedPane(); tpInput.addTab("Dockerfile", p1); - tpInput.addTab("Git Repository", p2); - tpInput.addTab("Image Repository", imageRepoPanel); - // set "Image Repository" as selected - tpInput.setSelectedIndex(2); + tpInput.addTab("Git-Repository", p2); + tpInput.addTab("Image-Repository", imageRepoPanel); + tpInput.setSelectedIndex(0); grid.add(tpInput, 3).fill(true, false); grid.nextRow(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java index bec7e3dc..14145c75 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java @@ -7,6 +7,7 @@ import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.helper.I18n; +import org.openslx.dozmod.gui.panel.ContainerPanel; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; import org.openslx.thrifthelper.Comparators; @@ -75,20 +76,9 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(chkLicenseRestricted, 2); grid.nextRow(); - // TODO copy-paste in ContainerPanel for this ContainerImageType component - lblContainerImageType = new QLabel("Container Image Type"); - cboContainerImageType = new ComboBox<>( - new ComboBox.ComboBoxRenderer() { - @Override public String renderItem(ContainerMeta.ContainerImageType item) { - if (item == null) - return "null"; - return item.toString(); // shows the provided label - } - }, ContainerMeta.ContainerImageType.class); - for (ContainerMeta.ContainerImageType type : ContainerMeta.ContainerImageType.values()) { - cboContainerImageType.addItem(type); - } - cboContainerImageType.setSelectedItem(ContainerMeta.ContainerImageType.LECTURE); + lblContainerImageType = new QLabel( + I18n.PANEL.getString("ContainerPanel.Label.ContainerImageType.text")); + cboContainerImageType = ContainerPanel.createContainerImageTypeCBO(); grid.add(lblContainerImageType); grid.add(cboContainerImageType).fill(true, false).expand(true, false); lblContainerImageType.setVisible(false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java index 6d2078f8..b21564a6 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java @@ -244,6 +244,10 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoReceipt")); return false; } + if (! ContainerDefinition.isValidDockerfile(txtImageFile.getText())) { + setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoValidDockerfiler")); + return false; + } break; case GIT_REPOSITORY: if (txtGitRepo.getText() == null || txtGitRepo.getText().isEmpty()) { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java index 23142b51..99d73c23 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java @@ -4,6 +4,9 @@ import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.virtualization.configuration.VirtualizationConfigurationDocker; import org.openslx.virtualization.configuration.VirtualizationConfigurationException; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; public class ContainerDefinition extends org.openslx.virtualization.configuration.container.ContainerDefinition { @@ -27,4 +30,23 @@ public class ContainerDefinition extends } return null; } + + public static boolean isValidDockerfile(String dockerfile) { + try { + File file = new File(dockerfile); + if (file.length() == 0) + return false; + + Scanner scanner = new Scanner(file); + while (scanner.hasNext()) { + if(scanner.next().contains("FROM")){ + return true; + } + } + scanner.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + return false; + } } diff --git a/dozentenmodul/src/main/properties/i18n/configurator.properties b/dozentenmodul/src/main/properties/i18n/configurator.properties index f96b2558..625cb357 100644 --- a/dozentenmodul/src/main/properties/i18n/configurator.properties +++ b/dozentenmodul/src/main/properties/i18n/configurator.properties @@ -128,4 +128,8 @@ Startup.SoundState.unmuted=Unmute # ContainerBindMountConfigurator ContainerBindMount.BindMount.text=Bind Mount Configuration ContainerBindMount.Button.AddBindMount.text=Add Bind Mount -ContainerBindMount.Button.DeleteBindMount.text=Remove Bind Mount \ No newline at end of file +ContainerBindMount.Button.DeleteBindMount.text=Remove Bind Mount + +ContainerBindMount.BindMountTable.col.src=Source +ContainerBindMount.BindMountTable.col.dest=Target +ContainerBindMount.BindMountTable.col.opt=Options diff --git a/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties b/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties index 1a39a3e3..6e5f7caa 100644 --- a/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties +++ b/dozentenmodul/src/main/properties/i18n/configurator_de_DE.properties @@ -126,6 +126,10 @@ Startup.SoundState.muted=Stummschalten Startup.SoundState.unmuted=Aktivieren # ContainerBindMountConfigurator -ContainerBindMount.BindMount.text=Bind Mount Configuration +ContainerBindMount.BindMount.text=Bind-Mount-Konfiguration ContainerBindMount.Button.AddBindMount.text=Bind Mount hinzufügen -ContainerBindMount.Button.DeleteBindMount.text=Bind Mount entfernen \ No newline at end of file +ContainerBindMount.Button.DeleteBindMount.text=Bind Mount entfernen + +ContainerBindMount.BindMountTable.col.src=Quelle +ContainerBindMount.BindMountTable.col.dest=Ziel +ContainerBindMount.BindMountTable.col.opt=Optionen diff --git a/dozentenmodul/src/main/properties/i18n/page.properties b/dozentenmodul/src/main/properties/i18n/page.properties index fb951700..eef4b242 100644 --- a/dozentenmodul/src/main/properties/i18n/page.properties +++ b/dozentenmodul/src/main/properties/i18n/page.properties @@ -71,6 +71,7 @@ ImageOvfConversion.Dialog.RemoveTmpDirectory.title=Delete temporary directory? ContainerUploadPage.Description.ContainerDefFinished=Container definition finished ContainerUploadPage.Warning.NoImageRepo=No Image Repository provided ContainerUploadPage.Warning.NoReceipt=No Container Recipe provided! +ContainerUploadPage.Warning.NoValidDockerfiler=No valid Dockerfile provided! ContainerUploadPage.Warning.NoGitRepository=No Git Repository provided! ContainerUploadPage.Warning.NoProperName=Set proper Image Name ContainerUploadPage.Warning.NoRunOptions=Set container run options diff --git a/dozentenmodul/src/main/properties/i18n/page_de_DE.properties b/dozentenmodul/src/main/properties/i18n/page_de_DE.properties index 599bb26d..67c3662a 100644 --- a/dozentenmodul/src/main/properties/i18n/page_de_DE.properties +++ b/dozentenmodul/src/main/properties/i18n/page_de_DE.properties @@ -67,6 +67,7 @@ ImageOvfConversion.Dialog.RemoveTmpDirectory.title=Temporäres Verzeichnis lösc # ContainerUploadPage ContainerUploadPage.Description.ContainerDefFinished=Container Definition vollständig ContainerUploadPage.Warning.NoReceipt=Keine Containeranweisungen angegeben! +ContainerUploadPage.Warning.NoValidDockerfiler=Kein valides Dockerfile angegeben! ContainerUploadPage.Warning.NoGitRepository=Kein Git Repository angegeben! ContainerUploadPage.Warning.NoProperName=Bitte Imagenamen setzen ContainerUploadPage.Warning.NoRunOptions=Bitte Container Start Optionen setzen diff --git a/dozentenmodul/src/main/properties/i18n/panel.properties b/dozentenmodul/src/main/properties/i18n/panel.properties index f78c5f36..8770f86f 100644 --- a/dozentenmodul/src/main/properties/i18n/panel.properties +++ b/dozentenmodul/src/main/properties/i18n/panel.properties @@ -4,11 +4,7 @@ ContainerPanel.ContainerStartOptions.tooltip=Please provide the Container Run Op ContainerPanel.Label.ImageName.text=Image Name ContainerPanel.Constraint.NoEmptyDockerfile.text=Empty Dockerfile not allowed! +ContainerPanel.ContainerRunCommand.label=Container Run Command +ContainerPanel.ContainerRunCommand.tooltip=Specify the programme and arguments for the Docker Run command. -ContainerPanel.ContainerRunCommand.label="Container Run Command" - -# UNUSED -ImageDetails.Constraint.NoEmptyName.text=Empty Name not allowed! -ImageDetails.Constraint.NoEmptyRunOptions.text=No Container Run Options provided! - - +ContainerPanel.Label.ContainerImageType.text=Container Image Type diff --git a/dozentenmodul/src/main/properties/i18n/panel_de_DE.properties b/dozentenmodul/src/main/properties/i18n/panel_de_DE.properties index 440978dd..e3f47cba 100644 --- a/dozentenmodul/src/main/properties/i18n/panel_de_DE.properties +++ b/dozentenmodul/src/main/properties/i18n/panel_de_DE.properties @@ -1,11 +1,10 @@ # ContainerPanel -ContainerPanel.ContainerStartOptions.label=Container Start Optionen +ContainerPanel.ContainerStartOptions.label=Container-Startoptionen ContainerPanel.ContainerStartOptions.tooltip=Bitte die Container Start Optionen angeben (Port, Name, Env,...) -ContainerPanel.Label.ImageName.text=Image Name +ContainerPanel.Label.ImageName.text=Image-Name ContainerPanel.Constraint.NoEmptyDockerfile.text=Es muss ein Dockerfile angegeben werden! +ContainerPanel.ContainerRunCommand.label=Container-Startbefehl +ContainerPanel.ContainerRunCommand.tooltip=Geben Sie das Programm und Argumente für docker run an. -# UNUSED -ImageDetails.Constraint.NoEmptyName.text=Es muss ein Name angegeben werden! -ImageDetails.Constraint.NoEmptyRunOptions.text=Keine Container Start Optionen angegeben! -ContainerPanel.ContainerRunCommand.label="Container Run Befehl" +ContainerPanel.Label.ContainerImageType.text=Container-Image-Typ diff --git a/dozentenmodul/src/main/properties/i18n/panel_tr_TR.properties b/dozentenmodul/src/main/properties/i18n/panel_tr_TR.properties index 09416eef..e371bb01 100644 --- a/dozentenmodul/src/main/properties/i18n/panel_tr_TR.properties +++ b/dozentenmodul/src/main/properties/i18n/panel_tr_TR.properties @@ -1,10 +1,6 @@ # ContainerPanel -ContainerPanel.ContainerStartOptions.label=Container ba?latma seçenekleri -ContainerPanel.ContainerStartOptions.tooltip=Lütfen container ba?latma seçeneklerini girin (Port, Name, Env,...) -ContainerPanel.Label.ImageName.text=Görüntü ad? +ContainerPanel.ContainerStartOptions.label=Container ba?latma se�enekleri +ContainerPanel.ContainerStartOptions.tooltip=L�tfen container ba?latma se�eneklerini girin (Port, Name, Env,...) +ContainerPanel.Label.ImageName.text=G�r�nt� ad? ContainerPanel.Constraint.NoEmptyDockerfile.text=Dockerfile bo? b?rak?lamaz! - -# UNUSED -ImageDetails.Constraint.NoEmptyName.text=Görüntü ad? bo? b?rak?lamaz! -ImageDetails.Constraint.NoEmptyRunOptions.text=Container ba?latma seçenekleri girilmedi! -- cgit v1.2.3-55-g7522