Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Remove vNIC items changed listener before flush
......................................................................

webadmin: Remove vNIC items changed listener before flush

Upon flushing the AddRemoveRowWidget, it sets the backing ListModel's
items according to the entries in the widget. However, in the add/edit
VM dialog, since it is listening on the items changed event, this
re-initializes the widget just before it closes, thus adding a new
vNIC row. This patch moves the listening logic into
ProfilesInstanceTypeEditor and removes the listener prior to flushing
the widget, in order to avoid that flicker.

Change-Id: I5f153a3b19e467d41131015c7e2819c3ce365c22
Bug-Url: https://bugzilla.redhat.com/1020755
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
2 files changed, 38 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/20658/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.java
index 7e78769..afd4804 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/profile/ProfilesInstanceTypeEditor.java
@@ -18,6 +18,9 @@
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.IEventListener;
 
 public class ProfilesInstanceTypeEditor extends AddRemoveRowWidget<ListModel, 
VnicInstanceType, ProfileInstanceTypeEditor> implements HasElementId {
 
@@ -38,6 +41,9 @@
 
     private static final CommonApplicationMessages messages = 
GWT.create(CommonApplicationMessages.class);
 
+    private ListModel vnicsModel;
+    private ListModel profilesModel;
+    private IEventListener vnicsChangedListener;
     private Iterable<VnicProfileView> vnicProfiles;
     private List<VmNetworkInterface> vnics;
     private int realEntryCount;
@@ -53,13 +59,32 @@
         this.elementId = elementId;
     }
 
-    public void edit(ListModel model, Iterable<VnicProfileView> vnicProfiles) {
-        driver.edit(model);
+    public void edit(ListModel vnicsModel, ListModel profilesModel) {
+        this.vnicsModel = vnicsModel;
+        this.profilesModel = profilesModel;
 
-        this.vnicProfiles = (vnicProfiles == null) ? new 
ArrayList<VnicProfileView>() : vnicProfiles;
+        vnicsChangedListener = new IEventListener() {
+
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                init();
+            }
+        };
+        vnicsModel.getItemsChangedEvent().addListener(vnicsChangedListener);
+
+        driver.edit(vnicsModel);
+        init();
+    }
+
+    private void init() {
+        vnicProfiles = profilesModel.getItems();
+        if (vnicProfiles == null) {
+            vnicProfiles = new ArrayList<VnicProfileView>();
+        }
+
         vnics.clear();
         realEntryCount = 0;
-        Iterable<VnicInstanceType> values = model.getItems();
+        Iterable<VnicInstanceType> values = vnicsModel.getItems();
         if (values != null) {
             for (VnicInstanceType value : values) {
                 vnics.add(value.getNetworkInterface());
@@ -67,9 +92,13 @@
         }
         updateHeaderLabel();
 
-        init(model);
+        super.init(vnicsModel);
     }
 
+    /**
+     * @deprecated Please use {@link #edit(ListModel, ListModel)} instead.
+     **/
+    @Deprecated
     @Override
     public void edit(ListModel model) {
         edit(model, null);
@@ -78,9 +107,9 @@
 
     @Override
     public ListModel flush() {
-        ListModel model = driver.flush();
-        flush(model);
-        return model;
+        vnicsModel.getItemsChangedEvent().removeListener(vnicsChangedListener);
+        flush(vnicsModel);
+        return driver.flush();
     }
 
     private void updateHeaderLabel() {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index d0bde94..2238d59 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -1167,15 +1167,7 @@
             }
         });
 
-        profilesInstanceTypeEditor.edit(object.getNicsWithLogicalNetworks(), 
object.getVnicProfiles().getItems());
-        
object.getNicsWithLogicalNetworks().getItemsChangedEvent().addListener(new 
IEventListener() {
-
-            @Override
-            public void eventRaised(Event ev, Object sender, EventArgs args) {
-                
profilesInstanceTypeEditor.edit(object.getNicsWithLogicalNetworks(), 
object.getVnicProfiles()
-                        .getItems());
-            }
-        });
+        profilesInstanceTypeEditor.edit(object.getNicsWithLogicalNetworks(), 
object.getVnicProfiles());
     }
 
     /**


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

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

Reply via email to