summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java142
1 files changed, 77 insertions, 65 deletions
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 b21564a6..283019b6 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,18 +4,19 @@ 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.I18n;
+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.ContainerDefinition;
import org.openslx.dozmod.state.UploadWizardState;
-import org.openslx.dozmod.thrift.ThriftActions;
+import org.openslx.dozmod.thrift.*;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
+import org.openslx.dozmod.util.ContainerUtils;
import org.openslx.virtualization.configuration.VirtualizationConfigurationDocker;
-import org.openslx.virtualization.configuration.container.ContainerBuildContextMethod;
-import org.openslx.virtualization.configuration.container.ContainerMeta;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
@@ -23,10 +24,9 @@ import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -65,8 +65,7 @@ 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.
+ // This constructor is used in case the user wants do upload a new version.
public ContainerUploadPage(Wizard wizard, UploadWizardState uploadWizardState,
ImageDetailsRead imageDetailsRead) {
super(wizard);
@@ -74,13 +73,16 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
state = uploadWizardState;
existingImage = imageDetailsRead;
- // TODO fix this!
- containerDefinition = null;
+ containerDefinition = ContainerUtils.getContainerDefinition(
+ Session.getSatelliteToken(),
+ imageDetailsRead.getLatestVersionId());
lblImageName.setEnabled(existingImage == null);
txtImageName.setEnabled(existingImage == null);
+ txtImageName.setText(existingImage.getImageName());
txtInfoText.setVisible(existingImage == null);
+
state.name = imageDetailsRead.imageName;
state.defaultPermissions = imageDetailsRead.getDefaultPermissions();
state.description = imageDetailsRead.getDescription();
@@ -129,45 +131,37 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
}
});
- txtContainerImageFile.addMouseListener(new MouseListener() {
- @Override public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() >= 2)
- browseContainerImageFile();
- }
-
- @Override public void mousePressed(MouseEvent e) {
-
- }
-
- @Override public void mouseReleased(MouseEvent e) {
-
- }
-
- @Override public void mouseEntered(MouseEvent e) {
-
+ this.btnBrowseImageTar.addActionListener(new ActionListener() {
+ @Override public void actionPerformed(ActionEvent e) {
+ browseImageTarFile();
}
+ });
- @Override public void mouseExited(MouseEvent e) {
-
+ this.txtImageTar.addActionListener(new ActionListener() {
+ @Override public void actionPerformed(ActionEvent e) {
+ browseImageTarFile();
}
});
btnBrowseForImage.requestFocus();
}
- private void browseContainerImageFile() {
+ private void browseImageTarFile() {
QFileChooser fc = new QFileChooser(Config.getUploadPath(), false);
fc.setAcceptAllFileFilterUsed(false);
fc.addChoosableFileFilter(new ContainerImageFileFiler());
int action = fc.showOpenDialog(getDialog());
File file = fc.getSelectedFile();
- if (action != JFileChooser.APPROVE_OPTION || file == null) {
- txtContainerImageFile.setText("");
+
+ if (action != JFileChooser.APPROVE_OPTION || file == null || !ContainerUtils.isValidTar(file)) {
+ txtImageTar.setText("");
return;
}
- txtContainerImageFile.setText(file.getAbsolutePath());
+ txtImageTar.setText(file.getAbsolutePath());
+ Config.setUploadPath(file.getParent());
+ reactOnUserInput();
LOGGER.info("Tar File selected");
}
@@ -191,13 +185,6 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
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()) {
- txtContainerImageFile.setText(imageTarFile.getAbsolutePath());
- LOGGER.info("Prebuild Container Image found");
- }
Config.setUploadPath(file.getParent());
reactOnUserInput();
@@ -230,21 +217,20 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
}
private boolean checkUserInput() {
- ContainerBuildContextMethod method = getBuildContextMethod();
- switch (method) {
- case IMAGE_REPO:
+ switch (getCurrentContext()) {
+ case IMAGE_REPOSITORY:
if (txtImageRepo.getText() == null || txtImageRepo.getText().isEmpty()) {
setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoImageRepo"));
return false;
}
break;
- case FILE:
+ case DOCKERFILE:
if (txtImageFile.getText() == null || txtImageFile.getText().isEmpty()) {
setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoReceipt"));
return false;
}
- if (! ContainerDefinition.isValidDockerfile(txtImageFile.getText())) {
+ if (!ContainerDefinition.isValidDockerfile(txtImageFile.getText())) {
setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoValidDockerfiler"));
return false;
}
@@ -255,6 +241,16 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
return false;
}
break;
+ case DOCKER_ARCHIVE:
+ if (txtImageTar.getText() == null || txtImageTar.getText().isEmpty()) {
+ setWarningMessage(I18n.PAGE.getString("ContainerUploadPage.Warning.NoDockerArchive"));
+ return false;
+ }
+ break;
+
+ default:
+ // The case is not provided
+ return false;
}
if (txtImageName.getText() == null || txtImageName.getText().isEmpty()) {
@@ -266,27 +262,26 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
private VirtualizationConfigurationDocker createVirtualizationConfig() {
- ContainerMeta containerMeta = containerDefinition.getContainerMeta();
- containerMeta.setBuildContextMethod(getBuildContextMethod().ordinal());
- containerMeta.setImageName(txtImageName.getText());
+ containerDefinition.getContainerMeta().setContainerImageContext(getCurrentContext().ordinal());
+ containerDefinition.getContainerMeta().setImageName(txtImageName.getText());
- File containerImageFile = new File(txtContainerImageFile.getText());
- if (containerImageFile.exists())
- state.diskFile = containerImageFile;
- else
- state.diskFile = getDummyFile();
-
- switch (containerDefinition.getBuildContextMethod()) {
- case FILE:
+ switch (containerDefinition.getContainerImageContext()) {
+ case DOCKERFILE:
containerDefinition.setContainerRecipe(state.descriptionFile);
+ state.diskFile = getDummyFile();
break;
- case IMAGE_REPO:
- containerMeta.setImageRepo(txtImageRepo.getText());
+ case IMAGE_REPOSITORY:
+ containerDefinition.getContainerMeta().setImageRepo(txtImageRepo.getText());
+ state.diskFile = getDummyFile();
state.descriptionFile = getDummyFile();
case GIT_REPOSITORY:
- containerMeta.setBuildContextUrl(txtGitRepo.getText());
+ containerDefinition.getContainerMeta().setBuildContextUrl(txtGitRepo.getText());
+ state.diskFile = getDummyFile();
state.descriptionFile = getDummyFile();
break;
+ case DOCKER_ARCHIVE:
+ state.diskFile = new File(txtImageTar.getText());
+ state.descriptionFile = getDummyFile();
}
return containerDefinition.createVirtualizationConfig();
}
@@ -321,6 +316,29 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
state.uuid = existingImage.getImageBaseId();
state.name = existingImage.getImageName();
}
+
+ // TODO copy/paste from ImageCreationWizard.wantFinish()
+ // Do this only if the user wants to upload a new image version!
+ if (existingImage != null) {
+ // 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,
+ ByteBuffer.wrap(state.virtualizationConfig.getConfigurationAsByteArray()));
+ } catch (WrappedException e) {
+ ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage);
+ return false;
+ } catch (IOException e) {
+ Gui.showMessageBox(this,
+ I18n.PAGE.getString("ImageUpload.Message.error.uploadInitiatorFailed"),
+ MessageType.ERROR, LOGGER, e);
+ return false;
+ }
+ }
+ // Start the hash check now
+ state.upload.startHashing();
+ }
return true;
}
@@ -331,10 +349,7 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
Pattern p = Pattern.compile("[Dd]ockerfile");
Matcher m = p.matcher(f.getName());
- boolean accept = false;
- if ((f.isFile() && m.matches()) || f.isDirectory())
- accept = true;
- return accept;
+ return (f.isFile() && m.matches()) || f.isDirectory();
}
@Override public String getDescription() {
@@ -346,10 +361,7 @@ public class ContainerUploadPage extends ContainerUploadPageLayout {
@Override public boolean accept(File f) {
- boolean accept = false;
- if ((f.isFile() && f.toString().endsWith(".tar")) || f.isDirectory())
- accept = true;
- return accept;
+ return (f.isFile() && f.toString().endsWith(".tar")) || f.isDirectory();
}
@Override public String getDescription() {