modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
| 46 ++++++----
1 file changed, 29 insertions(+), 17 deletions(-)
New commits:
commit a92b7bcace3265964f87fb656b45cf3102ad8708
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu May 31 17:53:02 2012 -0400
[BZ 827203] prevent infinite auto-switching between auto-group nodes occurs after
fast-clicking between two auto-group nodes
(
https://bugzilla.redhat.com/show_bug.cgi?id=827203)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
index ff99825..694f8b6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
@@ -1,6 +1,6 @@
/*
-fcontext * RHQ Management Platform
- * Copyright (C) 2005-2011 Red Hat, Inc.
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -92,7 +92,6 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGro
import
org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGroupDetailView;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceTreeDatasource.AutoGroupTreeNode;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceTreeDatasource.ResourceTreeNode;
-import
org.rhq.enterprise.gui.coregui.client.inventory.resource.factory.ResourceFactoryCreateWizard;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.factory.ResourceFactoryImportWizard;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.Log;
@@ -182,17 +181,30 @@ public class ResourceTreeView extends LocatableVLayout {
AutoGroupTreeNode agNode = (AutoGroupTreeNode) selectedRecord;
selectedNodeId = agNode.getID();
- getAutoGroupBackingGroup(agNode, new
AsyncCallback<ResourceGroup>() {
- public void onFailure(Throwable caught) {
-
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_selection(),
- caught);
- }
+ // [BZ 827203] Disable this view to prevent fast-click issues. It
will get re-enabled when
+ // the detail resource or group view is done with its
async init and calls
+ // notifyViewRenderedListeners() on itself.
+ disable();
- public void onSuccess(ResourceGroup result) {
- renderAutoGroup(result);
- }
- });
+ try {
+ getAutoGroupBackingGroup(agNode, new
AsyncCallback<ResourceGroup>() {
+ public void onSuccess(ResourceGroup result) {
+ renderAutoGroup(result);
+ }
+
+ public void onFailure(Throwable caught) {
+ // Make sure to re-enable ourselves.
+ enable();
+
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_selection(),
+ caught);
+ }
+ });
+ } catch (RuntimeException re) {
+ // Make sure to re-enable ourselves.
+ enable();
+
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_selection(), re);
+ }
} else {
// TODO: probably clicked on a subcategory, do we need a
message?
treeGrid.deselectRecord(selectedRecord);
@@ -246,7 +258,7 @@ public class ResourceTreeView extends LocatableVLayout {
private void getAutoGroupBackingGroup(final AutoGroupTreeNode agNode, final
AsyncCallback<ResourceGroup> callback) {
final ResourceGroupGWTServiceAsync resourceGroupService =
GWTServiceLookup.getResourceGroupService();
- // get the children tree nodes and build a child resourceId array
+ // get the children tree nodes and build a child resourceId array
TreeNode[] children = treeGrid.getTree().getChildren(agNode);
final int[] childIds = new int[children.length];
for (int i = 0, size = children.length; (i < size); ++i) {
@@ -262,13 +274,13 @@ public class ResourceTreeView extends LocatableVLayout {
resourceGroupService.findResourceGroupsByCriteria(criteria, new
AsyncCallback<PageList<ResourceGroup>>() {
public void onFailure(Throwable caught) {
-
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_node(), caught);
+ callback.onFailure(new
RuntimeException(MSG.view_tree_common_loadFailed_node(), caught));
}
public void onSuccess(PageList<ResourceGroup> result) {
if (result.isEmpty()) {
// Not found, create new backing group
- // the backing group name is a display name using a unique
parentResource-resourceType combo
+ // the backing group name is a display name using a unique
parentResource-resourceType combo
final String backingGroupName = agNode.getBackingGroupName();
ResourceGroup backingGroup = new ResourceGroup(backingGroupName);
backingGroup.setAutoGroupParentResource(agNode.getParentResource());
@@ -277,7 +289,7 @@ public class ResourceTreeView extends LocatableVLayout {
resourceGroupService.createPrivateResourceGroup(backingGroup,
childIds,
new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
-
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_create(), caught);
+ callback.onFailure(new
RuntimeException(MSG.view_tree_common_loadFailed_create(), caught));
}
public void onSuccess(ResourceGroup result) {
@@ -299,7 +311,7 @@ public class ResourceTreeView extends LocatableVLayout {
resourceGroupService.setAssignedResources(backingGroup.getId(),
childIds, false,
new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
-
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_update(), caught);
+ callback.onFailure(new
RuntimeException(MSG.view_tree_common_loadFailed_update(), caught));
}
public void onSuccess(Void result) {