Arik Hadas has uploaded a new change for review. Change subject: webadmin: drop import-as-clone popups ......................................................................
webadmin: drop import-as-clone popups These popup dialogs were complicated and not intuitive, so they are replaced by a different ui mechanism in the import dialog. Change-Id: I31b8cee780ce5f95a6f4085255927847b01ff994 Signed-off-by: Arik Hadas <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmImportGeneralModelForm.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmData.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmImportGeneralModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/backup/ImportVmFromExportDomainPopupView.java 5 files changed, 45 insertions(+), 223 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/39587/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmImportGeneralModelForm.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmImportGeneralModelForm.java index 775fd01..26a3ee0 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmImportGeneralModelForm.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmImportGeneralModelForm.java @@ -3,6 +3,7 @@ import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.gin.AssetProvider; import org.ovirt.engine.ui.common.uicommon.model.ModelProvider; +import org.ovirt.engine.ui.common.widget.editor.TextBoxChanger; import org.ovirt.engine.ui.common.widget.form.FormItem; import org.ovirt.engine.ui.common.widget.form.FormItem.DefaultValueCondition; import org.ovirt.engine.ui.common.widget.label.TextBoxLabel; @@ -17,7 +18,8 @@ interface Driver extends SimpleBeanEditorDriver<VmImportGeneralModel, VmImportGeneralModelForm> { } - TextBoxLabel name = new TextBoxLabel(); + @Path("name.entity") + TextBoxChanger name = new TextBoxChanger(); TextBoxLabel description = new TextBoxLabel(); @Path("OS") TextBoxLabel os = new TextBoxLabel(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmData.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmData.java index 16e5492..332b582 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmData.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmData.java @@ -12,11 +12,13 @@ private boolean templateExistsInSetup = true; private EntityModel<Boolean> collapseSnapshots; + private String vmName; public ImportVmData(VM vm) { setCollapseSnapshots(new EntityModel<>(true)); setEntity(vm); + vmName = vm.getName(); getClone().getEntityChangedEvent().addListener(new IEventListener<EventArgs>() { @Override public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { @@ -69,6 +71,6 @@ @Override public String getName() { - return getEntity().getName(); + return vmName; } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmImportGeneralModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmImportGeneralModel.java index d7c7275..4ab4f5c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmImportGeneralModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmImportGeneralModel.java @@ -16,15 +16,19 @@ import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EnumTranslator; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public class VmImportGeneralModel extends AbstractGeneralModel<ImportVmData> { private static final VmTemplateNameRenderer vmTemplateNameRenderer = new VmTemplateNameRenderer(); private static EnumTranslator translator = EnumTranslator.getInstance(); - private String name; + private EntityModel<String> name; private String description; private String template; private String definedMemory; @@ -56,6 +60,14 @@ private String compatibilityVersion; public VmImportGeneralModel() { + setName(new EntityModel<String>()); + + getName().getEntityChangedEvent().addListener(new IEventListener<EventArgs>() { + @Override + public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { + getEntity().getVm().setName(getName().getEntity()); + } + }); } @Override @@ -75,7 +87,7 @@ super.updateProperties(vm.getId()); - setName(vm.getName()); + getName().setEntity(vm.getName()); setDescription(vm.getVmDescription()); setQuotaName(vm.getQuotaName() != null ? vm.getQuotaName() : ""); //$NON-NLS-1$ setQuotaAvailable(vm.getQuotaEnforcementType() != null @@ -172,18 +184,14 @@ } } - public String getName() + public EntityModel<String> getName() { return name; } - public void setName(String value) + public void setName(EntityModel<String> value) { - if (!ObjectUtils.objectsEqual(name, value)) - { - name = value; - onPropertyChanged(new PropertyChangedEventArgs("Name")); //$NON-NLS-1$ - } + this.name = value; } public String getDescription() diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index 16c450c..634d226 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -4,11 +4,9 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.action.AddVmTemplateParameters; @@ -31,7 +29,6 @@ import org.ovirt.engine.core.common.action.VmManagementParametersBase; import org.ovirt.engine.core.common.action.VmOperationParameterBase; import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode; -import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.Tags; import org.ovirt.engine.core.common.businessentities.VDSGroup; @@ -40,8 +37,8 @@ import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.businessentities.storage.Disk; -import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; +import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -85,18 +82,11 @@ import org.ovirt.engine.ui.uicommonweb.models.configure.ChangeCDModel; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.affinity_groups.list.VmAffinityGroupListModel; -import org.ovirt.engine.ui.uicommonweb.models.storage.ImportCloneModel; import org.ovirt.engine.ui.uicommonweb.models.tags.TagListModel; import org.ovirt.engine.ui.uicommonweb.models.tags.TagModel; import org.ovirt.engine.ui.uicommonweb.models.templates.VmBaseListModel; import org.ovirt.engine.ui.uicommonweb.models.userportal.AttachCdModel; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; -import org.ovirt.engine.ui.uicommonweb.validation.I18NNameValidation; -import org.ovirt.engine.ui.uicommonweb.validation.IValidation; -import org.ovirt.engine.ui.uicommonweb.validation.LengthValidation; -import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; -import org.ovirt.engine.ui.uicommonweb.validation.NotInCollectionValidation; -import org.ovirt.engine.ui.uicommonweb.validation.ValidationResult; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; @@ -2486,12 +2476,6 @@ //// Temporary Code //// //////////////////////// - protected List<Object> objectsToClone; - protected Map<Guid, Object> cloneObjectMap; - /** used to save the names that were assigned for VMs which are going - * to be created using import in case of choosing multiple VM imports */ - protected Set<String> assignedVmNames = new HashSet<>(); - private void onRestoreFromExportDomain() { ImportVmFromExportDomainModel importModel = (ImportVmFromExportDomainModel) getWindow(); if (importModel.getProgress() != null) { @@ -2501,49 +2485,20 @@ if (!importModel.validate()) { return; } - cloneObjectMap = new HashMap<>(); - objectsToClone = new ArrayList<>(); + boolean valid = true; for (Object object : importModel.getItems()) { - ImportEntityData<Object> item = (ImportEntityData<Object>) object; + ImportVmData item = (ImportVmData) object; if (item.getClone().getEntity()) { - objectsToClone.add(object); + valid = false; } } - executeImportClone(importModel); - } - private void executeImportClone(final ImportVmFromExportDomainModel importModel) { - if (objectsToClone.size() == 0) { - clearCachedAssignedVmNames(); - executeImport(importModel); + if (!valid) { return; } - ImportCloneModel entity = new ImportCloneModel(); - Object object = objectsToClone.iterator().next(); - entity.setEntity(object); - entity.setTitle(ConstantsManager.getInstance().getConstants().ok()); - entity.setHelpTag(HelpTag.import_conflict); - entity.setHashName("import_conflict"); //$NON-NLS-1$ - UICommand command = new UICommand(CMD_IMPORT_CLONED_VM, new BaseCommandTarget() { - @Override - public void executeCommand(UICommand uiCommand) { - VmListModel.this.onImportVmAsClone(importModel); - } - }); - command.setTitle(ConstantsManager.getInstance().getConstants().ok()); - command.setIsDefault(true); - entity.getCommands().add(command); - command = new UICommand(CMD_CANCEL, this); //$NON-NLS-1$ - command.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - command.setIsCancel(true); - entity.getCommands().add(command); - setConfirmWindow(entity); - } - - private void clearCachedAssignedVmNames() { - assignedVmNames.clear(); + executeImport(importModel); } protected void executeImport(ImportVmFromExportDomainModel importModel) { @@ -2585,16 +2540,11 @@ if (((ImportVmData) item).isExistsInSystem() || ((ImportVmData) item).getClone().getEntity()) { - if (!cloneObjectMap.containsKey(vm.getId())) { - continue; - } prm.setImportAsNewEntity(true); prm.setCopyCollapse(true); - prm.getVm().setName(((ImportVmData) cloneObjectMap.get(vm.getId())).getVm().getName()); } prms.add(prm); - } importModel.startProgress(null); @@ -2609,7 +2559,6 @@ vmListModel.stopProgress(); vmListModel.setConfirmWindow(null); vmListModel.setWindow(null); - vmListModel.clearCachedAssignedVmNames(); List<VdcReturnValueBase> retVals = result.getReturnValue(); if (retVals != null @@ -2652,160 +2601,6 @@ } }, this); - } - - private void onImportVmAsClone(ImportVmFromExportDomainModel importModel) { - ImportCloneModel cloneModel = (ImportCloneModel) getConfirmWindow(); - if (cloneModel.getApplyToAll().getEntity()) { - if (!cloneModel.getNoClone().getEntity()) { - String suffix = cloneModel.getSuffix().getEntity(); - if (!validateSuffix(suffix, cloneModel.getSuffix())) { - return; - } - for (Object object : objectsToClone) { - setObjectName(object, suffix, true); - cloneObjectMap.put((Guid) ((IVdcQueryable) (((ImportEntityData<Object>) object).getEntity())).getQueryableId(), - object); - } - } - objectsToClone.clear(); - } else { - Object object = cloneModel.getEntity(); - if (!cloneModel.getNoClone().getEntity()) { - String vmName = cloneModel.getName().getEntity(); - if (!validateName(vmName, cloneModel.getName(), getClonedNameValidators(object))) { - return; - } - setObjectName(object, vmName, false); - cloneObjectMap.put((Guid) ((IVdcQueryable) ((ImportEntityData<Object>) object).getEntity()).getQueryableId(), - object); - } - objectsToClone.remove(object); - } - - setConfirmWindow(null); - executeImportClone(importModel); - } - - protected String getObjectName(Object object) { - return ((ImportVmData) object).getVm().getName(); - } - - protected void setObjectName(Object object, String name) { - ((ImportVmData) object).getVm().setName(name); - } - - private void setObjectName(Object object, String input, boolean isSuffix) { - String nameForTheClonedVm = isSuffix ? getObjectName(object) + input : input; - setObjectName(object, nameForTheClonedVm); - assignedVmNames.add(nameForTheClonedVm); - } - - protected boolean validateName(String newVmName, EntityModel entity, IValidation[] validators) { - EntityModel temp = new EntityModel(); - temp.setIsValid(true); - temp.setEntity(newVmName); - temp.validateEntity(validators); - if (!temp.getIsValid()) { - entity.setInvalidityReasons(temp.getInvalidityReasons()); - entity.setIsValid(false); - } - - return temp.getIsValid(); - } - - protected boolean validateSuffix(String suffix, EntityModel entityModel) { - for (Object object : objectsToClone) { - VM vm = ((ImportVmData) object).getVm(); - if (!validateName(vm.getName() + suffix, entityModel, getClonedAppendedNameValidators(object))) { - return false; - } - } - return true; - } - - protected IValidation[] getClonedAppendedNameValidators(Object object) { - final int maxClonedNameLength = getMaxClonedNameLength(object); - return new IValidation[] { - new NotEmptyValidation(), - new LengthValidation(maxClonedNameLength), - new I18NNameValidation() { - @Override - protected String composeMessage() { - return ConstantsManager.getInstance() - .getMessages() - .newNameWithSuffixCannotContainBlankOrSpecialChars(maxClonedNameLength); - }; - }, - new UniqueClonedAppendedNameValidator(assignedVmNames) - }; - } - - protected IValidation[] getClonedNameValidators(Object object) { - final int maxClonedNameLength = getMaxClonedNameLength(object); - return new IValidation[] { - new NotEmptyValidation(), - new LengthValidation(maxClonedNameLength), - new I18NNameValidation() { - @Override - protected String composeMessage() { - return ConstantsManager.getInstance() - .getMessages() - .nameMustConataionOnlyAlphanumericChars(maxClonedNameLength); - }; - }, - new UniqueClonedNameValidator(assignedVmNames) - }; - } - - protected int getMaxClonedNameLength(Object object) { - VM vm = ((ImportVmData) object).getVm(); - return AsyncDataProvider.getInstance().isWindowsOsType(vm.getOs()) ? AsyncDataProvider.getInstance().getMaxVmNameLengthWin() - : AsyncDataProvider.getInstance().getMaxVmNameLengthNonWin(); - } - - private static class UniqueClonedNameValidator extends NotInCollectionValidation { - - public UniqueClonedNameValidator(Collection<?> collection) { - super(collection); - } - - @Override - public ValidationResult validate(Object value) { - ValidationResult result = super.validate(value); - if (!result.getSuccess()) { - result.getReasons().add(getAlreadyAssignedClonedNameMessage()); - } - return result; - } - - protected String getAlreadyAssignedClonedNameMessage() { - return ConstantsManager.getInstance() - .getMessages() - .alreadyAssignedClonedVmName(); - } - } - - private static class UniqueClonedAppendedNameValidator extends NotInCollectionValidation { - - public UniqueClonedAppendedNameValidator(Collection<?> collection) { - super(collection); - } - - @Override - public ValidationResult validate(Object value) { - ValidationResult result = super.validate(value); - if (!result.getSuccess()) { - result.getReasons().add(getSuffixCauseToClonedNameCollisionMessage((String) value)); - } - return result; - } - - protected String getSuffixCauseToClonedNameCollisionMessage(String existingName) { - return ConstantsManager.getInstance() - .getMessages() - .suffixCauseToClonedVmNameCollision(existingName); - } } @Override diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/backup/ImportVmFromExportDomainPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/backup/ImportVmFromExportDomainPopupView.java index 63a7684..7550e22 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/backup/ImportVmFromExportDomainPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/backup/ImportVmFromExportDomainPopupView.java @@ -238,10 +238,25 @@ protected void initMainTable() { this.table = new ListModelObjectCellTable<>(); + AbstractImageResourceColumn<Object> aa = new AbstractImageResourceColumn<Object>() { + @Override + public ImageResource getValue(Object object) { + return ((ImportVmData) object).isExistsInSystem() ? resources.alertImage() : null; + } + @Override + public SafeHtml getTooltip(Object object) { + return SafeHtmlUtils.fromSafeConstant("arik"); //$NON-NLS-1$ + } + }; + table.addColumn(aa, constants.empty(), "10px"); //$NON-NLS-1$ + AbstractTextColumn<Object> nameColumn = new AbstractTextColumn<Object>() { @Override public String getValue(Object object) { - return ((ImportVmData) object).getVm().getName(); + String originalName = ((ImportVmData) object).getName(); + String givenName = ((ImportVmData) object).getVm().getName(); + return originalName.equals(givenName) ? givenName : + givenName + " (" + originalName + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } }; table.addColumn(nameColumn, constants.nameVm(), "150px"); //$NON-NLS-1$ -- To view, visit https://gerrit.ovirt.org/39587 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I31b8cee780ce5f95a6f4085255927847b01ff994 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
