Gilad Chaplik has uploaded a new change for review.

Change subject: userportal: set grid's items only on change
......................................................................

userportal: set grid's items only on change

The vms grid rendering takes too long in some
browsers, so the rendering (setItems()) will take place only
when there is a change in one of the shown elements.
in any case in edit dialog, the vm will be fetched
from server, instead of the table.

note: VM comparator methods were pulled up to serve both basic
and advanced models.

Change-Id: I8bd8c3cb312f89125e8c0a0182f49fe74f9f02d1
Signed-off-by: Gilad Chaplik <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
3 files changed, 100 insertions(+), 86 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/79/10579/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
index d0f40fa..e17c381 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
@@ -4,6 +4,8 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -303,4 +305,57 @@
 
         return null;
     }
+
+    public List<UserPortalItemModel> refreshItems(List<UserPortalItemModel> 
items, List<UserPortalItemModel> currentItems, List<UserPortalItemModel> 
removeItems) {
+        List<UserPortalItemModel> refreshItems = new 
ArrayList<UserPortalItemModel>();
+        Map<Guid, UserPortalItemModel> itemsMap = toMap(items);
+        Map<Guid, UserPortalItemModel> currentItemsMap = toMap(currentItems);
+        List<UserPortalItemModel> newCurrentItems = new 
ArrayList<UserPortalItemModel>();
+        for (Entry<Guid, UserPortalItemModel> entry : itemsMap.entrySet()) {
+            UserPortalItemModel value = currentItemsMap.get(entry.getKey());
+            // added value || should be refreshed
+            if (value == null || shouldBeRefreshed(value, entry.getValue())) {
+                refreshItems.add(entry.getValue());
+            }
+            newCurrentItems.add(entry.getValue());
+            currentItemsMap.remove(entry.getKey());
+        }
+        // add all removed items left in currItems
+        removeItems.addAll(currentItemsMap.values());
+
+        currentItems.clear();
+        currentItems.addAll(newCurrentItems);
+
+        return refreshItems;
+    }
+
+    private boolean shouldBeRefreshed(UserPortalItemModel current, 
UserPortalItemModel newItem) {
+        if (current.getEntity() instanceof vm_pools) {
+            vm_pools currentPool = (vm_pools) current.getEntity();
+            vm_pools newPool = (vm_pools) newItem.getEntity();
+            if (!currentPool.equals(newPool)) {
+                return true;
+            }
+
+        } else if (current.getEntity() instanceof VM) {
+            VM currentVm = (VM) current.getEntity();
+            VM newVm = (VM) newItem.getEntity();
+            if (!currentVm.getStaticData().equals(newVm.getStaticData()) ||
+                    !currentVm.getStatus().equals(newVm.getStatus())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    protected Map<Guid, UserPortalItemModel> toMap(List<UserPortalItemModel> 
items) {
+        Map<Guid, UserPortalItemModel> map = new HashMap<Guid, 
UserPortalItemModel>();
+        if (items != null) {
+            for (UserPortalItemModel item : items) {
+                map.put(item.getId(), item);
+            }
+        }
+        return map;
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
index e244e81..fb4ae30 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
@@ -3,8 +3,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.vm_pools;
@@ -367,60 +365,5 @@
         if (command.getName().equals("closeVncInfo")) { //$NON-NLS-1$
             setWindow(null);
         }
-    }
-
-    public List<UserPortalItemModel> refreshItems(List<UserPortalItemModel> 
items,
-            List<UserPortalItemModel> currentItems,
-            List<UserPortalItemModel> removeItems) {
-        List<UserPortalItemModel> refreshItems = new 
ArrayList<UserPortalItemModel>();
-        Map<Guid, UserPortalItemModel> itemsMap = toMap(items);
-        Map<Guid, UserPortalItemModel> currentItemsMap = toMap(currentItems);
-        List<UserPortalItemModel> newCurrentItems = new 
ArrayList<UserPortalItemModel>();
-        for (Entry<Guid, UserPortalItemModel> entry : itemsMap.entrySet()) {
-            UserPortalItemModel value = currentItemsMap.get(entry.getKey());
-            // added value || should be refreshed
-            if (value == null || shouldBeRefreshed(value, entry.getValue())) {
-                refreshItems.add(entry.getValue());
-            }
-            newCurrentItems.add(entry.getValue());
-            currentItemsMap.remove(entry.getKey());
-        }
-        // add all removed items left in currItems
-        removeItems.addAll(currentItemsMap.values());
-
-        currentItems.clear();
-        currentItems.addAll(newCurrentItems);
-
-        return refreshItems;
-    }
-
-    private boolean shouldBeRefreshed(UserPortalItemModel current, 
UserPortalItemModel newItem) {
-        if (current.getEntity() instanceof vm_pools) {
-            vm_pools currentPool = (vm_pools) current.getEntity();
-            vm_pools newPool = (vm_pools) newItem.getEntity();
-            if (current.getStatus() != newItem.getStatus()) {
-                return true;
-            }
-
-        } else if (current.getEntity() instanceof VM) {
-            VM currentVm = (VM) current.getEntity();
-            VM newVm = (VM) newItem.getEntity();
-            if (currentVm.getStatus() != newVm.getStatus() ||
-                    !currentVm.getVmName().equals(newVm.getVmName())) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    private Map<Guid, UserPortalItemModel> toMap(List<UserPortalItemModel> 
items) {
-        Map<Guid, UserPortalItemModel> map = new HashMap<Guid, 
UserPortalItemModel>();
-        if (items != null) {
-            for (UserPortalItemModel item : items) {
-                map.put(item.getId(), item);
-            }
-        }
-        return map;
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
index 169ce83..dd60028 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
@@ -326,11 +326,12 @@
             OnPropertyChanged(new PropertyChangedEventArgs("Items")); 
//$NON-NLS-1$
 
             if (getSelectedItem() != null) {
-                UserPortalItemModel selectedItem = (UserPortalItemModel) 
getSelectedItem();
+                UserPortalItemModel selItem = (UserPortalItemModel) 
getSelectedItem();
                 for (Object object : getItems()) {
                     UserPortalItemModel itemModel = (UserPortalItemModel) 
object;
-                    if 
(itemModel.getEntity().equals(selectedItem.getEntity())) {
-                        this.selectedItem = itemModel;
+                    if (itemModel.getEntity().equals(selItem.getEntity())) {
+                        selectedItem = itemModel;
+                        break;
                     }
                 }
             }
@@ -1033,39 +1034,42 @@
         {
             return;
         }
-
         if (getWindow() != null)
         {
             return;
         }
+        VM outerVm = (VM) selectedItem.getEntity();
+        AsyncDataProvider.GetVmById(new AsyncQuery(null, new 
INewAsyncCallback() {
 
-        VM vm = (VM) selectedItem.getEntity();
+            @Override
+            public void OnSuccess(Object m, Object returnValue) {
+                VM vm = (VM) returnValue;
+                UnitVmModel model = new UnitVmModel(new 
UserPortalExistingVmModelBehavior(vm));
 
-        UnitVmModel model = new UnitVmModel(new 
UserPortalExistingVmModelBehavior(vm));
+                model.setTitle(ConstantsManager.getInstance()
+                        .getMessages()
+                        .editVmTitle(vm.getVmType() == VmType.Server ? 
ConstantsManager.getInstance()
+                                .getConstants()
+                                .serverVmType()
+                                : 
ConstantsManager.getInstance().getConstants().desktopVmType()));
+                model.setHashName("edit_" + (vm.getVmType() == VmType.Server ? 
"server" : "desktop")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                model.setVmType(vm.getVmType());
+                model.setCustomPropertiesKeysList(CustomPropertiesKeysList);
 
-        model.setTitle(ConstantsManager.getInstance()
-                .getMessages()
-                .editVmTitle(vm.getVmType() == VmType.Server ? 
ConstantsManager.getInstance()
-                        .getConstants()
-                        .serverVmType()
-                        : 
ConstantsManager.getInstance().getConstants().desktopVmType()));
-        model.setHashName("edit_" + (vm.getVmType() == VmType.Server ? 
"server" : "desktop")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        model.setVmType(vm.getVmType());
-        model.setCustomPropertiesKeysList(CustomPropertiesKeysList);
+                setWindow(model);
 
-        setWindow(model);
+                model.Initialize(null);
 
-        model.Initialize(null);
-
-        UICommand tempVar = new UICommand("OnSave", this); //$NON-NLS-1$
-        tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
-        tempVar.setIsDefault(true);
-        model.getCommands().add(tempVar);
-        UICommand tempVar2 = new UICommand("Cancel", this); //$NON-NLS-1$
-        
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
-        tempVar2.setIsCancel(true);
-        model.getCommands().add(tempVar2);
-
+                UICommand tempVar = new UICommand("OnSave", 
UserPortalListModel.this); //$NON-NLS-1$
+                
tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
+                tempVar.setIsDefault(true);
+                model.getCommands().add(tempVar);
+                UICommand tempVar2 = new UICommand("Cancel", 
UserPortalListModel.this); //$NON-NLS-1$
+                
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+                tempVar2.setIsCancel(true);
+                model.getCommands().add(tempVar2);
+            }
+        }), outerVm.getId());
     }
 
     private void remove()
@@ -1610,6 +1614,9 @@
     }
 
     private Integer cachedMaxPriority;
+    private List<UserPortalItemModel> currentItems = null;
+    private final List<UserPortalItemModel> removeItems = new 
ArrayList<UserPortalItemModel>();
+    private List<UserPortalItemModel> refreshItems;
 
     private void VmModel_Priority_ItemsChanged()
     {
@@ -1734,7 +1741,7 @@
             List all = Linq.Concat(getvms(), filteredPools);
             Linq.Sort(all, new Linq.VmAndPoolByNameComparer());
 
-            ArrayList<Model> items = new ArrayList<Model>();
+            List<UserPortalItemModel> items = new 
ArrayList<UserPortalItemModel>();
             for (Object item : all)
             {
                 UserPortalItemModel model = new UserPortalItemModel(this, 
this);
@@ -1748,7 +1755,15 @@
             setCanConnectAutomatically(GetUpVms(items).size() == 1
                     && 
GetUpVms(items).get(0).getDefaultConsole().getConnectCommand().getIsExecutionAllowed());
 
-            setItems(items);
+            if (currentItems == null) {
+                currentItems = items;
+                refreshItems = items;
+            } else {
+                refreshItems = refreshItems(items, currentItems, removeItems);
+            }
+            if (refreshItems.size() > 0 || removeItems.size() > 0) {
+                setItems(items);
+            }
 
             setvms(null);
             setpools(null);
@@ -1770,4 +1785,5 @@
     protected String getListName() {
         return "UserPortalListModel"; //$NON-NLS-1$
     }
+
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8bd8c3cb312f89125e8c0a0182f49fe74f9f02d1
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to