modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
| 65 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
| 50 -------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
| 55 +++++++-
3 files changed, 88 insertions(+), 82 deletions(-)
New commits:
commit d47438f7a5a56de5539f8635a44aed53833837dc
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Aug 1 14:09:29 2011 -0400
[BZ 720456] fix so all child types are shown in manual-add dropdown on
Inventory>Child Resources view (
https://bugzilla.redhat.com/show_bug.cgi?id=720456)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
index f333ddf..de0dba6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
@@ -122,47 +122,54 @@ public class ResourceCompositeSearchView extends ResourceSearchView
{
});
if
(this.parentResourceComposite.getResourcePermission().isCreateChildResources()) {
- ResourceType parentType =
parentResourceComposite.getResource().getResourceType();
-
- // manual import type menu
- LinkedHashMap<String, ResourceType> importTypeValueMap = new
LinkedHashMap<String, ResourceType>();
+ addImportButton();
+ }
- for (ResourceType childType : parentType.getChildResourceTypes()) {
- if (childType.isSupportsManualAdd()) {
- importTypeValueMap.put(childType.getName(), childType);
- }
- }
- addTableAction(extendLocatorId("Import"),
MSG.common_button_import(), null, importTypeValueMap,
- new AbstractTableAction(TableActionEnablement.ALWAYS) {
+ super.configureTable();
+ }
- public void executeAction(ListGridRecord[] selection, Object
actionValue) {
-
ResourceFactoryImportWizard.showImportWizard(parentResourceComposite.getResource(),
- (ResourceType) actionValue);
- }
- });
+ private void addImportButton() {
+ ResourceType parentType =
parentResourceComposite.getResource().getResourceType();
- // creatable child type menu
- LinkedHashMap<String, ResourceType> createTypeValueMap = new
LinkedHashMap<String, ResourceType>();
+ // manual import type menu
+ // TODO: Use TreeMap instead, so the types will be sorted by name.
+ LinkedHashMap<String, ResourceType> importTypeValueMap = new
LinkedHashMap<String, ResourceType>();
- for (ResourceType childType : parentType.getChildResourceTypes()) {
- if (childType.isCreatable()) {
- createTypeValueMap.put(childType.getName(), childType);
- }
+ for (ResourceType childType : parentType.getChildResourceTypes()) {
+ if (childType.isSupportsManualAdd()) {
+ importTypeValueMap.put(childType.getName(), childType);
}
- if (!createTypeValueMap.isEmpty()) {
- addTableAction(extendLocatorId("CreateChild"),
MSG.common_button_create_child(), null,
- createTypeValueMap, new
AbstractTableAction(TableActionEnablement.ALWAYS) {
+ }
+ if (!importTypeValueMap.isEmpty()) {
+ addTableAction(extendLocatorId("Import"),
MSG.common_button_import(), null, importTypeValueMap,
+ new AbstractTableAction(TableActionEnablement.ALWAYS) {
public void executeAction(ListGridRecord[] selection, Object
actionValue) {
-
ResourceFactoryCreateWizard.showCreateWizard(parentResourceComposite.getResource(),
- (ResourceType) actionValue);
+
ResourceFactoryImportWizard.showImportWizard(parentResourceComposite.getResource(),
+ (ResourceType) actionValue);
}
});
- }
+ }
+
+ // creatable child type menu
+ // TODO: Use TreeMap instead, so the types will be sorted by name.
+ LinkedHashMap<String, ResourceType> createTypeValueMap = new
LinkedHashMap<String, ResourceType>();
+ for (ResourceType childType : parentType.getChildResourceTypes()) {
+ if (childType.isCreatable()) {
+ createTypeValueMap.put(childType.getName(), childType);
+ }
}
+ if (!createTypeValueMap.isEmpty()) {
+ addTableAction(extendLocatorId("CreateChild"),
MSG.common_button_create_child(), null,
+ createTypeValueMap, new AbstractTableAction(TableActionEnablement.ALWAYS)
{
- super.configureTable();
+ public void executeAction(ListGridRecord[] selection, Object
actionValue) {
+
ResourceFactoryCreateWizard.showCreateWizard(parentResourceComposite.getResource(),
+ (ResourceType) actionValue);
+ }
+ });
+ }
}
public ResourceComposite getParentResourceComposite() {
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 7149726..68ef419 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 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2010 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -60,7 +60,6 @@ import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.criteria.DashboardCriteria;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
-import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.dashboard.Dashboard;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.measurement.DataType;
@@ -68,7 +67,6 @@ import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.measurement.MeasurementSchedule;
import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
@@ -83,7 +81,6 @@ import
org.rhq.enterprise.gui.coregui.client.dashboard.portlets.inventory.resour
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
-import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.inventory.InventoryView;
import
org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGroupContextMenu;
import
org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGroupDetailView;
@@ -539,9 +536,6 @@ public class ResourceTreeView extends LocatableVLayout {
importChildSubMenu.addItem(importItem);
}
}
- if (resourceType.getCategory() == ResourceCategory.PLATFORM) {
- loadManuallyAddServersToPlatforms(importChildSubMenu, resource);
- }
importChildMenu.setSubmenu(importChildSubMenu);
manualImportEnabled = importChildSubMenu.getItems().length > 0;
@@ -550,48 +544,6 @@ public class ResourceTreeView extends LocatableVLayout {
resourceContextMenu.addItem(importChildMenu);
}
- private void loadManuallyAddServersToPlatforms(final Menu manuallyAddMenu, final
Resource resource) {
- ResourceTypeGWTServiceAsync rts = GWTServiceLookup.getResourceTypeGWTService();
-
- ResourceTypeCriteria criteria = new ResourceTypeCriteria();
- criteria.addFilterSupportsManualAdd(true);
- criteria.fetchParentResourceTypes(true);
- rts.findResourceTypesByCriteria(criteria, new
AsyncCallback<PageList<ResourceType>>() {
-
- public void onFailure(Throwable caught) {
-
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_contextMenu_loadFailed_manualAddChildren(),
- caught);
- }
-
- public void onSuccess(PageList<ResourceType> result) {
- //sort the display items alphabetically
- TreeSet<String> ordered = new TreeSet<String>();
- Map<String, ResourceType> displayTypes = new HashMap<String,
ResourceType>();
- for (ResourceType type : result) {
- displayTypes.put(type.getName(), type);
- ordered.add(type.getName());
- }
-
- int idx = 0;
- for (String displayType : ordered) {
- final ResourceType type = displayTypes.get(displayType);
- if (type.getParentResourceTypes() == null ||
type.getParentResourceTypes().isEmpty()) {
- MenuItem item = new MenuItem(type.getName());
-
- item.addClickHandler(new ClickHandler() {
-
- public void onClick(MenuItemClickEvent event) {
- ResourceFactoryImportWizard.showImportWizard(resource,
type);
- }
- });
-
- manuallyAddMenu.addItem(item, idx++);
- }
- }
- }
- });
- }
-
private MenuItem buildMetricsMenu(final ResourceType type, final Resource resource)
{
MenuItem measurements = new
MenuItem(MSG.view_tree_common_contextMenu_measurements());
final Menu measurementsSubMenu = new Menu();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
index d1dce1f..c4630dd 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2010 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -32,6 +32,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageControl;
@@ -51,6 +52,7 @@ public class ResourceTypeRepository {
private Map<Integer, ResourceType> typeCache = new HashMap<Integer,
ResourceType>();
private Map<Integer, EnumSet<MetadataType>> typeCacheLevel = new
HashMap<Integer, EnumSet<MetadataType>>();
+ private Set<ResourceType> topLevelServerAndServiceTypes;
private static ResourceTypeGWTServiceAsync resourceTypeService =
GWTServiceLookup.getResourceTypeGWTService();
@@ -252,9 +254,46 @@ public class ResourceTypeRepository {
criteria.setPageControl(PageControl.getUnlimitedInstance());
- com.allen_sauer.gwt.log.client.Log.info("Loading " +
typesNeeded.size()
+ Log.info("Loading " + typesNeeded.size()
+ ((metadataTypes != null) ? (" types: " + metadataTypes) :
""));
+ if ((topLevelServerAndServiceTypes == null) && (metadataTypes != null)
&&
+ metadataTypes.contains(MetadataType.children)) {
+ // Perform a one-time load of server and service types with no parent types.
These types are implicitly
+ // children of all platform types, even though they are not included in the
platform types'
+ // childResourceTypes field.
+ loadTopLevelServerAndServiceTypes(callback, metadataTypes, criteria,
cachedTypes);
+ } else {
+ loadRequestedTypes(callback, metadataTypes, criteria, cachedTypes);
+ }
+ }
+
+ private void loadTopLevelServerAndServiceTypes(final TypesLoadedCallback callback,
+ final EnumSet<MetadataType>
metadataTypes,
+ final ResourceTypeCriteria criteria,
final Map<Integer,
+ ResourceType> cachedTypes) {
+ ResourceTypeCriteria topLevelCriteria = new ResourceTypeCriteria();
+ topLevelCriteria.fetchParentResourceTypes(true);
+ resourceTypeService.findResourceTypesByCriteria(topLevelCriteria, new
AsyncCallback<PageList<ResourceType>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.widget_typeCache_loadFail(),
caught);
+ loadRequestedTypes(callback, metadataTypes, criteria, cachedTypes);
+ }
+
+ public void onSuccess(PageList<ResourceType> types) {
+ topLevelServerAndServiceTypes = new HashSet<ResourceType>();
+ for (ResourceType type : types) {
+ if ((type.getCategory() != ResourceCategory.PLATFORM) &&
+ (type.getParentResourceTypes() == null ||
type.getParentResourceTypes().isEmpty())) {
+ topLevelServerAndServiceTypes.add(type);
+ }
+ }
+ loadRequestedTypes(callback, metadataTypes, criteria, cachedTypes);
+ }
+ });
+ }
+
+ private void loadRequestedTypes(final TypesLoadedCallback callback, final
EnumSet<MetadataType> metadataTypes, ResourceTypeCriteria criteria, final
Map<Integer, ResourceType> cachedTypes) {
resourceTypeService.findResourceTypesByCriteria(criteria, new
AsyncCallback<PageList<ResourceType>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.widget_typeCache_loadFail(),
caught);
@@ -268,7 +307,15 @@ public class ResourceTypeRepository {
for (MetadataType metadataType : metadataTypes) {
switch (metadataType) {
case children:
-
cachedType.setChildResourceTypes(type.getChildResourceTypes());
+ Set<ResourceType> childTypes =
type.getChildResourceTypes();
+ if (type.getCategory() == ResourceCategory.PLATFORM
&&
+ topLevelServerAndServiceTypes != null) {
+ // Add server and service types with no parent
types to the list of child types.
+ // These types are implicitly children of all
platform types, even though they
+ // are not included in the platform types'
childResourceTypes field.
+
childTypes.addAll(topLevelServerAndServiceTypes);
+ }
+ cachedType.setChildResourceTypes(childTypes);
break;
case content:
cachedType.setPackageTypes(type.getPackageTypes());
@@ -304,7 +351,7 @@ public class ResourceTypeRepository {
break;
default:
Log.error("ERROR: metadataType " +
metadataType.name()
- + " not merged into cached
ResourceType.");
+ + " not merged into cached
ResourceType.");
}
}
}