Tomas Jelinek has uploaded a new change for review.

Change subject: userportal,webadmin: keep proper USB support selection
......................................................................

userportal,webadmin: keep proper USB support selection

There were 2 problems:
1: the UnitVmModel.initUsbPolicy() did set the USB policy always
   to "disabled".
   Fixed by making sure that if the previously selected still applys than
   select it

2: The UnitVmModel.updateDisplayProtocol() have delegated the selection of the
   old display protocol to behavior.postDisplayTypeItemChanged which is too
   late, because meanwhile the VNC has been selected by
   getDisplayProtocol().setItems() which fired an appropriate event which in
   turn changed the USB support to "disabled"
   Fixed by removing the logic from VmModelBehaviorBase and moved it into the
   updateDisplayProtocol() to make sure the event is fired only when needed.

Change-Id: I7e1b1048784e9d0c289fab13b4d8b9b80afd6cc9
Bug-Url: https://bugzilla.redhat.com/966415
Bug-Url: https://bugzilla.redhat.com/1080144
Bug-Url: https://bugzilla.redhat.com/1147527
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
2 files changed, 22 insertions(+), 53 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/80/33480/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index b6a96e8..2fdc256 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -1681,6 +1682,9 @@
         }
 
         getUsbPolicy().setIsChangable(true);
+
+        UsbPolicy prevSelectedUsbPolicy = getUsbPolicy().getSelectedItem();
+
         if (Version.v3_1.compareTo(cluster.getcompatibility_version()) > 0) {
             if (AsyncDataProvider.isWindowsOsType(osType)) {
                 getUsbPolicy().setItems(Arrays.asList(
@@ -1689,7 +1693,6 @@
                         ));
             } else {
                 getUsbPolicy().setItems(Arrays.asList(UsbPolicy.DISABLED));
-                getUsbPolicy().setSelectedItem(UsbPolicy.DISABLED);
                 getUsbPolicy().setIsChangable(false);
             }
         }
@@ -1714,7 +1717,12 @@
             getUsbPolicy().setIsChangable(false);
         }
 
-        getUsbPolicy().setSelectedItem(UsbPolicy.DISABLED);
+        Collection<UsbPolicy> policies = getUsbPolicy().getItems();
+        if (policies.contains(prevSelectedUsbPolicy)) {
+            getUsbPolicy().setSelectedItem(prevSelectedUsbPolicy);
+        } else if (policies.size() > 0) {
+            getUsbPolicy().setSelectedItem(policies.iterator().next());
+        }
     }
 
     private void initDisplayProtocol()
@@ -1725,6 +1733,7 @@
     private void updateDisplayProtocol()
     {
         DisplayType oldDisplayProtocolOption = null;
+        EntityModel<DisplayType> oldDisplayProtocolEntity = null;
 
         if (getDisplayProtocol().getSelectedItem() != null) {
             oldDisplayProtocolOption = 
getDisplayProtocol().getSelectedItem().getEntity();
@@ -1745,6 +1754,9 @@
             
vncProtocol.setTitle(ConstantsManager.getInstance().getConstants().VNCTitle());
             vncProtocol.setEntity(DisplayType.vnc);
             displayProtocolOptions.add(vncProtocol);
+            if (DisplayType.vnc == oldDisplayProtocolOption) {
+                oldDisplayProtocolEntity = vncProtocol;
+            }
         }
 
         if (displayTypes.contains(DisplayType.qxl)) {
@@ -1752,11 +1764,16 @@
             
spiceProtocol.setTitle(ConstantsManager.getInstance().getConstants().spiceTitle());
             spiceProtocol.setEntity(DisplayType.qxl);
             displayProtocolOptions.add(spiceProtocol);
+            if (oldDisplayProtocolOption == DisplayType.qxl) {
+                oldDisplayProtocolEntity = spiceProtocol;
+            }
         }
 
-        getDisplayProtocol().setItems(displayProtocolOptions);
-
-        behavior.postDisplayTypeItemChanged(oldDisplayProtocolOption);
+        if (displayProtocolOptions.contains(oldDisplayProtocolEntity)) {
+            getDisplayProtocol().setItems(displayProtocolOptions, 
oldDisplayProtocolEntity);
+        } else if (displayProtocolOptions.size() > 0) {
+            getDisplayProtocol().setItems(displayProtocolOptions, 
displayProtocolOptions.iterator().next());
+        }
     }
 
     private void initFirstBootDevice()
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index e3e4c03..2d2dde6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -14,7 +14,6 @@
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskInterface;
-import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
@@ -276,53 +275,6 @@
         
getModel().getTimeZone().setSelectedItem(Linq.firstOrDefault(timeZones, new 
Linq.TimeZonePredicate(selectedTimeZone)));
         
getModel().getTimeZone().setChangeProhibitionReason(constants.timeZoneNotChangeableForLinuxVms());
         getModel().getTimeZone().setIsChangable(!getModel().getIsLinuxOS());
-    }
-
-    /**
-     * This method checks the item that will be selected.
-     * For a good UX, if the getItems contains the last selected item, this 
one not will be changed.
-     * @param oldDisplayProtocolOption
-     */
-    public void postDisplayTypeItemChanged(DisplayType 
oldDisplayProtocolOption) {
-
-        List<DisplayType> displayProtocolOptions = new 
ArrayList<DisplayType>();
-
-        if (getModel().getDisplayProtocol().getItems() != null) {
-            for (EntityModel<DisplayType> item : 
(ArrayList<EntityModel<DisplayType>>) 
getModel().getDisplayProtocol().getItems()) {
-                displayProtocolOptions.add(item.getEntity());
-            }
-        }
-
-        if (oldDisplayProtocolOption != null
-                && displayProtocolOptions.contains(oldDisplayProtocolOption)) {
-            selectDisplayProtocol(oldDisplayProtocolOption);
-        }
-
-    }
-
-    private void selectDisplayProtocol(DisplayType displayProtocol) {
-        if (getModel().getDisplayProtocol().getItems() == null)
-            return;
-
-        EntityModel selectedDisplayProtocol = null;
-        boolean isFirst = true;
-        for (Object item : getModel().getDisplayProtocol().getItems())
-        {
-            EntityModel a = (EntityModel) item;
-            if (isFirst)
-            {
-                selectedDisplayProtocol = a;
-                isFirst = false;
-            }
-            DisplayType dt = (DisplayType) a.getEntity();
-            if (dt == displayProtocol)
-            {
-                selectedDisplayProtocol = a;
-                break;
-            }
-        }
-
-        
getModel().getDisplayProtocol().setSelectedItem(selectedDisplayProtocol);
     }
 
     public TimeZoneType getTimeZoneType() {


-- 
To view, visit http://gerrit.ovirt.org/33480
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7e1b1048784e9d0c289fab13b4d8b9b80afd6cc9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to