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
