From fcbae54b12b0ad005ca343bb777a6f6373d28c1f Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Mon, 26 Oct 2020 13:12:38 +0100 Subject: [client] refactoring - rename ContainerDescription to ContainerRecipe - ... --- .../java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java | 10 +++++----- .../dozmod/gui/window/layout/ImageDetailsWindowLayout.java | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') 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 b6cb1050..e12506e1 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 @@ -627,7 +627,7 @@ import org.openslx.util.Util; ContainerDefinition conDev = new ContainerDefinition(); - conDev.setDescription(txtContainerDescription.getText()); + conDev.setContainerRecipe(txtContainerRecipe.getText()); conDev.getContainerMeta().setImageName(txtContainerImageName.getText()); conDev.getContainerMeta().setRunOptions(txtContainerRun.getText()); @@ -815,11 +815,11 @@ import org.openslx.util.Util; switch (method) { case FILE: - txtContainerDescription.setText(containerDefinition.getDescription()); + txtContainerRecipe.setText(containerDefinition.getDescription()); break; case GIT_REPOSITORY: - txtContainerDescription.setText(containerMeta.getBuildContextUrl()); - txtContainerDescription.setEnabled(false); + txtContainerRecipe.setText(containerMeta.getBuildContextUrl()); + txtContainerRecipe.setEnabled(false); break; } @@ -827,7 +827,7 @@ import org.openslx.util.Util; txtContainerRun.setText(containerMeta.getRunOptions()); bindMountTable.setData(containerMeta.getBindMountConfig(), true); - changeMonitor.add(txtContainerDescription). + changeMonitor.add(txtContainerRecipe). addConstraint(new TextNotEmptyConstraint("Empty Dockerfile not allowed!")); changeMonitor.add(txtContainerImageName) .addConstraint(new TextNotEmptyConstraint("Empty Name not allowed!")); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java index c1df6867..29d19778 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java @@ -38,7 +38,7 @@ import org.openslx.thrifthelper.Comparators; protected final JTextArea txtDescription; private final JPanel pnlTabContainer; - protected final JTextArea txtContainerDescription; + protected final JTextArea txtContainerRecipe; protected final JTextField txtContainerRun; protected final JTextField txtContainerImageName; protected final ContainerBindMountTable bindMountTable; @@ -281,8 +281,8 @@ import org.openslx.thrifthelper.Comparators; * ********************************************************************************/ pnlTabContainer = new JPanel(); - txtContainerDescription = new JTextArea(); - JScrollPane scrollableTextArea = new JScrollPane(txtContainerDescription); + txtContainerRecipe = new JTextArea(); + JScrollPane scrollableTextArea = new JScrollPane(txtContainerRecipe); JPanel pnlContainerMeta = new JPanel(); GridManager grdContainerMeta = new GridManager(pnlContainerMeta, 3, false, new Insets(8, 2, 8, 2)); -- cgit v1.2.3-55-g7522 From e190c59074b679a53c12338796f30c36772eec9d Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Mon, 26 Oct 2020 17:33:30 +0100 Subject: [client] update ImageDetailsWindow for Container - update the height for the ContainerRecipe Textarea and the ContainerBindMountConfig - ContainerBindMount can now updatet in the ImageDetailsWindow --- .../ContainerBindMountConfigurator.java | 98 ++++++++++++++++++++++ .../dozmod/gui/window/ImageDetailsWindow.java | 4 +- .../window/layout/ImageDetailsWindowLayout.java | 53 ++++-------- 3 files changed, 117 insertions(+), 38 deletions(-) create mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java new file mode 100644 index 00000000..c337dc03 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java @@ -0,0 +1,98 @@ +package org.openslx.dozmod.gui.configurator; + +import org.apache.log4j.Logger; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; +import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; +import org.openslx.dozmod.gui.control.table.QScrollPane; +import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.window.ContainerBindMountWindow; +import org.openslx.dozmod.model.ContainerBindMount; + +import javax.swing.*; +import javax.swing.event.ChangeListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +public class ContainerBindMountConfigurator extends JPanel implements GenericControlWindow> { + private final Logger LOGGER = Logger.getLogger(ContainerBindMountConfigurator.class); + + private final ContainerBindMountTable bindMountTable; + + public ContainerBindMountConfigurator() { + super(); + + GridManager grid = new GridManager(this,3); + bindMountTable = new ContainerBindMountTable(); + QScrollPane scrollPaneTable = new QScrollPane(bindMountTable); + scrollPaneTable.setMinimumSize(Gui.getScaledDimension(0, 70)); + scrollPaneTable.setPreferredSize(Gui.getScaledDimension(0, 70)); + grid.add(scrollPaneTable, 3).fill(true, true).expand(true, true); + grid.nextRow(); + + JButton btnAddBindMount = new JButton("Add Bind Mount"); + JButton btnDelBindMount = new JButton("Remove Bind Mount"); + grid.add(Box.createHorizontalBox()).fill(true, false).expand(true, false); + grid.add(btnAddBindMount); + grid.add(btnDelBindMount); + grid.nextRow(); + grid.finish(true); + + btnAddBindMount.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + addBindMount(); + } + }); + btnDelBindMount.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + deleteBindMount(); + } + }); + } + + private void addBindMount() { + ContainerBindMountWindow.open(SwingUtilities.getWindowAncestor(this), bindMountTable); + fireUserChangeEvent(); + } + + private void deleteBindMount() { + if (null == bindMountTable.getSelectedItem()) + return; + List data = new ArrayList<>(bindMountTable.getData()); + if (data.remove(bindMountTable.getSelectedItem())) + LOGGER.info("Bind Mount Entry Deleted"); + bindMountTable.setData(data, true); + fireUserChangeEvent(); + } + + public void setData(List bindMountConfig, boolean sort) { + bindMountTable.setData(bindMountConfig, sort); + } + + public List getData() { + return bindMountTable.getData(); + } + + + /* ################################ + For dialog change monitor + ################################### */ + + @Override public List getState() { + return bindMountTable.getData(); + } + + void fireUserChangeEvent() { + for (ChangeListener cl : listeners) { + cl.stateChanged(null); + } + } + + private final List listeners = new ArrayList<>(1); + + @Override public void addChangeListener(ChangeListener l) { + listeners.add(l); + } +} 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 e12506e1..8dd97bda 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 @@ -631,6 +631,7 @@ import org.openslx.util.Util; conDev.getContainerMeta().setImageName(txtContainerImageName.getText()); conDev.getContainerMeta().setRunOptions(txtContainerRun.getText()); + conDev.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData()); if (!conDev.equals(containerDefinition)) { uploadContainerDef(image.versions.get(0).versionId, conDev.toByteBuffer()); @@ -825,7 +826,7 @@ import org.openslx.util.Util; txtContainerImageName.setText(containerMeta.getImageName()); txtContainerRun.setText(containerMeta.getRunOptions()); - bindMountTable.setData(containerMeta.getBindMountConfig(), true); + bindMountConfigurator.setData(containerMeta.getBindMountConfig(), true); changeMonitor.add(txtContainerRecipe). addConstraint(new TextNotEmptyConstraint("Empty Dockerfile not allowed!")); @@ -833,6 +834,7 @@ import org.openslx.util.Util; .addConstraint(new TextNotEmptyConstraint("Empty Name not allowed!")); changeMonitor.add(txtContainerRun) .addConstraint(new TextNotEmptyConstraint("No Container Run Options provided!")); + changeMonitor.add(bindMountConfigurator); } // fill share mode combo, if not already done diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java index 29d19778..73e981c8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java @@ -1,24 +1,9 @@ package org.openslx.dozmod.gui.window.layout; -import java.awt.*; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; -import javax.swing.JTextArea; -import javax.swing.JTextField; - import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.bwlp.thrift.iface.ShareMode; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.configurator.ContainerBindMountConfigurator; import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator; import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; @@ -30,6 +15,9 @@ import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.thrifthelper.Comparators; +import javax.swing.*; +import java.awt.*; + @SuppressWarnings("serial") public abstract class ImageDetailsWindowLayout extends JDialog { private static final int ICON_SIZE_Y = 24; @@ -41,9 +29,7 @@ import org.openslx.thrifthelper.Comparators; protected final JTextArea txtContainerRecipe; protected final JTextField txtContainerRun; protected final JTextField txtContainerImageName; - protected final ContainerBindMountTable bindMountTable; - protected final JButton btnAddBindMount; - protected final JButton btnDelBindMount; + protected ContainerBindMountConfigurator bindMountConfigurator; protected QLabel lblError; protected final PersonLabel lblOwner; @@ -283,39 +269,32 @@ import org.openslx.thrifthelper.Comparators; pnlTabContainer = new JPanel(); txtContainerRecipe = new JTextArea(); JScrollPane scrollableTextArea = new JScrollPane(txtContainerRecipe); + scrollableTextArea.setMinimumSize(Gui.getScaledDimension(0, 200)); + scrollableTextArea.setPreferredSize(Gui.getScaledDimension(0, 200)); JPanel pnlContainerMeta = new JPanel(); - GridManager grdContainerMeta = new GridManager(pnlContainerMeta, 3, false, new Insets(8, 2, 8, 2)); + GridManager grdContainerMeta = new GridManager(pnlContainerMeta, 3); grdContainerMeta.add(new QLabel("Image Name")); txtContainerImageName = new JTextField(); txtContainerImageName.setDocument(txtTitle.getDocument()); - grdContainerMeta.add(txtContainerImageName, 2).fill(true, false); + grdContainerMeta.add(txtContainerImageName, 2).fill(true, false).expand(true, false); grdContainerMeta.nextRow(); grdContainerMeta.add(new QLabel("Container Run Options")); txtContainerRun = new JTextField(); - grdContainerMeta.add(txtContainerRun, 2).fill(true, false); - grdContainerMeta.nextRow(); - - bindMountTable = new ContainerBindMountTable(); - QScrollPane scrollPaneTable = new QScrollPane(bindMountTable); - grdContainerMeta.add(scrollPaneTable, 3).fill(true, true).expand(true, true); + grdContainerMeta.add(txtContainerRun, 2).fill(true, false).expand(true, false); grdContainerMeta.nextRow(); - btnAddBindMount = new JButton("Add Bind Mount"); - btnDelBindMount = new JButton("Remove Bind Mount"); - grdContainerMeta.add(Box.createHorizontalBox(), 1).fill(true, false).expand(true, false); - grdContainerMeta.add(btnAddBindMount); - grdContainerMeta.add(btnDelBindMount); - grdContainerMeta.nextRow(); + bindMountConfigurator = new ContainerBindMountConfigurator(); + grdContainerMeta.add(bindMountConfigurator,3).fill(true,true).expand(true,true); grdContainerMeta.finish(true); - GridManager grdContainer = new GridManager(pnlTabContainer, 1, false, new Insets(8, 2, 8, 2)); + GridManager grdContainer = new GridManager(pnlTabContainer, 1,false, new Insets(8, 2, 8, 2)); grdContainer.add(scrollableTextArea, 1).fill(true, true).expand(true, true); - grdContainer.add(pnlContainerMeta, 1).fill(true, false).anchor(GridBagConstraints.FIRST_LINE_START); - grdContainer.add(Box.createVerticalGlue()).fill(true, true); - grdContainer.finish(false); + grdContainer.add(pnlContainerMeta, 1).fill(true, true).expand(true, true); + //grdContainer.add(Box.createVerticalGlue()).fill(true, true).expand(true,true); + grdContainer.finish(true); -- cgit v1.2.3-55-g7522 From 7f4c8667f9855a6ad0a7c8e0bb08f567c22f20d6 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Tue, 27 Oct 2020 15:05:07 +0100 Subject: [client] refactoring - rename DockerfileUploadPage to ContainerUploadPage - use now ContainerBindMountConfigurator in ContainerUploadPage and -Layout --- .../dozmod/gui/wizard/ImageCreationWizard.java | 2 +- .../dozmod/gui/wizard/ImageUpdateWizard.java | 4 +- .../wizard/layout/ContainerUploadPageLayout.java | 29 +- .../gui/wizard/page/ContainerUploadPage.java | 288 +++++++++++++++++++ .../gui/wizard/page/DockerfileUploadPage.java | 309 --------------------- 5 files changed, 296 insertions(+), 336 deletions(-) create mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java delete mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/DockerfileUploadPage.java (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java index 349f555a..ea5a3c7a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java @@ -66,7 +66,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif public void doDockerCreation() { cleanCurrent(); - currentPages.add(new DockerfileUploadPage(this,state)); + currentPages.add(new ContainerUploadPage(this,state)); currentPages.add(new ImageMetaDataPage(this,state)); currentPages.add(new ImageCustomPermissionPage(this, state)); addPages(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java index 8152b019..96305128 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java @@ -10,7 +10,7 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.gui.helper.UiFeedback; -import org.openslx.dozmod.gui.wizard.page.DockerfileUploadPage; +import org.openslx.dozmod.gui.wizard.page.ContainerUploadPage; import org.openslx.dozmod.gui.wizard.page.ImageUploadPage; import org.openslx.dozmod.gui.wizard.page.ImageUploadSummaryPage; import org.openslx.dozmod.state.UploadWizardState; @@ -34,7 +34,7 @@ public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotific // TODO allow user to update the plain dockerfile switch (image.virtId){ case TConst.VIRT_DOCKER: - addPage(new DockerfileUploadPage(this,state, image)); + addPage(new ContainerUploadPage(this,state, image)); break; case TConst.VIRT_QEMU: case TConst.VIRT_VIRTUALBOX: 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 df9e99fc..e0efde7f 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 @@ -1,8 +1,7 @@ package org.openslx.dozmod.gui.wizard.layout; +import org.openslx.dozmod.gui.configurator.ContainerBindMountConfigurator; import org.openslx.dozmod.gui.control.QLabel; -import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; -import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; @@ -10,7 +9,7 @@ import org.openslx.dozmod.model.ContainerBuildContextMethod; import javax.swing.*; import java.awt.*; -import java.awt.event.*; +import java.awt.event.KeyEvent; public class ContainerUploadPageLayout extends WizardPage { @@ -27,11 +26,7 @@ public class ContainerUploadPageLayout extends WizardPage { protected final JTabbedPane tpInput; protected final JTextField txtGitRepo; - protected final ContainerBindMountTable bindMountTable; - protected final JButton btnAddBindMount; - protected final JButton btnDelBindMount; - - + protected ContainerBindMountConfigurator bindMountConfigurator; // TODO set proper Text labels @@ -72,17 +67,9 @@ public class ContainerUploadPageLayout extends WizardPage { g2.add(txtGitRepo).fill(true, false).expand(true, false); g2.finish(false); - JPanel p3 = new JPanel(); - p3.setVisible(false); - GridManager g3 = new GridManager(p3, 3, true, new Insets(5, 0, 5, 0)); - QLabel tmp = new QLabel("DUMMY"); - g3.add(tmp).fill(true, false).expand(true, false); - g3.finish(false); - tpInput = new JTabbedPane(); tpInput.addTab("Dockerfile", p1); tpInput.addTab("Git Repository", p2); - // tpInput.addTab("Simple Input", p3); tpInput.setSelectedIndex(ContainerBuildContextMethod.FILE.ordinal()); grid.add(tpInput, 3).fill(true, false); @@ -110,15 +97,9 @@ public class ContainerUploadPageLayout extends WizardPage { grid.add(txtContainerRun, 2, 1).fill(true, false).expand(true, false); grid.nextRow(); - bindMountTable = new ContainerBindMountTable(); - QScrollPane jsp = new QScrollPane(bindMountTable); - grid.add(jsp, 3).fill(true, true).expand(true, true); + bindMountConfigurator = new ContainerBindMountConfigurator(); + grid.add(bindMountConfigurator, 3).fill(true, true).expand(true, true); grid.nextRow(); - btnAddBindMount = new JButton("Add Bind Mount"); - btnDelBindMount = new JButton("Remove Bind Mount"); - grid.add(Box.createHorizontalBox(), 1).fill(true, false).expand(true, false); - grid.add(btnAddBindMount); - grid.add(btnDelBindMount); //grid.add(Box.createVerticalGlue(), 3).expand(true, true); txtInfoText = new JTextArea(); 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 new file mode 100644 index 00000000..9004a957 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java @@ -0,0 +1,288 @@ +package org.openslx.dozmod.gui.wizard.page; + +import org.apache.commons.io.FileUtils; +import org.apache.log4j.Logger; +import org.openslx.bwlp.thrift.iface.ImageDetailsRead; +import org.openslx.dozmod.Config; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.MessageType; +import org.openslx.dozmod.gui.helper.QFileChooser; +import org.openslx.dozmod.gui.helper.TextChangeListener; +import org.openslx.dozmod.gui.wizard.Wizard; +import org.openslx.dozmod.gui.wizard.layout.ContainerUploadPageLayout; +import org.openslx.dozmod.model.ContainerBuildContextMethod; +import org.openslx.dozmod.model.ContainerDefinition; +import org.openslx.dozmod.model.ContainerMeta; +import org.openslx.dozmod.state.UploadWizardState; +import org.openslx.dozmod.thrift.ThriftActions; +import org.openslx.dozmod.thrift.ThriftError; +import org.openslx.dozmod.thrift.UploadInitiator; +import org.openslx.dozmod.thrift.WrappedException; +import org.openslx.dozmod.thrift.cache.MetaDataCache; +import org.openslx.util.vm.DockerMetaDataDummy; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.filechooser.FileFilter; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; + +public class ContainerUploadPage extends ContainerUploadPageLayout { + + private final Logger LOGGER = Logger.getLogger(ContainerUploadPage.class); + + /** + * Page for uploading an imagefile + * + * @param wizard + */ + private final UploadWizardState state; + private final ImageDetailsRead existingImage; + + public ContainerUploadPage(Wizard wizard, final UploadWizardState state_) { + super(wizard); + + canComeBack = false; + state = state_; + existingImage = null; + + // HACK set dummy os + state.selectedOs = MetaDataCache.getOsById(18); + + init(); + } + + public ContainerUploadPage(Wizard wizard, UploadWizardState uploadWizardState, + ImageDetailsRead imageDetailsRead) { + super(wizard); + + state = uploadWizardState; + existingImage = imageDetailsRead; + + lblImageName.setEnabled(existingImage == null); + txtImageName.setEnabled(existingImage == null); + txtInfoText.setVisible(existingImage == null); + + state.name = imageDetailsRead.imageName; + state.defaultPermissions = imageDetailsRead.getDefaultPermissions(); + state.description = imageDetailsRead.getDescription(); + state.detectedOs = MetaDataCache.getOsById(imageDetailsRead.getOsId()); + state.selectedOs = MetaDataCache.getOsById(imageDetailsRead.getOsId()); + state.tags = imageDetailsRead.getTags(); + state.defaultPermissions = imageDetailsRead.getUserPermissions(); + + state.uuid = imageDetailsRead.getImageBaseId(); + init(); + } + + private void init() { + this.txtImageFile.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + browseFile(); + } + }); + this.btnBrowseForImage.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + browseFile(); + } + }); + + txtImageName.getDocument().addDocumentListener(new TextChangeListener() { + @Override public void changed() { + reactOnUserInput(); + } + }); + txtContainerRun.getDocument().addDocumentListener(new TextChangeListener() { + @Override public void changed() { + reactOnUserInput(); + } + }); + + tpInput.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent e) { + reactOnUserInput(); + } + }); + + txtGitRepo.getDocument().addDocumentListener(new TextChangeListener() { + @Override public void changed() { + reactOnUserInput(); + } + }); + + btnBrowseForImage.requestFocus(); + txtInfoText.setText("Many Text"); + } + + private void browseFile() { + + QFileChooser fc = new QFileChooser(Config.getUploadPath(), false); + fc.setAcceptAllFileFilterUsed(false); + fc.addChoosableFileFilter(new DockerfileFilter()); + + // TODO add Feature for MULTIPLE_HYPERVISORS + + int action = fc.showOpenDialog(getDialog()); + File file = fc.getSelectedFile(); + + if (action != JFileChooser.APPROVE_OPTION || file == null) + return; + + txtImageFile.setText(file.getAbsolutePath()); + + if (existingImage == null) + txtImageName.setText(file.getParentFile().getName()); + else + txtImageName.setText(existingImage.getImageName()); + + state.descriptionFile = file; + // TESTING: Upload also a prematurely created image (tar) + String imageName = file.getParentFile().getName(); + File imageTarFile = new File(file.getParentFile(), imageName.concat(".tar")); + if (imageTarFile.exists()) { + LOGGER.info("Upload also an created Image"); + state.diskFile = imageTarFile; + } else { + state.diskFile = getDummyFile(); + } + + Config.setUploadPath(file.getParent()); + reactOnUserInput(); + } + + private File getDummyFile() { + String configDir = Config.getPath(); + File zeroFile = new File(configDir, "ZERO-FILE"); + // create a temp file with dummy content, + // because vmchooser relies on an existing image after choosing a lecture. + // TODO change behavior in vmchooser to allow start lectures without images. + try { + if (!zeroFile.exists()) { + zeroFile.createNewFile(); + FileUtils.writeStringToFile(zeroFile, "ZERO\n", "UTF-8"); + } + } catch (IOException e) { + e.printStackTrace(); + LOGGER.error("Could not create a dummy file.", e); + } + LOGGER.info("Use dummy file"); + return zeroFile; + } + + private void reactOnUserInput() { + boolean completed = checkUserInput(); + if (completed) + setDescription("Container definition finished"); + setPageComplete(completed); + } + + private boolean checkUserInput() { + ContainerBuildContextMethod method = getBuildContextMethod(); + + switch (method) { + case FILE: + if (txtImageFile.getText() == null || txtImageFile.getText().isEmpty()) { + setWarningMessage("No Container Recipe provided!"); + return false; + } + break; + case GIT_REPOSITORY: + if (txtGitRepo.getText() == null || txtGitRepo.getText().isEmpty()) { + setWarningMessage("No Git Repository provided!"); + return false; + } + break; + } + + if (txtImageName.getText() == null || txtImageName.getText().isEmpty()) { + setWarningMessage("Set proper Image Name"); + return false; + } + + if (txtContainerRun.getText() == null || txtContainerRun.getText().isEmpty()) { + setWarningMessage("set container run options"); + return false; + } + return true; + } + + private DockerMetaDataDummy createVmMeta() { + + ContainerDefinition cd = null; + ContainerMeta containerMeta = new ContainerMeta(); + containerMeta.setBuildContextMethod(getBuildContextMethod().ordinal()); + containerMeta.setImageName(txtImageName.getText()); + containerMeta.setRunOptions(txtContainerRun.getText()); + containerMeta.setBindMountConfig(bindMountConfigurator.getData()); + switch (getBuildContextMethod()) { + case FILE: + cd = new ContainerDefinition(state.descriptionFile, containerMeta); + break; + case GIT_REPOSITORY: + containerMeta.setBuildContextUrl(txtGitRepo.getText()); + cd = new ContainerDefinition(containerMeta); + state.diskFile = getDummyFile(); + state.descriptionFile = getDummyFile(); + break; + } + return cd.createVmMeta(); + } + + @Override protected boolean wantNextOrFinish() { + // are we creating a new image? then either: + // get the image name either auto filled by VmwareMetaData or by user + // get the image name from the image we are uploading a new version of + state.name = existingImage != null ? existingImage.getImageName() : txtImageName.getText(); + state.meta = createVmMeta(); + + // -- create image to get uuid -- + if (existingImage == null) { + if (state.uuid == null) { + state.uuid = ThriftActions.createImage(JOptionPane.getFrameForComponent(this), state.name); + if (state.uuid == null) + return false; + txtImageName.setEnabled(false); + btnBrowseForImage.setEnabled(false); + txtImageFile.setEnabled(false); + } + } else { + state.uuid = existingImage.getImageBaseId(); + } + // Create upload initiator that will manage requesting a token, hashing the + // file, connecting for upload... + if (state.upload == null) { + try { + state.upload = new UploadInitiator(state.uuid, state.diskFile, + state.meta.getFilteredDefinition()); + } catch (WrappedException e) { + ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); + return false; + } catch (IOException e) { + Gui.showMessageBox(this, "Upload-Initialisierung fehlgeschlagen", MessageType.ERROR, LOGGER, + e); + return false; + } + } + // Start the hash check now + state.upload.startHashing(); + return true; + } + + private static class DockerfileFilter extends FileFilter { + + @Override public boolean accept(File f) { + + boolean accept = true; + if (f.isFile() && !f.getName().equals("dockerfile")) + accept = false; + return accept; + } + + @Override public String getDescription() { + return "Dockerfile"; + } + } +} diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/DockerfileUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/DockerfileUploadPage.java deleted file mode 100644 index 9eaf5cf6..00000000 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/DockerfileUploadPage.java +++ /dev/null @@ -1,309 +0,0 @@ -package org.openslx.dozmod.gui.wizard.page; - -import org.apache.commons.io.FileUtils; -import org.apache.log4j.Logger; -import org.openslx.bwlp.thrift.iface.ImageDetailsRead; -import org.openslx.dozmod.Config; -import org.openslx.dozmod.gui.Gui; -import org.openslx.dozmod.gui.helper.*; -import org.openslx.dozmod.gui.window.ContainerBindMountWindow; -import org.openslx.dozmod.gui.wizard.Wizard; -import org.openslx.dozmod.gui.wizard.layout.ContainerUploadPageLayout; -import org.openslx.dozmod.model.ContainerBindMount; -import org.openslx.dozmod.model.ContainerBuildContextMethod; -import org.openslx.dozmod.model.ContainerDefinition; -import org.openslx.dozmod.model.ContainerMeta; -import org.openslx.dozmod.state.UploadWizardState; -import org.openslx.dozmod.thrift.*; -import org.openslx.dozmod.thrift.cache.MetaDataCache; -import org.openslx.util.vm.DockerMetaDataDummy; - -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.filechooser.FileFilter; -import java.awt.event.*; -import java.io.*; -import java.util.ArrayList; -import java.util.List; - -public class DockerfileUploadPage extends ContainerUploadPageLayout { - - private final Logger LOGGER = Logger.getLogger(DockerfileUploadPage.class); - - /** - * Page for uploading an imagefile - * - * @param wizard - */ - private final UploadWizardState state; - private final ImageDetailsRead existingImage; - - public DockerfileUploadPage(Wizard wizard, final UploadWizardState state_) { - super(wizard); - - canComeBack = false; - state = state_; - existingImage = null; - - // HACK set dummy os - state.selectedOs = MetaDataCache.getOsById(18); - - init(); - } - - public DockerfileUploadPage(Wizard wizard, UploadWizardState uploadWizardState, - ImageDetailsRead imageDetailsRead) { - super(wizard); - - state = uploadWizardState; - existingImage = imageDetailsRead; - - lblImageName.setEnabled(existingImage == null); - txtImageName.setEnabled(existingImage == null); - txtInfoText.setVisible(existingImage == null); - - state.name = imageDetailsRead.imageName; - state.defaultPermissions = imageDetailsRead.getDefaultPermissions(); - state.description = imageDetailsRead.getDescription(); - state.detectedOs = MetaDataCache.getOsById(imageDetailsRead.getOsId()); - state.selectedOs = MetaDataCache.getOsById(imageDetailsRead.getOsId()); - state.tags = imageDetailsRead.getTags(); - state.defaultPermissions = imageDetailsRead.getUserPermissions(); - - state.uuid = imageDetailsRead.getImageBaseId(); - init(); - } - - private void init() { - this.txtImageFile.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { - browseFile(); - } - }); - this.btnBrowseForImage.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { - browseFile(); - } - }); - - txtImageName.getDocument().addDocumentListener(new TextChangeListener() { - @Override public void changed() { - reactOnUserInput(); - } - }); - txtContainerRun.getDocument().addDocumentListener(new TextChangeListener() { - @Override public void changed() { - reactOnUserInput(); - } - }); - - tpInput.addChangeListener(new ChangeListener() { - @Override public void stateChanged(ChangeEvent e) { - reactOnUserInput(); - } - }); - - txtGitRepo.getDocument().addDocumentListener(new TextChangeListener() { - @Override public void changed() { - reactOnUserInput(); - } - }); - - btnAddBindMount.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { - addBindMount(); - } - }); - btnDelBindMount.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { - btnDelBindMount(); - } - }); - - btnBrowseForImage.requestFocus(); - txtInfoText.setText("Many Text"); - } - - private void addBindMount() { - ContainerBindMountWindow.open(wizard, bindMountTable); - } - - private void btnDelBindMount() { - if (null == bindMountTable.getSelectedItem()) - return; - List data = new ArrayList<>(bindMountTable.getData()); - if (data.remove(bindMountTable.getSelectedItem())) - LOGGER.info("Bind Mount Entry Deleted"); - bindMountTable.setData(data, true); - } - - private void browseFile() { - - QFileChooser fc = new QFileChooser(Config.getUploadPath(), false); - fc.setAcceptAllFileFilterUsed(false); - fc.addChoosableFileFilter(new DockerfileFilter()); - - // TODO add Feature for MULTIPLE_HYPERVISORS - - int action = fc.showOpenDialog(getDialog()); - File file = fc.getSelectedFile(); - - if (action != JFileChooser.APPROVE_OPTION || file == null) - return; - - txtImageFile.setText(file.getAbsolutePath()); - - if (existingImage == null) - txtImageName.setText(file.getParentFile().getName()); - else - txtImageName.setText(existingImage.getImageName()); - - state.descriptionFile = file; - // TESTING: Upload also a prematurely created image (tar) - String imageName = file.getParentFile().getName(); - File imageTarFile = new File(file.getParentFile(), imageName.concat(".tar")); - if (imageTarFile.exists()) { - LOGGER.info("Upload also an created Image"); - state.diskFile = imageTarFile; - } else { - state.diskFile = getDummyFile(); - } - - Config.setUploadPath(file.getParent()); - reactOnUserInput(); - } - - private File getDummyFile() { - String configDir = Config.getPath(); - File zeroFile = new File(configDir, "ZERO-FILE"); - // create a temp file with dummy content, - // because vmchooser relies on an existing image after choosing a lecture. - // TODO change behavior in vmchooser to allow start lectures without images. - try { - if (!zeroFile.exists()) { - zeroFile.createNewFile(); - FileUtils.writeStringToFile(zeroFile, "ZERO\n", "UTF-8"); - } - } catch (IOException e) { - e.printStackTrace(); - LOGGER.error("Could not create a dummy file.", e); - } - LOGGER.info("Use dummy file"); - return zeroFile; - } - - private void reactOnUserInput() { - boolean completed = checkUserInput(); - if (completed) - setDescription("Container definition finished"); - setPageComplete(completed); - } - - private boolean checkUserInput() { - ContainerBuildContextMethod method = getBuildContextMethod(); - - switch (method) { - case FILE: - if (txtImageFile.getText() == null || txtImageFile.getText().isEmpty()) { - setWarningMessage("No Container Recipe provided!"); - return false; - } - break; - case GIT_REPOSITORY: - if (txtGitRepo.getText() == null || txtGitRepo.getText().isEmpty()) { - setWarningMessage("No Git Repository provided!"); - return false; - } - break; - } - - if (txtImageName.getText() == null || txtImageName.getText().isEmpty()) { - setWarningMessage("Set proper Image Name"); - return false; - } - - if (txtContainerRun.getText() == null || txtContainerRun.getText().isEmpty()) { - setWarningMessage("set container run options"); - return false; - } - return true; - } - - private DockerMetaDataDummy createVmMeta() { - - ContainerDefinition cd = null; - ContainerMeta containerMeta = new ContainerMeta(); - containerMeta.setBuildContextMethod(getBuildContextMethod().ordinal()); - containerMeta.setImageName(txtImageName.getText()); - containerMeta.setRunOptions(txtContainerRun.getText()); - containerMeta.setBindMountConfig(bindMountTable.getData()); - switch (getBuildContextMethod()) { - case FILE: - cd = new ContainerDefinition(state.descriptionFile, containerMeta); - break; - case GIT_REPOSITORY: - containerMeta.setBuildContextUrl(txtGitRepo.getText()); - cd = new ContainerDefinition(containerMeta); - state.diskFile = getDummyFile(); - state.descriptionFile = getDummyFile(); - break; - } - return cd.createVmMeta(); - } - - @Override protected boolean wantNextOrFinish() { - // are we creating a new image? then either: - // get the image name either auto filled by VmwareMetaData or by user - // get the image name from the image we are uploading a new version of - state.name = existingImage != null ? existingImage.getImageName() : txtImageName.getText(); - state.meta = createVmMeta(); - - // -- create image to get uuid -- - if (existingImage == null) { - if (state.uuid == null) { - state.uuid = ThriftActions.createImage(JOptionPane.getFrameForComponent(this), state.name); - if (state.uuid == null) - return false; - txtImageName.setEnabled(false); - btnBrowseForImage.setEnabled(false); - txtImageFile.setEnabled(false); - } - } else { - state.uuid = existingImage.getImageBaseId(); - } - // Create upload initiator that will manage requesting a token, hashing the - // file, connecting for upload... - if (state.upload == null) { - try { - state.upload = new UploadInitiator(state.uuid, state.diskFile, - state.meta.getFilteredDefinition()); - } catch (WrappedException e) { - ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); - return false; - } catch (IOException e) { - Gui.showMessageBox(this, "Upload-Initialisierung fehlgeschlagen", MessageType.ERROR, LOGGER, - e); - return false; - } - } - // Start the hash check now - state.upload.startHashing(); - return true; - } - - private static class DockerfileFilter extends FileFilter { - - @Override public boolean accept(File f) { - - boolean accept = true; - if (f.isFile() && !f.getName().equals("dockerfile")) - accept = false; - return accept; - } - - @Override public String getDescription() { - return "Dockerfile"; - } - } -} -- cgit v1.2.3-55-g7522 From cf91780da6f3b28401c18ad66e8a01337261c092 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Wed, 4 Nov 2020 12:32:57 +0100 Subject: [client] FIX image update - add copy contructor to ContainerDefinition, ContainerMeta, ContainerBindMount --- .../dozmod/gui/window/ImageDetailsWindow.java | 61 ++++++++++------------ .../openslx/dozmod/model/ContainerBindMount.java | 6 +++ .../openslx/dozmod/model/ContainerDefinition.java | 13 ++++- .../org/openslx/dozmod/model/ContainerMeta.java | 12 ++++- 4 files changed, 55 insertions(+), 37 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') 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 8dd97bda..1d769089 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 @@ -1,40 +1,16 @@ package org.openslx.dozmod.gui.window; -import java.awt.*; -import java.awt.event.*; -import java.nio.ByteBuffer; -import java.util.*; -import java.util.List; - -import javax.swing.AbstractAction; -import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; - import org.apache.log4j.Logger; 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.ImageSummaryRead; -import org.openslx.bwlp.thrift.iface.ImageVersionDetails; -import org.openslx.bwlp.thrift.iface.LectureSummary; -import org.openslx.bwlp.thrift.iface.OperatingSystem; -import org.openslx.bwlp.thrift.iface.ShareMode; -import org.openslx.bwlp.thrift.iface.UserInfo; -import org.openslx.bwlp.thrift.iface.Virtualizer; +import org.openslx.bwlp.thrift.iface.*; import org.openslx.dozmod.Branding; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.changemonitor.AbstractControlWrapper; import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.TextNotEmptyConstraint; -import org.openslx.dozmod.gui.helper.*; import org.openslx.dozmod.gui.helper.PopupMenu; +import org.openslx.dozmod.gui.helper.*; import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback; import org.openslx.dozmod.gui.window.layout.ImageDetailsWindowLayout; import org.openslx.dozmod.gui.wizard.ImageUpdateWizard; @@ -63,6 +39,13 @@ import org.openslx.util.QuickTimer.Task; import org.openslx.util.ThriftUtil; import org.openslx.util.Util; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.nio.ByteBuffer; +import java.util.List; +import java.util.*; + /** * Window for displaying and editing the details of an image. */ @@ -623,18 +606,28 @@ import org.openslx.util.Util; return true; } + /** + * If the user make changes and saves it this method will be executed. + * It makes a deep copy of the current containerDefinition to get all settings. + * After that, every user setting is set in that copy-object. + * If the copy-object and containerDefinition differ, the new settings will be uploaded. + */ private void saveContainerDefinition() { + // TODO do I really need this check? Maybe just get every setting and upload it. - ContainerDefinition conDev = new ContainerDefinition(); + ContainerDefinition newConDev = new ContainerDefinition(containerDefinition); - conDev.setContainerRecipe(txtContainerRecipe.getText()); + if (newConDev.getBuildContextMethod() == ContainerBuildContextMethod.FILE) { + newConDev.setContainerRecipe(txtContainerRecipe.getText()); + } + // currently no update of the git url allowed - conDev.getContainerMeta().setImageName(txtContainerImageName.getText()); - conDev.getContainerMeta().setRunOptions(txtContainerRun.getText()); - conDev.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData()); + newConDev.getContainerMeta().setImageName(txtContainerImageName.getText()); + newConDev.getContainerMeta().setRunOptions(txtContainerRun.getText()); + newConDev.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData()); - if (!conDev.equals(containerDefinition)) { - uploadContainerDef(image.versions.get(0).versionId, conDev.toByteBuffer()); + if (!newConDev.equals(containerDefinition)) { + uploadContainerDef(image.versions.get(0).versionId, newConDev.toByteBuffer()); LOGGER.info("Upload new DockerDefinition"); } } @@ -816,7 +809,7 @@ import org.openslx.util.Util; switch (method) { case FILE: - txtContainerRecipe.setText(containerDefinition.getDescription()); + txtContainerRecipe.setText(containerDefinition.getContainerRecipe()); break; case GIT_REPOSITORY: txtContainerRecipe.setText(containerMeta.getBuildContextUrl()); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerBindMount.java b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerBindMount.java index 9f6261f0..84449bad 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerBindMount.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerBindMount.java @@ -16,6 +16,12 @@ public class ContainerBindMount { public ContainerBindMount() { } + public ContainerBindMount(String source, String target, String options) { + this.source = source; + this.target = target; + this.options = options; + } + public String getSource() { return source; } 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 c7f96389..a5c24534 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java @@ -28,7 +28,7 @@ public class ContainerDefinition { /** * The file to construct a real container image, could be an dockerfile or a singularity recipe. */ - public String containerRecipe; + public String containerRecipe = ""; /** * Further container information, see {@link ContainerMeta}. @@ -39,6 +39,11 @@ public class ContainerDefinition { containerMeta = new ContainerMeta(); } + public ContainerDefinition(ContainerDefinition containerDef) { + containerRecipe = String.valueOf(containerDef.getContainerRecipe()); + containerMeta = new ContainerMeta(containerDef.getContainerMeta()); + } + public ContainerDefinition(ContainerMeta containerMeta) { this.containerMeta = containerMeta; } @@ -55,7 +60,7 @@ public class ContainerDefinition { this.containerMeta = containerMeta; } - public String getDescription() { + public String getContainerRecipe() { return containerRecipe; } @@ -184,6 +189,10 @@ public class ContainerDefinition { } } + public ContainerBuildContextMethod getBuildContextMethod() { + return ContainerBuildContextMethod.fromInt(containerMeta.getBuildContextMethod()); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerMeta.java b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerMeta.java index c9cbd58e..32818acf 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerMeta.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerMeta.java @@ -14,7 +14,7 @@ public class ContainerMeta { private String build_context_url; private String image_name; private String run_options; - private List bind_mount_config; + private List bind_mount_config = new ArrayList<>(); public ContainerMeta() { @@ -25,6 +25,16 @@ public class ContainerMeta { bind_mount_config = new ArrayList<>(); } + public ContainerMeta(ContainerMeta containerMeta) { + build_context_method = containerMeta.build_context_method; + build_context_url = containerMeta.build_context_url; + image_name = containerMeta.image_name; + run_options = containerMeta.run_options; + for (ContainerBindMount bm : containerMeta.bind_mount_config) + bind_mount_config.add(new ContainerBindMount(bm.getSource(), bm.getTarget(), bm.getOptions())); + + } + public int getBuildContextMethod() { return build_context_method; } -- cgit v1.2.3-55-g7522 From b9c93240a820613df1fd93255d959effd94427c7 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Thu, 5 Nov 2020 14:43:56 +0100 Subject: [client] move BindMountConfigurator to ImageMetaDataPage - move creation of UploadInitiator into ImageCreationWizard (initUpload). --- .../dozmod/gui/wizard/ImageCreationWizard.java | 113 +++++++++++++-------- .../wizard/layout/ContainerUploadPageLayout.java | 11 +- .../gui/wizard/layout/ImageMetaDataPageLayout.java | 9 ++ .../gui/wizard/page/ContainerUploadPage.java | 60 +++-------- .../dozmod/gui/wizard/page/ImageMetaDataPage.java | 20 +++- .../openslx/dozmod/model/ContainerDefinition.java | 4 + 6 files changed, 119 insertions(+), 98 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java index ea5a3c7a..135738d9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java @@ -1,11 +1,5 @@ package org.openslx.dozmod.gui.wizard; -import java.awt.Window; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.JOptionPane; - import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; @@ -15,22 +9,30 @@ import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QuitNotification; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.wizard.page.*; +import org.openslx.dozmod.model.ContainerDefinition; import org.openslx.dozmod.state.UploadWizardState; -import org.openslx.dozmod.thrift.Session; -import org.openslx.dozmod.thrift.ThriftActions; -import org.openslx.dozmod.thrift.ThriftError; +import org.openslx.dozmod.thrift.*; import org.openslx.dozmod.thrift.UploadInitiator.GotUploadTokenCallback; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; +import org.openslx.util.vm.DockerMetaDataDummy; -@SuppressWarnings("serial") -public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotification { +import javax.swing.*; +import java.awt.*; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("serial") public class ImageCreationWizard extends Wizard + implements UiFeedback, QuitNotification { private final static Logger LOGGER = Logger.getLogger(ImageCreationWizard.class); private final UploadWizardState state = new UploadWizardState(); + private ContainerDefinition containerDefinition = new ContainerDefinition(); + private List currentPages = new ArrayList<>(); private boolean baseWritten = false; @@ -38,8 +40,8 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif /** * Wizard for creating or editing an image - * - * @param editExistingImage whether to create new or edit existing image + * + * @param parent whether to create new or edit existing image */ public ImageCreationWizard(Window parent) { super(parent); @@ -55,7 +57,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif cleanCurrent(); currentPages.add(new ImageUploadPage(this, state, null)); - currentPages.add(new ImageMetaDataPage(this, state)); + currentPages.add(new ImageMetaDataPage(this, state, null)); currentPages.add(new ImageCustomPermissionPage(this, state)); addPages(); } @@ -66,32 +68,68 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif public void doDockerCreation() { cleanCurrent(); - currentPages.add(new ContainerUploadPage(this,state)); - currentPages.add(new ImageMetaDataPage(this,state)); + currentPages.add(new ContainerUploadPage(this, state, containerDefinition)); + currentPages.add(new ImageMetaDataPage(this, state, containerDefinition)); currentPages.add(new ImageCustomPermissionPage(this, state)); addPages(); } private void addPages() { - for (WizardPage i:currentPages) { + for (WizardPage i : currentPages) { addPage(i); } } private void cleanCurrent() { - if( !currentPages.isEmpty()) { + if (!currentPages.isEmpty()) { removePages(currentPages); currentPages = new ArrayList(); } } - @Override - public String getWindowTitle() { + @Override public String getWindowTitle() { return "Neue VM erzeugen"; } - @Override - public boolean wantFinish() { + /** + * initUpload will be called after a user finish the creation of a new ContainerDefinition. + * It creates the UploadInitiator with the collected information. + */ + private void initUpload() { + + if (state.uuid == null) { + state.uuid = ThriftActions.createImage(JOptionPane.getFrameForComponent(this), state.name); + if (state.uuid == null) { + // return false; + LOGGER.error("initUpload Failed: Count not get uuid!"); + return; + } + } + + // Create upload initiator that will manage requesting a token, hashing the + // file, connecting for upload... + if (state.upload == null) { + try { + state.upload = new UploadInitiator(state.uuid, state.diskFile, + state.meta.getFilteredDefinition()); + } catch (WrappedException e) { + ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); + // return false; + } catch (IOException e) { + Gui.showMessageBox(this, "Upload-Initialisierung fehlgeschlagen", MessageType.ERROR, LOGGER, + e); + // return false; + } + } + // Start the hash check now + state.upload.startHashing(); + } + + @Override public boolean wantFinish() { + + + if (state.meta instanceof DockerMetaDataDummy) + initUpload(); // since we only started the upload and created a "blank" image entry // we can here do all the sanity checks on the fields of UploadWizardState // and react accordingly. @@ -129,16 +167,15 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif } state.upload.startUpload(new GotUploadTokenCallback() { - @Override - public void fire() { + @Override public void fire() { // push version data try { - ThriftActions.updateImageVersion(state.upload.getToken(), new ImageVersionWrite( - state.isRestricted)); + ThriftActions.updateImageVersion(state.upload.getToken(), + new ImageVersionWrite(state.isRestricted)); } catch (TException e) { if (state.isRestricted) { Gui.showMessageBox(null, "Unerwarteter Fehler beim Setzen der Option" - + " 'Enthält lizenzpflichtige Software' für diese Virtuelle Maschine.", + + " 'Enthält lizenzpflichtige Software' für diese Virtuelle Maschine.", MessageType.WARNING, LOGGER, e); } } @@ -147,16 +184,15 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif return true; } - @Override - public WizardPage performFinish() { + @Override public WizardPage performFinish() { return new ImageUploadSummaryPage(this, state, true); } /** * Checks the validity of the state - * + * * @return true if we have all the needed information in the state, false - * otherwise + * otherwise */ private boolean isStateValid() { // debug purposes @@ -220,16 +256,14 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif state.shareMode); } - @Override - protected boolean onCancelRequest() { + @Override protected boolean onCancelRequest() { if (state.uuid == null) return true; boolean confirmed = Gui.showMessageBox(this, "Möchten Sie den Vorgang wirklich abbrechen?", MessageType.QUESTION_YESNO, null, null); if (confirmed) { QuickTimer.scheduleOnce(new Task() { - @Override - public void fire() { + @Override public void fire() { if (state.upload != null) { state.upload.cancelError(); } @@ -245,18 +279,15 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif return confirmed; } - @Override - public boolean wantConfirmQuit() { + @Override public boolean wantConfirmQuit() { return state.uuid != null; } - @Override - public void escapePressed() { + @Override public void escapePressed() { doCancel(); } - @Override - public void onApplicationQuit() { + @Override public void onApplicationQuit() { if (state != null && state.upload != null) { state.upload.cancelError(); } 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 e0efde7f..928c7c3f 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 @@ -1,6 +1,5 @@ package org.openslx.dozmod.gui.wizard.layout; -import org.openslx.dozmod.gui.configurator.ContainerBindMountConfigurator; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.wizard.Wizard; @@ -26,8 +25,6 @@ public class ContainerUploadPageLayout extends WizardPage { protected final JTabbedPane tpInput; protected final JTextField txtGitRepo; - protected ContainerBindMountConfigurator bindMountConfigurator; - // TODO set proper Text labels /** @@ -39,8 +36,6 @@ public class ContainerUploadPageLayout extends WizardPage { setDescription("Please provide an Input for a Docker Image"); GridManager grid = new GridManager(this, 3, false); - // -- Browse for VM -- - JPanel p1 = new JPanel(); p1.setVisible(true); GridManager g1 = new GridManager(p1, 3, true, new Insets(5, 0, 5, 0)); @@ -97,10 +92,6 @@ public class ContainerUploadPageLayout extends WizardPage { grid.add(txtContainerRun, 2, 1).fill(true, false).expand(true, false); grid.nextRow(); - bindMountConfigurator = new ContainerBindMountConfigurator(); - grid.add(bindMountConfigurator, 3).fill(true, true).expand(true, true); - grid.nextRow(); - //grid.add(Box.createVerticalGlue(), 3).expand(true, true); txtInfoText = new JTextArea(); txtInfoText.setBorder(BorderFactory.createTitledBorder("Hinweis")); @@ -109,7 +100,7 @@ public class ContainerUploadPageLayout extends WizardPage { txtInfoText.setEditable(false); txtInfoText.setFocusable(false); txtInfoText.setOpaque(false); - txtInfoText.setText("Container Info Text"); + txtInfoText.setText("Container Info Text \n Container Info Text \n Container Info Text \n"); grid.add(txtInfoText, 3).fill(true, false).expand(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 358fdd0d..fbec5bf4 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 javax.swing.JTextArea; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.configurator.ContainerBindMountConfigurator; import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; @@ -26,6 +27,8 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { protected final JCheckBox chkLicenseRestricted; protected final JCheckBox chkIsTemplate; + protected final ContainerBindMountConfigurator bindMountConfigurator; + /** * wizard page for entering image data at creating or editing an image * @@ -79,6 +82,12 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(chkLicenseRestricted, 2); grid.nextRow(); + bindMountConfigurator = new ContainerBindMountConfigurator(); + bindMountConfigurator.setVisible(false); // only visible in container context + + grid.add(bindMountConfigurator, 2).fill(true, true).expand(true, true); + grid.nextRow(); + // -- end permissions group -- chkIsTemplate = new JCheckBox("Vorlage erstellen"); grid.add(chkIsTemplate, 2); 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 9004a957..3ce75f37 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 @@ -4,8 +4,6 @@ import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; import org.openslx.dozmod.Config; -import org.openslx.dozmod.gui.Gui; -import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.QFileChooser; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.wizard.Wizard; @@ -14,10 +12,6 @@ import org.openslx.dozmod.model.ContainerBuildContextMethod; import org.openslx.dozmod.model.ContainerDefinition; import org.openslx.dozmod.model.ContainerMeta; import org.openslx.dozmod.state.UploadWizardState; -import org.openslx.dozmod.thrift.ThriftActions; -import org.openslx.dozmod.thrift.ThriftError; -import org.openslx.dozmod.thrift.UploadInitiator; -import org.openslx.dozmod.thrift.WrappedException; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.util.vm.DockerMetaDataDummy; @@ -41,12 +35,15 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { */ private final UploadWizardState state; private final ImageDetailsRead existingImage; + private final ContainerDefinition containerDefinition; - public ContainerUploadPage(Wizard wizard, final UploadWizardState state_) { + public ContainerUploadPage(Wizard wizard, final UploadWizardState state, + ContainerDefinition containerDefinition) { super(wizard); + this.containerDefinition = containerDefinition; + this.state = state; canComeBack = false; - state = state_; existingImage = null; // HACK set dummy os @@ -55,6 +52,8 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { init(); } + // TODO this constructor is currently used in case if user wants do upload a new version. + // This makes no currently no sens in context of docker container and this is used. public ContainerUploadPage(Wizard wizard, UploadWizardState uploadWizardState, ImageDetailsRead imageDetailsRead) { super(wizard); @@ -62,6 +61,9 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { state = uploadWizardState; existingImage = imageDetailsRead; + // TODO fix this! + containerDefinition = null; + lblImageName.setEnabled(existingImage == null); txtImageName.setEnabled(existingImage == null); txtInfoText.setVisible(existingImage == null); @@ -114,7 +116,6 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { }); btnBrowseForImage.requestFocus(); - txtInfoText.setText("Many Text"); } private void browseFile() { @@ -211,24 +212,21 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { private DockerMetaDataDummy createVmMeta() { - ContainerDefinition cd = null; - ContainerMeta containerMeta = new ContainerMeta(); + ContainerMeta containerMeta = containerDefinition.getContainerMeta(); containerMeta.setBuildContextMethod(getBuildContextMethod().ordinal()); containerMeta.setImageName(txtImageName.getText()); containerMeta.setRunOptions(txtContainerRun.getText()); - containerMeta.setBindMountConfig(bindMountConfigurator.getData()); - switch (getBuildContextMethod()) { + switch (containerDefinition.getBuildContextMethod()) { case FILE: - cd = new ContainerDefinition(state.descriptionFile, containerMeta); + containerDefinition.setContainerRecipe(state.descriptionFile); break; case GIT_REPOSITORY: containerMeta.setBuildContextUrl(txtGitRepo.getText()); - cd = new ContainerDefinition(containerMeta); state.diskFile = getDummyFile(); state.descriptionFile = getDummyFile(); break; } - return cd.createVmMeta(); + return containerDefinition.createVmMeta(); } @Override protected boolean wantNextOrFinish() { @@ -238,36 +236,6 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { state.name = existingImage != null ? existingImage.getImageName() : txtImageName.getText(); state.meta = createVmMeta(); - // -- create image to get uuid -- - if (existingImage == null) { - if (state.uuid == null) { - state.uuid = ThriftActions.createImage(JOptionPane.getFrameForComponent(this), state.name); - if (state.uuid == null) - return false; - txtImageName.setEnabled(false); - btnBrowseForImage.setEnabled(false); - txtImageFile.setEnabled(false); - } - } else { - state.uuid = existingImage.getImageBaseId(); - } - // Create upload initiator that will manage requesting a token, hashing the - // file, connecting for upload... - if (state.upload == null) { - try { - state.upload = new UploadInitiator(state.uuid, state.diskFile, - state.meta.getFilteredDefinition()); - } catch (WrappedException e) { - ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); - return false; - } catch (IOException e) { - Gui.showMessageBox(this, "Upload-Initialisierung fehlgeschlagen", MessageType.ERROR, LOGGER, - e); - return false; - } - } - // Start the hash check now - state.upload.startHashing(); return true; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java index 1ec57fce..785e3289 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java @@ -12,12 +12,14 @@ import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.TextChangeListener; import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.layout.ImageMetaDataPageLayout; +import org.openslx.dozmod.model.ContainerDefinition; import org.openslx.dozmod.state.UploadWizardState; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.thrifthelper.Comparators; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; +import org.openslx.util.vm.DockerMetaDataDummy; import org.openslx.util.vm.QemuMetaData; /** @@ -29,10 +31,12 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageMetaDataPage.class); private UploadWizardState state; + private final ContainerDefinition containerDefinition; - public ImageMetaDataPage(Wizard wizard, UploadWizardState uploadWizardState) { + public ImageMetaDataPage(Wizard wizard, UploadWizardState uploadWizardState, ContainerDefinition containerDefinition) { super(wizard); this.state = uploadWizardState; + this.containerDefinition = containerDefinition; setPageComplete(false); // HACK set fixed uploadWizardState to test functions uploadWizardState.shareMode = ShareMode.LOCAL; @@ -92,6 +96,11 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { state.selectedOs = (OperatingSystem) cboOperatingSystem.getSelectedItem(); state.isTemplate = chkIsTemplate.isSelected(); state.isRestricted = chkLicenseRestricted.isSelected(); + + if (state.meta instanceof DockerMetaDataDummy) { + containerDefinition.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData()); + state.meta = containerDefinition.createVmMeta(); + } return state.selectedOs != null && state.description != null; } @@ -123,6 +132,15 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { startCommandPane.setVisible(true); } + if (state.meta instanceof DockerMetaDataDummy) { + bindMountConfigurator.setVisible(true); + + // TODO do we need to check license restrictions in container? + chkLicenseRestricted.setVisible(false); + // TODO currently no Container Template! + chkIsTemplate.setVisible(false); + } + // evaluate description field state.description = txtDescription.getText(); if (state.description == null || state.description.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 a5c24534..872c734f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java @@ -68,6 +68,10 @@ public class ContainerDefinition { this.containerRecipe = containerRecipe; } + public void setContainerRecipe(File containerRecipeFile) { + this.containerRecipe = readContainerRecipe(containerRecipeFile); + } + public void setContainerRecipe(byte[] rawContainerRecipe) { this.containerRecipe = new String(rawContainerRecipe, StandardCharsets.UTF_8); } -- cgit v1.2.3-55-g7522 From 382b8986302eedf4b4a56918c45f3dd9a2d75864 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Thu, 5 Nov 2020 15:07:50 +0100 Subject: [client] refactoring --- .../dozmod/gui/wizard/ImageCreationWizard.java | 1 - .../gui/wizard/layout/ImageMetaDataPageLayout.java | 30 ++++++++++------------ .../dozmod/gui/wizard/page/ImageMetaDataPage.java | 10 ++++---- .../openslx/dozmod/model/ContainerDefinition.java | 21 ++++----------- 4 files changed, 23 insertions(+), 39 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java index 135738d9..ba336652 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java @@ -127,7 +127,6 @@ import java.util.List; @Override public boolean wantFinish() { - if (state.meta instanceof DockerMetaDataDummy) initUpload(); // since we only started the upload and created a "blank" image entry 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 fbec5bf4..0923db0c 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 @@ -1,10 +1,5 @@ package org.openslx.dozmod.gui.wizard.layout; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; - import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.configurator.ContainerBindMountConfigurator; @@ -16,8 +11,9 @@ import org.openslx.dozmod.gui.wizard.Wizard; import org.openslx.dozmod.gui.wizard.WizardPage; import org.openslx.thrifthelper.Comparators; -@SuppressWarnings("serial") -public abstract class ImageMetaDataPageLayout extends WizardPage { +import javax.swing.*; + +@SuppressWarnings("serial") public abstract class ImageMetaDataPageLayout extends WizardPage { protected final JComboBox cboOperatingSystem; protected final JTextArea txtDescription; @@ -31,8 +27,8 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { /** * wizard page for entering image data at creating or editing an image - * - * @param wizard + * + * @param wizard The Wizard-object, which this extended {@link WizardPage} belongs to. */ public ImageMetaDataPageLayout(Wizard wizard) { super(wizard, "Metadaten"); @@ -41,14 +37,14 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { GridManager grid = new GridManager(this, 2, false); QLabel osCaption = new QLabel("Betriebssystem"); - cboOperatingSystem = new ComboBox<>(Comparators.operatingSystem, new ComboBoxRenderer() { - @Override - public String renderItem(OperatingSystem item) { - if (item == null) - return null; - return item.getOsName(); - } - }); + cboOperatingSystem = new ComboBox<>(Comparators.operatingSystem, + new ComboBoxRenderer() { + @Override public String renderItem(OperatingSystem item) { + if (item == null) + return null; + return item.getOsName(); + } + }); cboOperatingSystem.setEditable(false); grid.add(osCaption); grid.add(cboOperatingSystem); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java index 785e3289..7b9dcd10 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java @@ -1,10 +1,5 @@ package org.openslx.dozmod.gui.wizard.page; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Collections; -import java.util.List; - import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.bwlp.thrift.iface.ShareMode; @@ -22,6 +17,11 @@ import org.openslx.util.QuickTimer.Task; import org.openslx.util.vm.DockerMetaDataDummy; import org.openslx.util.vm.QemuMetaData; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Collections; +import java.util.List; + /** * Page for setting the details of an image. */ 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 872c734f..46dba2e0 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java @@ -39,25 +39,14 @@ public class ContainerDefinition { containerMeta = new ContainerMeta(); } - public ContainerDefinition(ContainerDefinition containerDef) { - containerRecipe = String.valueOf(containerDef.getContainerRecipe()); - containerMeta = new ContainerMeta(containerDef.getContainerMeta()); - } - - public ContainerDefinition(ContainerMeta containerMeta) { - this.containerMeta = containerMeta; - } - /** - * Constructor to create a temporal ContainerDefinition object, to construct DockerMetaDataDummy - * TODO i think this is a temp. solution and could be changed in a later cleanup. + * Copy Constructor * - * @param file container recipe file - * @param containerMeta container meta object + * @param containerDef {@link ContainerDefinition} from which to make a deep copy. */ - public ContainerDefinition(File file, ContainerMeta containerMeta) { - this.containerRecipe = readContainerRecipe(file); - this.containerMeta = containerMeta; + public ContainerDefinition(ContainerDefinition containerDef) { + containerRecipe = String.valueOf(containerDef.getContainerRecipe()); + containerMeta = new ContainerMeta(containerDef.getContainerMeta()); } public String getContainerRecipe() { -- cgit v1.2.3-55-g7522 From 3a9851421d23731bf98f5611b0a459a92748cfe2 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Thu, 5 Nov 2020 16:15:52 +0100 Subject: [client] change hint text --- .../dozmod/gui/wizard/layout/ContainerUploadPageLayout.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') 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 928c7c3f..799a6ccc 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 @@ -92,7 +92,7 @@ public class ContainerUploadPageLayout extends WizardPage { grid.add(txtContainerRun, 2, 1).fill(true, false).expand(true, false); grid.nextRow(); - //grid.add(Box.createVerticalGlue(), 3).expand(true, true); + grid.add(Box.createVerticalGlue(), 3).expand(true, true); txtInfoText = new JTextArea(); txtInfoText.setBorder(BorderFactory.createTitledBorder("Hinweis")); txtInfoText.setLineWrap(true); @@ -100,7 +100,10 @@ public class ContainerUploadPageLayout extends WizardPage { txtInfoText.setEditable(false); txtInfoText.setFocusable(false); txtInfoText.setOpaque(false); - txtInfoText.setText("Container Info Text \n Container Info Text \n Container Info Text \n"); + txtInfoText.setText("In dieser Maske sind alle Infromationen zur Definition eines Container Images anzugeben. " + + "Weitere Informationen zur Verwendung von Contanier in bwLehrpool finden Sie unter " + + "https://gitlab.com/risenman/bwlehrpool-vmchooser-docker/"); + grid.add(txtInfoText, 3).fill(true, false).expand(true, false); grid.nextRow(); -- cgit v1.2.3-55-g7522 From 034ee6f782e5cdcb7077b1c9598203cd1d40c5c8 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Fri, 6 Nov 2020 10:26:40 +0100 Subject: [client] do not allow alter version or push to master-sat by user when editing Container Images - disabled buttons in ImageDetails to upload new Version or push to master sat - hide VM-Versions Panel --- .../openslx/dozmod/gui/window/ImageDetailsWindow.java | 11 +++++++++-- .../gui/window/layout/ImageDetailsWindowLayout.java | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') 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 1d769089..b9081850 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 @@ -882,9 +882,9 @@ import java.util.*; */ private void makeEditable(boolean editable) { // always disable all buttons unless image's share mode is LOCAL or PUBLISH - if (image != null) + if (image != null) { editable &= image.shareMode == ShareMode.LOCAL || image.shareMode == ShareMode.PUBLISH; - + } // now do the regular permission check editable = editable && (ImagePerms.canEdit(image) || ImagePerms.canAdmin(image)); txtTitle.setEditable(editable); @@ -896,6 +896,13 @@ import java.util.*; btnUpdateImage.setEnabled(editable); if (actionHandler.isImagePublishSupported()) btnUploadToMaster.setEnabled(editable); + + if (image != null && TConst.VIRT_DOCKER.equals(image.getVirtId())) { + // TODO Currently, do not allow user to upload a new version or share an Container Image. + btnUpdateImage.setEnabled(false); + btnUploadToMaster.setEnabled(false); + } + } /** diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java index 73e981c8..69bfe634 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java @@ -9,7 +9,6 @@ import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.PersonLabel; import org.openslx.dozmod.gui.control.QLabel; -import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; import org.openslx.dozmod.gui.control.table.ImageVersionTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; @@ -22,6 +21,10 @@ import java.awt.*; private static final int ICON_SIZE_Y = 24; + private final String TAB_OVERVIEW_TITEL = "Übersicht"; + private final String TAB_VERSIONS_TITEL = "VM-Versionen"; + private final String TAB_PERMISSIONS_TITEL = "Berechtigungen"; + protected final JTextField txtTitle; protected final JTextArea txtDescription; @@ -287,10 +290,10 @@ import java.awt.*; grdContainerMeta.nextRow(); bindMountConfigurator = new ContainerBindMountConfigurator(); - grdContainerMeta.add(bindMountConfigurator,3).fill(true,true).expand(true,true); + grdContainerMeta.add(bindMountConfigurator, 3).fill(true, true).expand(true, true); grdContainerMeta.finish(true); - GridManager grdContainer = new GridManager(pnlTabContainer, 1,false, new Insets(8, 2, 8, 2)); + GridManager grdContainer = new GridManager(pnlTabContainer, 1, false, new Insets(8, 2, 8, 2)); grdContainer.add(scrollableTextArea, 1).fill(true, true).expand(true, true); grdContainer.add(pnlContainerMeta, 1).fill(true, true).expand(true, true); //grdContainer.add(Box.createVerticalGlue()).fill(true, true).expand(true,true); @@ -322,9 +325,10 @@ import java.awt.*; * ********************************************************************************/ pnlTabs = new JTabbedPane(); - pnlTabs.addTab("Übersicht", pnlTabOverview); - pnlTabs.addTab("VM-Versionen", pnlTabVersions); - pnlTabs.addTab("Berechtigungen", pnlTabPermissions); + + pnlTabs.addTab(TAB_OVERVIEW_TITEL, pnlTabOverview); + pnlTabs.addTab(TAB_VERSIONS_TITEL, pnlTabVersions); + pnlTabs.addTab(TAB_PERMISSIONS_TITEL, pnlTabPermissions); add(pnlTabs, BorderLayout.CENTER); add(pnlButtons, BorderLayout.PAGE_END); @@ -332,5 +336,7 @@ import java.awt.*; protected void showContainerTab() { pnlTabs.addTab("Container", pnlTabContainer); + // TODO currently, do not allow to alter the version of a container image. + pnlTabs.remove(pnlTabs.indexOfTab(TAB_VERSIONS_TITEL)); } } -- cgit v1.2.3-55-g7522 From 9a0e5282a3f7b120acbad321fe0431f8ffcc2eff Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Tue, 1 Dec 2020 11:36:34 +0100 Subject: [client] Refactoring - rewrite visible text for usage, fix typos - hide gui controls, which are not used in container context. --- .../ContainerBindMountConfigurator.java | 29 ++++++++++++++++------ .../gui/control/table/ContainerBindMountTable.java | 2 +- .../wizard/layout/ContainerUploadPageLayout.java | 6 ++--- .../gui/wizard/layout/ImageMetaDataPageLayout.java | 5 ++-- .../gui/wizard/layout/ImageTypePageLayout.java | 20 ++++++--------- .../gui/wizard/page/ContainerUploadPage.java | 8 +++--- .../dozmod/gui/wizard/page/ImageMetaDataPage.java | 28 ++++++++++----------- 7 files changed, 51 insertions(+), 47 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java index c337dc03..302f43c1 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.configurator; import org.apache.log4j.Logger; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; +import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; @@ -16,7 +17,8 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; -public class ContainerBindMountConfigurator extends JPanel implements GenericControlWindow> { +public class ContainerBindMountConfigurator extends JPanel + implements GenericControlWindow> { private final Logger LOGGER = Logger.getLogger(ContainerBindMountConfigurator.class); private final ContainerBindMountTable bindMountTable; @@ -24,21 +26,32 @@ public class ContainerBindMountConfigurator extends JPanel implements GenericCon public ContainerBindMountConfigurator() { super(); - GridManager grid = new GridManager(this,3); + GridManager grid = new GridManager(this, 3, false); + QLabel lblBindMount = new QLabel("Bind Mount Configuration"); bindMountTable = new ContainerBindMountTable(); QScrollPane scrollPaneTable = new QScrollPane(bindMountTable); scrollPaneTable.setMinimumSize(Gui.getScaledDimension(0, 70)); scrollPaneTable.setPreferredSize(Gui.getScaledDimension(0, 70)); - grid.add(scrollPaneTable, 3).fill(true, true).expand(true, true); + grid.add(lblBindMount).fill(false, false); + grid.add(scrollPaneTable, 2).fill(true, false).expand(true, false); grid.nextRow(); + JPanel buttonPanel = new JPanel(); + GridManager gridButtonPanel = new GridManager(buttonPanel, 3); + buttonPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); + JButton btnAddBindMount = new JButton("Add Bind Mount"); JButton btnDelBindMount = new JButton("Remove Bind Mount"); - grid.add(Box.createHorizontalBox()).fill(true, false).expand(true, false); - grid.add(btnAddBindMount); - grid.add(btnDelBindMount); - grid.nextRow(); - grid.finish(true); + + // add glue box to move Buttons to the right border. + buttonPanel.add(Box.createGlue()); + buttonPanel.add(btnAddBindMount); + buttonPanel.add(btnDelBindMount); + + grid.add(Box.createGlue()).fill(true, false); + grid.add(buttonPanel, 2).fill(true, false); + grid.finish(false); btnAddBindMount.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { 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 6796e21a..170feba5 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 @@ -8,7 +8,7 @@ public class ContainerBindMountTable extends ListTable { 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("OPTINONS"); + public static final ListTableColumn COL_OPTIONS = new ListTableColumn("OPTIONS"); public ContainerBindMountTable() { super(COL_SOURCE, COL_TARGET, COL_OPTIONS); 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 799a6ccc..291bc7fa 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 @@ -32,7 +32,7 @@ public class ContainerUploadPageLayout extends WizardPage { */ public ContainerUploadPageLayout(Wizard wizard) { - super(wizard, "Neue VM anlegen"); + super(wizard, "Define a new Container Image"); setDescription("Please provide an Input for a Docker Image"); GridManager grid = new GridManager(this, 3, false); @@ -100,9 +100,7 @@ public class ContainerUploadPageLayout extends WizardPage { txtInfoText.setEditable(false); txtInfoText.setFocusable(false); txtInfoText.setOpaque(false); - txtInfoText.setText("In dieser Maske sind alle Infromationen zur Definition eines Container Images anzugeben. " - + "Weitere Informationen zur Verwendung von Contanier in bwLehrpool finden Sie unter " - + "https://gitlab.com/risenman/bwlehrpool-vmchooser-docker/"); + txtInfoText.setText("In dieser Maske sind alle Infromationen zur Definition eines Container Images anzugeben. "); grid.add(txtInfoText, 3).fill(true, false).expand(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 0923db0c..8de4fa9b 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 @@ -15,6 +15,7 @@ import javax.swing.*; @SuppressWarnings("serial") public abstract class ImageMetaDataPageLayout extends WizardPage { + protected final QLabel lblOperatingSystem; protected final JComboBox cboOperatingSystem; protected final JTextArea txtDescription; protected final JTextArea startCommand; @@ -36,7 +37,7 @@ import javax.swing.*; GridManager grid = new GridManager(this, 2, false); - QLabel osCaption = new QLabel("Betriebssystem"); + lblOperatingSystem = new QLabel("Betriebssystem"); cboOperatingSystem = new ComboBox<>(Comparators.operatingSystem, new ComboBoxRenderer() { @Override public String renderItem(OperatingSystem item) { @@ -46,7 +47,7 @@ import javax.swing.*; } }); cboOperatingSystem.setEditable(false); - grid.add(osCaption); + grid.add(lblOperatingSystem); grid.add(cboOperatingSystem); sCommandCaption = new QLabel("Startbefehl"); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageTypePageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageTypePageLayout.java index c92784b9..7dac1103 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageTypePageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageTypePageLayout.java @@ -29,26 +29,22 @@ public abstract class ImageTypePageLayout extends WizardPage { txtInfoText.setEditable(false); txtInfoText.setFocusable(false); txtInfoText.setOpaque(false); - txtInfoText.setText("Haben Sie noch keine eigene Virtuelle Maschine erstellt," - + " können Sie sich in der Übersicht eine Virtuelle Maschine als Vorlage herunterladen," - + " diese an Ihre Bedürfnisse anpassen und anschließend über diesen Assistenten hochladen." - + "\n\nWenn Sie die VM einer bestehenden Veranstaltung aktualisieren möchten," - + " öffnen Sie die Detailansicht der bestehenden VM und wählen Sie 'Neue VM-Version hochladen'." - + " Dadurch bleiben bestehende Berechtigungen, sowie Verknüpfungen zu Veranstaltungen erhalten."); + txtInfoText.setText("Hier haben Sie die Möglichkeit ein neues Image als VM oder Container (Docker) " + + "zu definieren.\n\n" + + "Sie besitzen derzeit eine Entwicklungsstand der bwLehrpool Suite, in der sämtliche " + + "Funktionalitäten zur Erstellung und Verwaltung von Container Images in Entwicklung sind. " + + "Diese Funktionen können sich in späteren Versionen ändern und somit ihre erstellten Images " + + "inkompatibel machen."); grid.add(txtInfoText, 4).fill(true, false).expand(true, false); grid.nextRow(); grid.nextRow(); // -- New VM Pick-- btnNewVmImage = new JButton("New VM"); - grid.add(btnNewVmImage,2,2) - .fill(true,true) - .expand(true,true); + grid.add(btnNewVmImage, 2, 2).fill(true, true).expand(true, true); // -- New Docker-Image Pick-- btnNewDockerImage = new JButton("new Docker-Image"); - grid.add(btnNewDockerImage,2,2) - .fill(true,true) - .expand(true,true); + grid.add(btnNewDockerImage, 2, 2).fill(true, true).expand(true, true); grid.finish(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 3ce75f37..be96f283 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 @@ -26,6 +26,9 @@ import java.io.IOException; public class ContainerUploadPage extends ContainerUploadPageLayout { + // TODO: Add a Instruction for the new Container-Feature in bwLehrpool. + // TODO: Add link to instructions for Docker-Intetragtion at https://www.bwlehrpool.de/doku.php + private final Logger LOGGER = Logger.getLogger(ContainerUploadPage.class); /** @@ -124,8 +127,6 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { fc.setAcceptAllFileFilterUsed(false); fc.addChoosableFileFilter(new DockerfileFilter()); - // TODO add Feature for MULTIPLE_HYPERVISORS - int action = fc.showOpenDialog(getDialog()); File file = fc.getSelectedFile(); @@ -230,9 +231,6 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { } @Override protected boolean wantNextOrFinish() { - // are we creating a new image? then either: - // get the image name either auto filled by VmwareMetaData or by user - // get the image name from the image we are uploading a new version of state.name = existingImage != null ? existingImage.getImageName() : txtImageName.getText(); state.meta = createVmMeta(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java index 7b9dcd10..47408fd9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java @@ -25,15 +25,15 @@ import java.util.List; /** * Page for setting the details of an image. */ -@SuppressWarnings("serial") -public class ImageMetaDataPage extends ImageMetaDataPageLayout { +@SuppressWarnings("serial") public class ImageMetaDataPage extends ImageMetaDataPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageMetaDataPage.class); private UploadWizardState state; private final ContainerDefinition containerDefinition; - public ImageMetaDataPage(Wizard wizard, UploadWizardState uploadWizardState, ContainerDefinition containerDefinition) { + public ImageMetaDataPage(Wizard wizard, UploadWizardState uploadWizardState, + ContainerDefinition containerDefinition) { super(wizard); this.state = uploadWizardState; this.containerDefinition = containerDefinition; @@ -45,14 +45,12 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { QuickTimer.scheduleOnce(new Task() { List osList = null; - @Override - public void fire() { + @Override public void fire() { osList = MetaDataCache.getOperatingSystems(); // now send the organizations back to the LoginWindow // through populateIdpCombo() Gui.asyncExec(new Runnable() { - @Override - public void run() { + @Override public void run() { fillOsCombo(osList); } }); @@ -60,8 +58,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { }); cboOperatingSystem.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { + @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { reactToUserInput(); } @@ -69,15 +66,13 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { }); txtDescription.getDocument().addDocumentListener(new TextChangeListener() { - @Override - public void changed() { + @Override public void changed() { reactToUserInput(); } }); } - @Override - protected void onPageEnter() { + @Override protected void onPageEnter() { // Preselect OS if possible if (state.detectedOs != null) { cboOperatingSystem.setSelectedItem(state.detectedOs); @@ -91,8 +86,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { reactToUserInput(); } - @Override - protected boolean wantNextOrFinish() { + @Override protected boolean wantNextOrFinish() { state.selectedOs = (OperatingSystem) cboOperatingSystem.getSelectedItem(); state.isTemplate = chkIsTemplate.isSelected(); state.isRestricted = chkLicenseRestricted.isSelected(); @@ -135,6 +129,10 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { if (state.meta instanceof DockerMetaDataDummy) { bindMountConfigurator.setVisible(true); + // TODO we need Information about a OS in Container? Currently use "Other (32 Bit)" as default + lblOperatingSystem.setVisible(false); + cboOperatingSystem.setVisible(false); + // TODO do we need to check license restrictions in container? chkLicenseRestricted.setVisible(false); // TODO currently no Container Template! -- cgit v1.2.3-55-g7522 From 0f04751aead49de852c99540df5518a882c8270b Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Wed, 9 Dec 2020 13:37:26 +0100 Subject: [client] Refactoring - update DockerfileFilter to allow [Dd]ockerfile filenames - update readContainerRecipe-File --- .../openslx/dozmod/gui/wizard/page/ContainerUploadPage.java | 12 +++++++++--- .../java/org/openslx/dozmod/model/ContainerDefinition.java | 10 +++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui') 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 be96f283..874a2435 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 @@ -23,6 +23,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ContainerUploadPage extends ContainerUploadPageLayout { @@ -241,9 +243,13 @@ public class ContainerUploadPage extends ContainerUploadPageLayout { @Override public boolean accept(File f) { - boolean accept = true; - if (f.isFile() && !f.getName().equals("dockerfile")) - accept = false; + + Pattern p = Pattern.compile("[Dd]ockerfile"); + Matcher m = p.matcher(f.getName()); + + boolean accept = false; + if (f.isFile() && m.matches()) + accept = true; return accept; } 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 1f28ce06..f41b4b47 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java @@ -154,10 +154,14 @@ public class ContainerDefinition { try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); - byte[] rawFile = new byte[(int) file.length()]; - bis.read(rawFile); + ByteArrayOutputStream rawFile = new ByteArrayOutputStream(); + int count; + byte[] data = new byte[1024]; + while ((count = bis.read(data)) != -1) { + rawFile.write(data,0,count); + } - String rawRecipe = new String(rawFile, StandardCharsets.UTF_8); + String rawRecipe = new String(rawFile.toByteArray(), StandardCharsets.UTF_8); // replace windows by unix EOL recipe = rawRecipe.replaceAll("\\r\\n", "\n"); -- cgit v1.2.3-55-g7522