Vojtech Szocs has uploaded a new change for review.

Change subject: webadmin: Handler cleanup in ModelListTreeViewModel
......................................................................

webadmin: Handler cleanup in ModelListTreeViewModel

Handlers registered in ModelListTreeViewModel are now
properly removed upon detaching tree widget from the DOM.

Change-Id: Ibcf5ee07191a94e4ca157cf6fe4230e0eaafc2f6
Signed-off-by: Vojtech Szocs <vsz...@redhat.com>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/EntityModelCellTree.java
2 files changed, 22 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/18667/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
index 6ecc401..cdcf483 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
@@ -5,6 +5,7 @@
 import java.util.List;
 import java.util.Set;
 
+import com.google.gwt.event.shared.HandlerRegistration;
 import org.ovirt.engine.ui.common.uicommon.model.TreeNodeModel;
 import org.ovirt.engine.ui.common.utils.ElementIdUtils;
 import org.ovirt.engine.ui.common.widget.tree.TreeModelWithElementId;
@@ -159,6 +160,9 @@
 
     private NodeSelectionHandler nodeSelectionHandler;
 
+    private final HandlerRegistration selectionModelChangeHandlerReg;
+    private final List<HandlerRegistration> nodeModelSelectionHandlerRegList = 
new ArrayList<HandlerRegistration>();
+
     private String elementIdPrefix = DOM.createUniqueId();
 
     public ModelListTreeViewModel() {
@@ -184,7 +188,7 @@
         };
 
         // Drive selection
-        selectionModel.addSelectionChangeHandler(new Handler() {
+        selectionModelChangeHandlerReg = 
selectionModel.addSelectionChangeHandler(new Handler() {
             @Override
             public void onSelectionChange(SelectionChangeEvent event) {
                 Set<M> selectedSet = selectionModel.getSelectedSet();
@@ -222,7 +226,7 @@
         if (nodeSelectionHandler == null) {
             nodeSelectionHandler = new NodeSelectionHandler(display);
         }
-        model.addSelectionHandler(nodeSelectionHandler);
+        
nodeModelSelectionHandlerRegList.add(model.addSelectionHandler(nodeSelectionHandler));
 
         // show value
         display.getSelectionModel().setSelected(model, model.getSelected());
@@ -232,6 +236,13 @@
         }
     }
 
+    public void removeHandlers() {
+        selectionModelChangeHandlerReg.removeHandler();
+        for (HandlerRegistration reg : nodeModelSelectionHandlerRegList) {
+            reg.removeHandler();
+        }
+    }
+
     public AsyncDataProvider<M> getAsyncTreeDataProvider() {
         return asyncTreeDataProvider;
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/EntityModelCellTree.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/EntityModelCellTree.java
index df7e1cd..f28b634 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/EntityModelCellTree.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/EntityModelCellTree.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.ui.webadmin.widget.editor;
 
+import com.google.gwt.event.logical.shared.AttachEvent;
 import org.ovirt.engine.ui.common.uicommon.model.TreeNodeModel;
 import org.ovirt.engine.ui.common.widget.tree.ElementIdCellTree;
 import org.ovirt.engine.ui.webadmin.uicommon.model.ModelListTreeViewModel;
@@ -22,6 +23,14 @@
 
     public EntityModelCellTree(CellTree.Resources res) {
         super(new ModelListTreeViewModel<T, M>(), null, res);
+        addAttachHandler(new AttachEvent.Handler() {
+            @Override
+            public void onAttachOrDetach(AttachEvent event) {
+                if (!event.isAttached()) {
+                    getTreeViewModel().removeHandlers();
+                }
+            }
+        });
     }
 
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibcf5ee07191a94e4ca157cf6fe4230e0eaafc2f6
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Vojtech Szocs <vsz...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to