summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ContainerBindMountConfigurator.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java165
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java124
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java33
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java42
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java44
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/VmMetaDataDummy.java121
7 files changed, 237 insertions, 296 deletions
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 d7e73e3d..961bbc29 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
@@ -81,6 +81,10 @@ public class ContainerBindMountConfigurator extends JPanel
fireUserChangeEvent();
}
+ public void setData(List<ContainerBindMount> bindMountConfig) {
+ setData(bindMountConfig, true);
+ }
+
public void setData(List<ContainerBindMount> bindMountConfig, boolean sort) {
bindMountTable.setData(bindMountConfig, sort);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java
new file mode 100644
index 00000000..53b3e199
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/panel/ContainerPanel.java
@@ -0,0 +1,165 @@
+package org.openslx.dozmod.gui.panel;
+
+import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
+import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
+import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor;
+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.helper.I18n;
+import org.openslx.dozmod.model.ContainerBuildContextMethod;
+import org.openslx.dozmod.model.ContainerDefinition;
+import org.openslx.thrifthelper.ThriftManager;
+import org.openslx.util.ThriftUtil;
+
+import javax.swing.*;
+import java.awt.*;
+import java.nio.ByteBuffer;
+
+public class ContainerPanel extends JPanel {
+
+ // TODO Set the height of txtContainerRecipe dependent of the Context. Full height for IMAGE_CONTEXT.
+
+ public static final String IMAGE_CONTEXT = "IMAGE";
+ public static final String CONTAINER_CONTEXT = "CONTAINER";
+
+ private final Logger LOGGER = Logger.getLogger(ContainerBindMountConfigurator.class);
+
+ private final QLabel lblContainerRunOpt;
+ private final QLabel lblContainerImageName;
+
+ private final JTextArea txtContainerRecipe;
+ private final JTextField txtContainerRun;
+ private final JTextField txtContainerImageName;
+ private final ContainerBindMountConfigurator bindMountConfigurator;
+
+ private ContainerDefinition containerDefinition = null;
+
+ public ContainerPanel() {
+
+ JPanel pnlContainerMeta = new JPanel();
+ GridManager grdContainerMeta = new GridManager(pnlContainerMeta, 3);
+
+ lblContainerRunOpt = new QLabel(
+ I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.ContainerRunOptions.text"));
+ grdContainerMeta.add(lblContainerRunOpt);
+ txtContainerRun = new JTextField();
+ grdContainerMeta.add(txtContainerRun, 2).fill(true, false).expand(true, false);
+ grdContainerMeta.nextRow();
+
+ bindMountConfigurator = new ContainerBindMountConfigurator();
+ grdContainerMeta.add(bindMountConfigurator, 3).fill(true, true).expand(true, true);
+ grdContainerMeta.finish(true);
+
+ GridManager grdContainer = new GridManager(this, 2, false, new Insets(8, 2, 8, 2));
+
+ lblContainerImageName = new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.ImageName.text"));
+ grdContainer.add(lblContainerImageName);
+ txtContainerImageName = new JTextField();
+ grdContainer.add(txtContainerImageName, 1).fill(true, false).expand(true, false);
+ grdContainer.nextRow();
+
+ txtContainerRecipe = new JTextArea();
+ JScrollPane scrollableTextArea = new JScrollPane(txtContainerRecipe);
+ scrollableTextArea.setMinimumSize(Gui.getScaledDimension(0, 200));
+ scrollableTextArea.setPreferredSize(Gui.getScaledDimension(0, 200));
+ grdContainer.add(scrollableTextArea, 2).fill(true, true).expand(true, true);
+ grdContainer.add(pnlContainerMeta, 2).fill(true, true).expand(true, true);
+ grdContainer.finish(true);
+
+ }
+
+ /**
+ * Retrieves Container specific details for the currently displayed lecture and disables gui elements for
+ * the specific context.
+ *
+ * @param satelliteToken The satelliteToken from which the information are retrieved.
+ * @param image The ImageDetailsRead which has general information about Image (name, type, version, etc.)
+ * @param context In which context this Panel ist used (Image or Lecture)
+ */
+ public void init(String satelliteToken, ImageDetailsRead image, String context) {
+
+ try {
+ byte[] rawVirtConfig;
+ ByteBuffer byteBuffer = ThriftManager.getSatClient()
+ .getImageVersionVirtConfig(satelliteToken, image.getLatestVersionId());
+ rawVirtConfig = ThriftUtil.unwrapByteBuffer(byteBuffer);
+ containerDefinition = ContainerDefinition.fromByteArray(rawVirtConfig);
+ } catch (TException e) {
+ LOGGER.error("Failed to retrieve virtualizer config for image version " + "'"
+ + image.getLatestVersionId() + ", see trace: ", e);
+ }
+
+ txtContainerImageName.setText(image.imageName);
+ txtContainerImageName.setEnabled(false);
+ // TODO simplify this mess. ContainerBuildContextMethod is to complex
+ if (containerDefinition.getBuildContextMethod() == ContainerBuildContextMethod.FILE) {
+ txtContainerRecipe.setText(containerDefinition.getContainerRecipe());
+ } else if (containerDefinition.getBuildContextMethod()
+ == ContainerBuildContextMethod.GIT_REPOSITORY) {
+ txtContainerRecipe.setText(containerDefinition.getContainerMeta().getBuildContextUrl());
+ }
+
+ if (context.equals(IMAGE_CONTEXT)) {
+ initImageDetails();
+ } else if (context.equals(CONTAINER_CONTEXT)) {
+ initContainerDetails();
+ } else {
+ LOGGER.error("Container Panel init failed: Please use proper context");
+ }
+
+ }
+
+ private void initImageDetails() {
+
+ // currently do not allow user to change the Dockerfile in the suite.
+ txtContainerRecipe.setEnabled(false);
+ lblContainerRunOpt.setVisible(false);
+ txtContainerRun.setVisible(false);
+ bindMountConfigurator.setVisible(false);
+ }
+
+ private void initContainerDetails() {
+
+ txtContainerRecipe.setEnabled(false);
+ txtContainerRun.setText(containerDefinition.getContainerMeta().getRunOptions());
+ bindMountConfigurator.setData(containerDefinition.getContainerMeta().getBindMountConfig());
+ }
+
+ public void addToChangeMonitor(DialogChangeMonitor changeMonitor) {
+ changeMonitor.add(txtContainerRecipe);
+ changeMonitor.add(txtContainerRun);
+ changeMonitor.add(bindMountConfigurator);
+ }
+
+ /**
+ * Stores changes in ContainerDefinition and Uploads changes to Sat.
+ *
+ * @param satelliteToken for current session to communicate with Sat.
+ * @param image of the image version, which will be updated.
+ * @return Returns true uf upload successfully finished, false if error occurred.
+ */
+ public boolean saveChanges(String satelliteToken, ImageDetailsRead image) {
+
+ ContainerDefinition newConDev = new ContainerDefinition(containerDefinition);
+
+ newConDev.getContainerMeta().setRunOptions(txtContainerRun.getText());
+ newConDev.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData());
+
+ // TODO do I really need this check? Maybe just get every setting and upload it.
+ if (!newConDev.equals(containerDefinition)) {
+ try {
+ ThriftManager.getSatClient()
+ .setImageVersionVirtConfig(satelliteToken, image.getLatestVersionId(),
+ newConDev.toByteBuffer());
+ } catch (TException e) {
+ LOGGER.error("Upload new ContainerDefinition failed", e);
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
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 efc75236..e8ac7091 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
@@ -37,6 +37,7 @@ import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor;
import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.TextNotEmptyConstraint;
import org.openslx.dozmod.gui.helper.PopupMenu;
import org.openslx.dozmod.gui.helper.*;
+import org.openslx.dozmod.gui.panel.ContainerPanel;
import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback;
import org.openslx.dozmod.gui.window.layout.ImageDetailsWindowLayout;
import org.openslx.dozmod.gui.wizard.ImageUpdateWizard;
@@ -131,8 +132,6 @@ import java.util.*;
private AbstractControlWrapper<?> changeListenerPermissions;
- private ContainerDefinition containerDefinition = new ContainerDefinition();
-
/**
* Constructor
*
@@ -355,6 +354,8 @@ import java.util.*;
changeMonitor.add(chkDefaultPermAdmin);
changeListenerPermissions = changeMonitor.add(ctlImagePermissionConfigurator);
+ this.pnlTabContainer.addToChangeMonitor(changeMonitor);
+
// update default permissions hook for the permission configurator to apply to newly added users
final ItemListener updateDefaultPermissionsListener = new ItemListener() {
@Override public void itemStateChanged(ItemEvent e) {
@@ -423,45 +424,6 @@ import java.util.*;
});
}
- /**
- * Uploads ByteBuffer data to satellite server and stores it in ImageVersion.VirtConfig
- * for the given imageVersionId.
- *
- * @param imageVersionId Id of the image version, which will be updated.
- * @param data New virtConfig to store in database.
- */
- private void uploadContainerDef(final String imageVersionId, ByteBuffer data) {
-
- try {
- ThriftManager.getSatClient()
- .setImageVersionVirtConfig(Session.getSatelliteToken(), imageVersionId, data);
- } catch (TException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Loads binary file ImageVersion.VirtConfig from the Satellites Database.
- *
- * @param selected the selected Image Version. TODO: For now only just the latest Version.
- */
- private byte[] loadContainerDef(final ImageVersionDetails selected) {
-
- byte[] rawVirtConfig = null;
-
- try {
- ByteBuffer byteBuffer = ThriftManager.getSatClient()
- .getImageVersionVirtConfig(Session.getSatelliteToken(), selected.versionId);
- rawVirtConfig = ThriftUtil.unwrapByteBuffer(byteBuffer);
-
- } catch (TException e) {
- LOGGER.error(
- "Failed to retrieve virtualizer config for image version " + "'" + image.latestVersionId
- + ", see trace: ", e);
- }
- return rawVirtConfig;
- }
-
/********************************************************************************
*
* Helper triggering the actual thrift calls
@@ -624,43 +586,11 @@ import java.util.*;
}
}
- // if image is container
- // prepare to upload container definition to local satellite server.
- // TODO
- if (image.getVirtId().equals(TConst.VIRT_DOCKER))
- saveContainerDefinition();
-
changeMonitor.reset();
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 newConDev = new ContainerDefinition(containerDefinition);
-
- if (newConDev.getBuildContextMethod() == ContainerBuildContextMethod.FILE) {
- newConDev.setContainerRecipe(txtContainerRecipe.getText());
- }
- // currently no update of the git url allowed
-
- newConDev.getContainerMeta().setImageName(txtContainerImageName.getText());
- newConDev.getContainerMeta().setRunOptions(txtContainerRun.getText());
- newConDev.getContainerMeta().setBindMountConfig(bindMountConfigurator.getData());
-
- if (!newConDev.equals(containerDefinition)) {
- uploadContainerDef(image.versions.get(0).versionId, newConDev.toByteBuffer());
- LOGGER.info("Upload new DockerDefinition");
- }
- }
-
- /**
* Helper to save the custom user permissions (those not included in
* ImageBaseWrite).
*
@@ -822,45 +752,6 @@ import java.util.*;
if (virt != null)
lblVirtualizer.setText(virt.getVirtName());
- if (TConst.VIRT_DOCKER.equals(image.getVirtId())) {
- lblVirtualizer.setText(TConst.VIRT_DOCKER);
- showContainerTab();
-
- if (image.versions.isEmpty()) {
- LOGGER.info("Close Window because no ImageVersions available!");
- dispose();
- return;
- }
- // TODO if only a single version is created an the user deletes it, next line will out of bounce!
- containerDefinition = ContainerDefinition.fromByteArray(loadContainerDef(image.versions.get(0)));
-
- ContainerMeta containerMeta = containerDefinition.getContainerMeta();
- ContainerBuildContextMethod method = ContainerBuildContextMethod.fromInt(
- containerMeta.getBuildContextMethod());
-
- switch (method) {
- case FILE:
- txtContainerRecipe.setText(containerDefinition.getContainerRecipe());
- break;
- case GIT_REPOSITORY:
- txtContainerRecipe.setText(containerMeta.getBuildContextUrl());
- txtContainerRecipe.setEnabled(false);
- break;
- }
-
- txtContainerImageName.setText(containerMeta.getImageName());
- txtContainerRun.setText(containerMeta.getRunOptions());
- bindMountConfigurator.setData(containerMeta.getBindMountConfig(), true);
-
- changeMonitor.add(txtContainerRecipe).
- addConstraint(new TextNotEmptyConstraint(I18n.WINDOW.getString("ImageDetails.Constraint.NoEmptyDockerfile.text")));
- changeMonitor.add(txtContainerImageName)
- .addConstraint(new TextNotEmptyConstraint(I18n.WINDOW.getString("ImageDetails.Constraint.NoEmptyName.text")));
- changeMonitor.add(txtContainerRun)
- .addConstraint(new TextNotEmptyConstraint(I18n.WINDOW.getString("ImageDetails.Constraint.NoEmptyRunOptions.text")));
- changeMonitor.add(bindMountConfigurator);
- }
-
// fill share mode combo, if not already done
if (cboShareMode.getItemCount() == 0) {
for (ShareMode mode : ShareMode.values()) {
@@ -929,12 +820,17 @@ import java.util.*;
if (actionHandler.isImagePublishSupported())
btnUploadToMaster.setEnabled(editable);
- if (image != null && TConst.VIRT_DOCKER.equals(image.getVirtId())) {
+
+ // If this Image is from type Docker (Container) show the new Container Tab
+ if (image != null && image.getVirtId().equals(TConst.VIRT_DOCKER)) {
+ lblVirtualizer.setText(TConst.VIRT_DOCKER);
+ pnlTabContainer.init(Session.getSatelliteToken(), image, ContainerPanel.IMAGE_CONTEXT);
+ showContainerTab();
+
// 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/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
index b98023b0..00f138f4 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
@@ -1,6 +1,5 @@
package org.openslx.dozmod.gui.window;
-import java.awt.Color;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -45,6 +44,7 @@ import org.openslx.dozmod.gui.helper.DateTimeHelper;
import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
+import org.openslx.dozmod.gui.panel.ContainerPanel;
import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback;
import org.openslx.dozmod.gui.window.layout.LectureDetailsWindowLayout;
import org.openslx.dozmod.permissions.ImagePerms;
@@ -59,6 +59,7 @@ import org.openslx.dozmod.thrift.ThriftError;
import org.openslx.dozmod.thrift.cache.UserCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.thrifthelper.Comparators;
+import org.openslx.thrifthelper.TConst;
import org.openslx.thrifthelper.ThriftManager;
/**
@@ -117,7 +118,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/**
* Constructor
- *
+ *
* @param modalParent parent of this popup window
* @param callback function to be called when a lecture update occured
*/
@@ -193,6 +194,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
ctlRunscriptConfigurator.addToChangeMonitor(changeMonitor);
ctlNetshareConfigurator.addToChangeMonitor(changeMonitor);
ctlLdapFilterConfigurator.addToChangeMonitor(changeMonitor);
+
+ pnlTabContainer.addToChangeMonitor(changeMonitor);
// TODO: LDAP/NetShare: Having uncommitted changes in the input fields should be
// handled too
// End change monitor
@@ -299,7 +302,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/**
* Sets the lecture to show the details of by setting the 'lecture' and 'image'
* members to its metadata. This method will fetch the information from the sat
- *
+ *
* @param lectureId the id of the lecture to be displayed
*/
public void setLecture(final String lectureId) {
@@ -340,6 +343,14 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
txtImageName.setText(image.getImageName());
lblImageNameInfo.setText(image.getImageName());
}
+
+ // init container info panel
+ if (image != null && image.getVirtId().equals(TConst.VIRT_DOCKER) )
+ {
+ showContainerTab();
+ pnlTabContainer.init(Session.getSatelliteToken(), image, ContainerPanel.CONTAINER_CONTEXT);
+ }
+
// init permission info
adminRightsFromDefaultPermissions = lecture.defaultPermissions.admin;
ctlPermissionManager.initPanel(customPermissions, lecture.defaultPermissions, lecture.ownerId);
@@ -431,7 +442,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/**
* Sets the lecture's owner to the given user
- *
+ *
* @param user UserInfo representation of the new owner
*/
private void setLectureOwner(final UserInfo user) {
@@ -549,6 +560,14 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
metadata.setLdapFilters(ctlLdapFilterConfigurator.getState());
metadata.setPresetScriptIds(startupSettings.selectedScripts);
+ // TODO maybe there could be a nicer way to distinguish between Lectures withs Containers
+ if (image != null && image.getVirtId().equals(TConst.VIRT_DOCKER) ) {
+ if(!pnlTabContainer.saveChanges(Session.getSatelliteToken(),image))
+ return false;
+ } else {
+ LOGGER.error("No Image: Could not save Container Settings!");
+ }
+
// now trigger the actual action
try {
ThriftManager.getSatClient().updateLecture(Session.getSatelliteToken(), lecture.getLectureId(), metadata);
@@ -589,7 +608,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/**
* Checks if the given start and end date represent a valid time period. This is
* the case, if start < end and if current time < end
- *
+ *
* @param start date of the period to check
* @param end date of the period to check
* @param feedback true if the user should be shown feedback, false otherwise
@@ -644,7 +663,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/**
* Opens a new LectureDetailsWindow showing the details of the lecture with ID =
* lectureId
- *
+ *
* @param modalParent parent of this window
* @param lectureId id of the lecture to set the details of
*/
@@ -667,7 +686,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
/*
* *****************************************************************************
* **
- *
+ *
* UIFeedback implementation
*
********************************************************************************/
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 4d141c18..64e2ddf5 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
@@ -30,6 +30,7 @@ import org.openslx.dozmod.gui.control.table.ImageVersionTable;
import org.openslx.dozmod.gui.control.table.QScrollPane;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.I18n;
+import org.openslx.dozmod.gui.panel.ContainerPanel;
import org.openslx.thrifthelper.Comparators;
import javax.swing.*;
@@ -46,12 +47,6 @@ import java.awt.*;
protected final JTextField txtTitle;
protected final JEditorPane txtDescription;
- private final JPanel pnlTabContainer;
- protected final JTextArea txtContainerRecipe;
- protected final JTextField txtContainerRun;
- protected final JTextField txtContainerImageName;
- protected ContainerBindMountConfigurator bindMountConfigurator;
-
protected QLabel lblError;
protected final PersonLabel lblOwner;
protected final JButton btnChangeOwner;
@@ -88,6 +83,8 @@ import java.awt.*;
protected ImagePermissionConfigurator ctlImagePermissionConfigurator;
+ protected final ContainerPanel pnlTabContainer;
+
public ImageDetailsWindowLayout(Frame modalParent) {
super(modalParent, "<init>", ModalityType.APPLICATION_MODAL);
setResizable(true);
@@ -293,36 +290,7 @@ import java.awt.*;
* Container panel
*
********************************************************************************/
- 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);
-
- grdContainerMeta.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.ImageName.text")));
- txtContainerImageName = new JTextField();
- txtContainerImageName.setDocument(txtTitle.getDocument());
- grdContainerMeta.add(txtContainerImageName, 2).fill(true, false).expand(true, false);
- grdContainerMeta.nextRow();
-
- grdContainerMeta.add(new QLabel(I18n.WINDOW_LAYOUT.getString("ImageDetails.Label.ContainerRunOptions.text")));
- txtContainerRun = new JTextField();
- grdContainerMeta.add(txtContainerRun, 2).fill(true, false).expand(true, false);
- 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));
- 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);
- grdContainer.finish(true);
-
+ pnlTabContainer = new ContainerPanel();
/* *******************************************************************************
@@ -362,6 +330,6 @@ 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));
+ //pnlTabs.remove(pnlTabs.indexOfTab(TAB_VERSIONS_TITEL));
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
index 6abdfc47..ff8b4d54 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
@@ -36,11 +36,7 @@ import org.jdatepicker.JDatePicker;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
-import org.openslx.dozmod.gui.configurator.LdapFilterConfigurator;
-import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator;
-import org.openslx.dozmod.gui.configurator.NetrulesConfigurator;
-import org.openslx.dozmod.gui.configurator.NetshareConfigurator;
-import org.openslx.dozmod.gui.configurator.StartupConfigurator;
+import org.openslx.dozmod.gui.configurator.*;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.LocationSelector;
@@ -50,6 +46,7 @@ import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.control.WordWrapLabel;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.I18n;
+import org.openslx.dozmod.gui.panel.ContainerPanel;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.dozmod.util.FormatHelper;
@@ -115,6 +112,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
protected final JPanel pnlTabNetshare;
protected final JPanel pnlTabLdapFilter;
+ protected final ContainerPanel pnlTabContainer;
+
public LectureDetailsWindowLayout(Frame modalParent) {
super(modalParent, I18n.WINDOW_LAYOUT.getString("LectureDetails.Dialog.title"), ModalityType.APPLICATION_MODAL);
@@ -183,7 +182,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.title.text")));
grdGeneral.add(txtTitle, 4).expand(true, false).fill(true, false);
grdGeneral.nextRow();
-
+
// description
txtDescription = new JEditorPane();
grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.description.text"))).anchor(GridBagConstraints.FIRST_LINE_START);
@@ -283,10 +282,10 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
grdGeneral.add(chkIsActive, 4);
grdGeneral.nextRow();
grdGeneral.finish(true);
-
+
Insets descriptionInset = new Insets(2, 4, 2, 4);
Insets firstInset = new Insets(12, 4, 2, 4);
-
+
// Network rules
pnlTabNetrules = new JPanel();
GridManager grdNetrules = new GridManager(pnlTabNetrules, 1, true, new Insets(9, 4, 2, 4));
@@ -306,11 +305,11 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
grdNetrules.add(ctlNetrulesConfigurator).fill(true, true).expand(true, true);
grdNetrules.nextRow();
grdNetrules.finish(false);
-
+
// Tab restrictions
pnlTabRestrictions = new JPanel();
GridManager grdRestrictions = new GridManager(pnlTabRestrictions, 2, true, new Insets(9, 4, 2, 4));
-
+
chkHasUsbAccess = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.hasUSBAccess.text"));
grdRestrictions.add(chkHasUsbAccess, 2);
grdRestrictions.nextRow();
@@ -335,8 +334,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
.insets(descriptionInset);
grdRestrictions.finish(true);
- /* *******************************************************************************
- *
+ /* *******************************************************************************
+ *
* Tab "Permissions"
*
********************************************************************************/
@@ -355,6 +354,13 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
grdPermissions.add(defaultPermissionPane).fill(true, false).expand(true, false);
grdPermissions.finish(false);
+ /* *******************************************************************************
+ *
+ * Tab "Container"
+ *
+ ********************************************************************************/
+ pnlTabContainer = new ContainerPanel();
+
/* *******************************************************************************
*
* Tab "Locations"
@@ -387,7 +393,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
GridManager grdNetshare = new GridManager(pnlTabNetshare, 1, false, new Insets(8, 2, 8, 2));
grdNetshare.add(ctlNetshareConfigurator).fill(true, true).expand(true, true);
grdNetshare.finish(false);
-
+
/* *******************************************************************************
*
* Tab "LDAP-Filters"
@@ -398,10 +404,10 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
GridManager grdLdap = new GridManager(pnlTabLdapFilter, 1, false, new Insets(8, 2, 8, 2));
grdLdap.add(ctlLdapFilterConfigurator).fill(true, true).expand(true, true);
grdLdap.finish(false);
-
- /* *******************************************************************************
- *
- * Main panel containing the tabs
+
+ /* *******************************************************************************
+ *
+ * Main panel containing the tabs
*
********************************************************************************/
// finally build the tabbedPane and add it to the main view
@@ -442,6 +448,10 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
add(buttonPanel, BorderLayout.SOUTH);
}
+ protected void showContainerTab() {
+ pnlTabs.addTab("Container", pnlTabContainer);
+ }
+
private JSpinner makeTimeSpinner(int h, int m) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, h);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmMetaDataDummy.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmMetaDataDummy.java
deleted file mode 100644
index bd5d4323..00000000
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmMetaDataDummy.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.openslx.dozmod.util;
-
-import org.openslx.bwlp.thrift.iface.Virtualizer;
-import org.openslx.thrifthelper.TConst;
-import org.openslx.util.vm.VmMetaData;
-
-import java.io.File;
-import java.util.List;
-
-public class VmMetaDataDummy extends VmMetaData {
- // TODO Define DOCKER CONSTANT
- private final Virtualizer virtualizer = new Virtualizer( TConst.VIRT_VMWARE, "DOCKER" );
-
- public VmMetaDataDummy(List osList) {
- super(osList);
- }
-
- @Override public byte[] getFilteredDefinitionArray() {
- return new byte[0];
- }
-
- @Override public void applySettingsForLocalEdit() {
-
- }
-
- @Override public boolean addHddTemplate(File diskImage, String hddMode, String redoDir) {
- return false;
- }
-
- @Override public boolean addHddTemplate(String diskImagePath, String hddMode, String redoDir) {
- return false;
- }
-
- @Override public boolean addDefaultNat() {
- return false;
- }
-
- @Override public void setOs(String vendorOsId) {
-
- }
-
- @Override public boolean addDisplayName(String name) {
- return false;
- }
-
- @Override public boolean addRam(int mem) {
- return false;
- }
-
- @Override public void addFloppy(int index, String image, boolean readOnly) {
-
- }
-
- @Override public boolean addCdrom(String image) {
- return false;
- }
-
- @Override public boolean addCpuCoreCount(int nrOfCores) {
- return false;
- }
-
- @Override public void setSoundCard(SoundCardType type) {
-
- }
-
- @Override public SoundCardType getSoundCard() {
- return SoundCardType.NONE;
- }
-
- @Override public void setDDAcceleration(DDAcceleration type) {
-
- }
-
- @Override public DDAcceleration getDDAcceleration() {
- return DDAcceleration.OFF;
- }
-
- @Override public void setHWVersion(HWVersion type) {
-
- }
-
- @Override public HWVersion getHWVersion() {
- return HWVersion.DEFAULT;
- }
-
- @Override public void setEthernetDevType(int cardIndex, EthernetDevType type) {
-
- }
-
- @Override public EthernetDevType getEthernetDevType(int cardIndex) {
- return EthernetDevType.NONE;
- }
-
- @Override public void setMaxUsbSpeed(UsbSpeed speed) {
-
- }
-
- @Override public UsbSpeed getMaxUsbSpeed() {
- return UsbSpeed.NONE;
- }
-
- @Override public byte[] getDefinitionArray() {
- return new byte[0];
- }
-
- @Override public boolean addEthernet(EtherType type) {
- return false;
- }
-
- @Override public Virtualizer getVirtualizer() {
- return virtualizer;
- }
-
- @Override public boolean tweakForNonPersistent() {
- return false;
- }
-
- @Override public void registerVirtualHW() {
-
- }
-}