diff options
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.java | 142 |
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() { |