Alexander Wels has uploaded a new change for review.

Change subject: webadmin: allow nested tags more than 2 levels deep
......................................................................

webadmin: allow nested tags more than 2 levels deep

- Fixed code to allow for nested tags to be assigned more
than 2 levels deep.
- Fixed leaking selection change handler.

Change-Id: I7dcb031aaf6cd279c9f439694184743db1b85eb8
Signed-off-by: Alexander Wels <aw...@redhat.com>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/ModelListTreeViewModel.java
2 files changed, 36 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/18610/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java
index 9a156df..3177b65 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AssignTagsPopupView.java
@@ -71,6 +71,12 @@
     }
 
     @Override
+    public void hide() {
+        super.hide();
+        tree.getTreeViewModel().removeSelectionChangeHandlers();
+    }
+
+    @Override
     public void edit(TagListModel object) {
         driver.edit(object);
 
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..a89382b 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
@@ -17,6 +17,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.logical.shared.SelectionEvent;
 import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
 import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
@@ -161,6 +162,8 @@
 
     private String elementIdPrefix = DOM.createUniqueId();
 
+    private HandlerRegistration selectionChangeHandlerRegistration;
+
     public ModelListTreeViewModel() {
         List<HasCell<M, ?>> cells = new ArrayList<HasCell<M, ?>>();
         cells.add(new CheckboxColumn());
@@ -184,29 +187,12 @@
         };
 
         // Drive selection
-        selectionModel.addSelectionChangeHandler(new Handler() {
+        selectionChangeHandlerRegistration = 
selectionModel.addSelectionChangeHandler(new Handler() {
             @Override
             public void onSelectionChange(SelectionChangeEvent event) {
                 Set<M> selectedSet = selectionModel.getSelectedSet();
                 HashSet<TreeNodeModel<?, ?>> removedSet = new 
HashSet<TreeNodeModel<?, ?>>();
-                for (TreeNodeModel<T, M> child : roots) {
-                    if (!selectedSet.contains(child) && child.getSelected()) {
-                        selectedSet.remove(child);
-                        removedSet.add(child);
-                    }
-                    for (TreeNodeModel<T, M> child1 : child.getChildren()) {
-                        if (!selectedSet.contains(child1) && 
child1.getSelected()) {
-                            selectedSet.remove(child1);
-                            removedSet.add(child1);
-                        }
-                        for (TreeNodeModel<T, M> child2 : 
child1.getChildren()) {
-                            if (!selectedSet.contains(child2) && 
child2.getSelected()) {
-                                selectedSet.remove(child2);
-                                removedSet.add(child2);
-                            }
-                        }
-                    }
-                }
+                updateSelectionSets(selectedSet, removedSet, roots);
                 for (M m : selectedSet) {
                     m.setSelected(true);
                 }
@@ -217,6 +203,31 @@
         });
     }
 
+    /**
+     * Recursively determine the set of changed nodes.
+     * @param selectedSet The set of selected nodes.
+     * @param removedSet The set of removed nodes.
+     * @param nodes The list of nodes to check against.
+     */
+    private void updateSelectionSets(Set<M> selectedSet, Set<TreeNodeModel<?, 
?>> removedSet, List<M> nodes) {
+        for (TreeNodeModel<T, M> node : nodes) {
+            if (!selectedSet.contains(node) && node.getSelected()) {
+                selectedSet.remove(node);
+                removedSet.add(node);
+            }
+            updateSelectionSets(selectedSet, removedSet, node.getChildren());
+        }
+    }
+
+    /**
+     * Remove the selection change handler.
+     */
+    public void removeSelectionChangeHandlers() {
+        if (selectionChangeHandlerRegistration != null) {
+            selectionChangeHandlerRegistration.removeHandler();
+        }
+    }
+
     public void UpdateSelection(M model, final HasData<M> display) {
         // Add Selection Listener
         if (nodeSelectionHandler == null) {


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

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

Reply via email to