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@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."); } } }