diff options
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java index 645587c6..9ade4587 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FilenameFilter; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import javax.swing.JFileChooser; @@ -35,9 +36,14 @@ import org.openslx.dozmod.thrift.WrappedException; import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.sat.thrift.version.Feature; import org.openslx.thrifthelper.TConst; -import org.openslx.vm.VmMetaData; -import org.openslx.vm.VmwareMetaData; -import org.openslx.vm.VmMetaData.HardDisk; +import org.openslx.virtualization.configuration.VirtualizationConfigurationVmware; +import org.openslx.virtualization.configuration.data.ConfigurationDataDozModClientToDozModServer; +import org.openslx.virtualization.configuration.logic.ConfigurationLogicDozModClientToDozModServer; +import org.openslx.virtualization.configuration.transformation.TransformationException; +import org.openslx.virtualization.configuration.VirtualizationConfiguration; +import org.openslx.virtualization.configuration.VirtualizationConfiguration.HardDisk; +import org.openslx.virtualization.configuration.VirtualizationConfigurationQemu; +import org.openslx.virtualization.configuration.VirtualizationConfigurationVirtualBox; import org.openslx.vm.disk.DiskImage; import org.openslx.vm.disk.DiskImage.ImageFormat; import org.openslx.vm.disk.DiskImageException; @@ -59,12 +65,12 @@ public class ImageUploadPage extends ImageUploadPageLayout { private ImageDetailsRead existingImage = null; private final FileNameExtensionFilter allSupportedFilter; - private final FileNameExtensionFilter vmxFilter = new FileNameExtensionFilter("VMware Virtual Machine", - "vmx"); + private final FileNameExtensionFilter vmxFilter = new FileNameExtensionFilter( + "VMware Virtual Machine", VirtualizationConfigurationVmware.FILE_NAME_EXTENSION); private final FileNameExtensionFilter vboxFilter = new FileNameExtensionFilter( - "VirtualBox Virtual Machine", "vbox"); + "VirtualBox Virtual Machine", VirtualizationConfigurationVirtualBox.FILE_NAME_EXTENSION); private final FileNameExtensionFilter qemuFilter = new FileNameExtensionFilter( - "QEMU Virtual Machine", "xml"); + "QEMU Virtual Machine", VirtualizationConfigurationQemu.FILE_NAME_EXTENSION); private final FileNameExtensionFilter ovfFilter = new FileNameExtensionFilter( "OVF Virtual Machine Format", "ovf"); @@ -104,9 +110,15 @@ public class ImageUploadPage extends ImageUploadPageLayout { // initialize allSupportedFilter depending on whether multiple hypervisors // are supported or not if (Session.hasFeature(Feature.MULTIPLE_HYPERVISORS)) { - allSupportedFilter = new FileNameExtensionFilter("All Supported", "vmx", "ovf", "vbox", "xml", "ova"); + allSupportedFilter = new FileNameExtensionFilter("All Supported", + VirtualizationConfigurationVmware.FILE_NAME_EXTENSION, + VirtualizationConfigurationVirtualBox.FILE_NAME_EXTENSION, + VirtualizationConfigurationQemu.FILE_NAME_EXTENSION, + "ovf", "ova"); } else { - allSupportedFilter = new FileNameExtensionFilter("All Supported", "vmx", "ovf", "ova"); + allSupportedFilter = new FileNameExtensionFilter("All Supported", + VirtualizationConfigurationVmware.FILE_NAME_EXTENSION, + "ovf", "ova"); } btnBrowseForImage.requestFocus(); } @@ -203,9 +215,10 @@ public class ImageUploadPage extends ImageUploadPageLayout { askForConversion(file); return; } + try { // gets the metadata object of the selected VM depending on its type - state.meta = VmMetaData.getInstance(MetaDataCache.getOperatingSystems(), file); + state.virtualizationConfig = VirtualizationConfiguration.getInstance(MetaDataCache.getOperatingSystems(), file); } catch (IOException e) { Gui.showMessageBox(this, I18n.PAGE.getString("ImageUpload.Message.error.couldNotGetMetadata", file.getPath()), @@ -214,22 +227,26 @@ public class ImageUploadPage extends ImageUploadPageLayout { return; } - if (state.meta == null || state.meta.getDisplayName() == null) { + try { + // transforms (filters) the virtualization configuration + final ConfigurationLogicDozModClientToDozModServer uploadLogic = new ConfigurationLogicDozModClientToDozModServer(); + uploadLogic.apply( state.virtualizationConfig, new ConfigurationDataDozModClientToDozModServer() ); + } catch (TransformationException e) { setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.invalidConfigFile")); setPageComplete(false); return; } - final String fileformat = state.meta.getVirtualizer().virtName; + final String virtualizerName = state.virtualizationConfig.getVirtualizer().getName(); // bail if multiple hypervisors are not supported - if (!(state.meta instanceof VmwareMetaData) && !Session.hasFeature(Feature.MULTIPLE_HYPERVISORS)) { + if (!(state.virtualizationConfig instanceof VirtualizationConfigurationVmware) && !Session.hasFeature(Feature.MULTIPLE_HYPERVISORS)) { setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.hypervisorNotSupported", - fileformat)); + virtualizerName)); setPageComplete(false); return; } // check if the user somehow changed the type of the VM - if (existingImage != null && !existingImage.virtId.equals(state.meta.getVirtualizer().virtId)) { + if (existingImage != null && !existingImage.virtId.equals(state.virtualizationConfig.getVirtualizer().getId())) { Virtualizer existingImageVirtualizer = MetaDataCache.getVirtualizerById(existingImage.virtId); String existingImageVirtualizerName = "<error>"; if (existingImageVirtualizer != null) @@ -240,15 +257,15 @@ public class ImageUploadPage extends ImageUploadPageLayout { return; } - List<HardDisk> hdds = state.meta.getHdds(); + List<HardDisk> hdds = state.virtualizationConfig.getHdds(); if (hdds.size() == 0 || hdds.get(0).diskImage == null) { - setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.noHDD", fileformat)); + setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.noHDD", virtualizerName)); setPageComplete(false); return; } if (hdds.size() > 1) { setErrorMessage( - I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.moreThanOneHDD", fileformat)); + I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.moreThanOneHDD", virtualizerName)); setPageComplete(false); return; // Allow to continue!? @@ -290,8 +307,9 @@ public class ImageUploadPage extends ImageUploadPageLayout { } // check if disk image format is supported by the hypervisor's supported disk image formats - final List<ImageFormat> supportedImageFormats = state.meta.getSupportedImageFormats(); - if (!diskFormat.isSupportedbyVirtualizer(supportedImageFormats)) { + final List<ImageFormat> supportedImageFormats = state.virtualizationConfig.getVirtualizer() + .getSupportedImageFormats(); + if (!diskFormat.isSupportedbyVirtualizer( supportedImageFormats )) { Gui.showMessageBox(I18n.PAGE.getString("ImageUpload.Message.warning.diskImageNotSupportedByHypervisor", Branding.getServiceName()), MessageType.WARNING, null, null); setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageNotSupportedByHypervisor")); @@ -300,7 +318,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { } // Warn user about snapshot - if (diskImageIsSnapshot || state.meta.isMachineSnapshot()) { + if (diskImageIsSnapshot || state.virtualizationConfig.isMachineSnapshot()) { Gui.showMessageBox(I18n.PAGE.getString("ImageUpload.Message.warning.diskImageSnapshot", Branding.getServiceName()), MessageType.WARNING, null, null); setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageSnapshot")); @@ -324,11 +342,11 @@ public class ImageUploadPage extends ImageUploadPageLayout { // User didn't enter a name yet or didn't change it -> set String imageName = txtImageName.getText(); if (imageName.isEmpty() || imageName.equals(lastDetectedName)) { - txtImageName.setText(state.meta.getDisplayName()); + txtImageName.setText(state.virtualizationConfig.getDisplayName()); } } - lastDetectedName = state.meta.getDisplayName(); - state.detectedOs = state.meta.getOs(); + lastDetectedName = state.virtualizationConfig.getDisplayName(); + state.detectedOs = state.virtualizationConfig.getOs(); txtImageFile.setText(file.getAbsolutePath()); // let the user know the upload is ready setErrorMessage(null); @@ -393,7 +411,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { if (state.upload == null) { try { state.upload = new UploadInitiator(state.uuid, state.diskFile, - state.meta.getFilteredDefinition()); + ByteBuffer.wrap(state.virtualizationConfig.getConfigurationAsByteArray())); } catch (WrappedException e) { ThriftError.showMessage(this, LOGGER, e.exception, e.displayMessage); return false; |