package org.openslx.dozmod.gui.wizard; import java.awt.Window; import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; import org.openslx.bwlp.thrift.iface.ImageVersionWrite; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.wizard.page.ImageCustomPermissionPage; import org.openslx.dozmod.gui.wizard.page.ImageMetaDataPage; import org.openslx.dozmod.gui.wizard.page.ImageUploadPage; import org.openslx.dozmod.state.UploadWizardState; import org.openslx.dozmod.thrift.Session; import org.openslx.thrifthelper.ThriftManager; @SuppressWarnings("serial") public class ImageWizard extends Wizard { private final static Logger LOGGER = Logger.getLogger(ImageWizard.class); private final UploadWizardState uploadWizardState = new UploadWizardState();; protected ImageUploadPage imageUploadPage; protected ImageMetaDataPage imageMetaDataPage; protected ImageCustomPermissionPage imageCustomPermissionPage; /** * Wizard for creating or editing an image * * @param editExistingImage whether to create new or edit existing image */ public ImageWizard(Window parent) { super(parent); imageUploadPage = new ImageUploadPage(this, uploadWizardState); imageMetaDataPage = new ImageMetaDataPage(this, uploadWizardState); imageCustomPermissionPage = new ImageCustomPermissionPage(this, uploadWizardState); addPage(imageUploadPage); addPage(imageMetaDataPage); addPage(imageCustomPermissionPage); } @Override public String getWindowTitle() { return "Neues Image erzeugen"; } @Override public boolean performFinish() { // TODO evaluate table state and create the map of permissions // // since we only started the download and created a "blank" image entry // we can here do all the sanity checks on the fields of UploadWizardState // and react accordingly. // check state if (!isStateValid()) { LOGGER.error("Invalid state!"); return false; } else { // TODO run the actually request over external threaded class try { // push to sat ThriftManager.getSatClient().updateImageBase(Session.getSatelliteToken(), uploadWizardState.uuid.toString(), imageBaseWriteFromState()); } catch (TException e) { LOGGER.error("Fail to push image metadata to satellite: ", e); return false; } } // push permissions to satellite server if (uploadWizardState.permissionList != null) { // user skipped permission list stuff try { ThriftManager.getSatClient().writeImagePermissions(Session.getSatelliteToken(), uploadWizardState.uuid, uploadWizardState.permissionList); } catch (TException e) { // TODO Auto-generated catch block LOGGER.error("Could not write permissions list to satellite: ", e); return false; } } try { // push to sat ThriftManager.getSatClient().updateImageVersion(Session.getSatelliteToken(), uploadWizardState.transferInformation.getToken(), new ImageVersionWrite(uploadWizardState.isEnabled, uploadWizardState.isRestricted)); } catch (TException e) { LOGGER.error("Could not set active/restricted flags to satellite: ", e); return false; } Gui.showMessageBox(this, "Creation of image worked :)", MessageType.INFO, LOGGER, null); return true; } private boolean isStateValid() { // debug purposes if (uploadWizardState.name == null || uploadWizardState.name.isEmpty()) { LOGGER.error("No name set in state!"); return false; } if (uploadWizardState.description == null || uploadWizardState.description.isEmpty()) { LOGGER.error("No description set in state!"); return false; } if (uploadWizardState.descriptionFile == null) { LOGGER.error("No description file set in state!"); return false; } else { if (!uploadWizardState.descriptionFile.canRead()) { LOGGER.error(uploadWizardState.descriptionFile.getAbsolutePath() + " cannot be read!"); return false; } } if (uploadWizardState.diskFile == null) { LOGGER.error("No disk file set in state!"); return false; } else { if (!uploadWizardState.diskFile.canRead()) { LOGGER.error(uploadWizardState.diskFile.getAbsolutePath() + " cannot be read!"); return false; } } if (uploadWizardState.selectedOs == null) { LOGGER.error("No OS set in state!"); return false; } else { if (!(uploadWizardState.selectedOs.isSetArchitecture() && uploadWizardState.selectedOs.isSetOsId() && uploadWizardState.selectedOs.isSetOsName() && uploadWizardState.selectedOs.isSetVirtualizerOsId())) { LOGGER.error("OS has missing fields: " + uploadWizardState.selectedOs.toString()); return false; } } if (uploadWizardState.meta == null) { LOGGER.error("No vm meta data set in state!"); return false; } if (uploadWizardState.permissions == null) { LOGGER.error("No permissions set in state!"); return false; } if (uploadWizardState.shareMode == null) { LOGGER.error("No share mode set in state!"); return false; } if (uploadWizardState.uuid == null) { LOGGER.error("No uuid set in state!"); return false; } return true; } private ImageBaseWrite imageBaseWriteFromState() { // build imageBaseWrite return new ImageBaseWrite(uploadWizardState.name, uploadWizardState.description, uploadWizardState.selectedOs.getOsId(), uploadWizardState.meta.getVirtualizer().getVirtId(), uploadWizardState.isTemplate, uploadWizardState.permissions, uploadWizardState.shareMode); } }