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

Reply via email to