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
