modules/enterprise/gui/coregui/src/main/java/org/rhq/coregui/client/inventory/resource/ResourceCompositeSearchView.java | 41 ++++++++-- 1 file changed, 34 insertions(+), 7 deletions(-)
New commits: commit 66494e0742126de409acd97bff9744f18b4de8f4 Author: Jirka Kremser jkremser@redhat.com Date: Wed Oct 30 19:16:37 2013 +0100
[BZ 1021929] - Import context menu does not show plugin resource types when accessing by URL
Using the ResourceTypeRepository to fetch the resource type (with the ResourceTypeRepository.MetadataType.children and other metadata set)
(cherry picked from commit 028ca82da5b4125bcc06b141cb2cd0709ac17c80)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/coregui/client/inventory/resource/ResourceCompositeSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/coregui/client/inventory/resource/ResourceCompositeSearchView.java index a5b15b4..42f33d8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/coregui/client/inventory/resource/ResourceCompositeSearchView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/coregui/client/inventory/resource/ResourceCompositeSearchView.java @@ -23,6 +23,7 @@ package org.rhq.coregui.client.inventory.resource;
import java.util.ArrayList; +import java.util.EnumSet; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -51,6 +52,7 @@ import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.gwt.ResourceGWTServiceAsync; import org.rhq.coregui.client.inventory.resource.factory.ResourceFactoryCreateWizard; import org.rhq.coregui.client.inventory.resource.factory.ResourceFactoryImportWizard; +import org.rhq.coregui.client.inventory.resource.type.ResourceTypeRepository; import org.rhq.coregui.client.util.Log; import org.rhq.coregui.client.util.RPCDataSource; import org.rhq.coregui.client.util.TableUtility; @@ -63,6 +65,7 @@ import org.rhq.coregui.client.util.message.Message.Severity; public class ResourceCompositeSearchView extends ResourceSearchView {
private final ResourceComposite parentResourceComposite; + private ResourceType parentResourceType; private boolean initialized; private List<Resource> singletonChildren; private Set<ResourceType> creatableChildTypes; @@ -86,20 +89,28 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
@Override protected void onInit() { - + initMenus(true); + } + + private void initMenus(boolean firstCall) { // To properly filter Create Child and Import menus we need existing singleton child resources. If the // user has create permission and the parent type has singleton child types and creatable or importable child // types, perform an async call to fetch the singleton children. If we make the async call don't declare this // instance initialized until after it completes as we must have the children before the menu buttons can be drawn.
final Resource parentResource = parentResourceComposite.getResource(); - ResourceType parentType = parentResource.getResourceType(); - creatableChildTypes = getCreatableChildTypes(parentType); - importableChildTypes = getImportableChildTypes(parentType); + if (parentResourceType == null && firstCall) { + fetchResourceType(); + return; + } else if (parentResourceType == null) { + Log.error("Failed to load resources type for resource [" + parentResource + "]"); + return; + } + creatableChildTypes = getCreatableChildTypes(parentResourceType); + importableChildTypes = getImportableChildTypes(parentResourceType); hasCreatableTypes = !creatableChildTypes.isEmpty(); hasImportableTypes = !importableChildTypes.isEmpty(); refreshSingletons(parentResource, new AsyncCallback<PageList<Resource>>() { - public void onFailure(Throwable caught) { ResourceCompositeSearchView.super.onInit(); initialized = true; @@ -109,9 +120,7 @@ public class ResourceCompositeSearchView extends ResourceSearchView { ResourceCompositeSearchView.super.onInit(); initialized = true; } - }); - }
private void refreshSingletons(final Resource parentResource, final AsyncCallback<PageList<Resource>> callback) { @@ -401,5 +410,23 @@ public class ResourceCompositeSearchView extends ResourceSearchView { });
} + + public void fetchResourceType() { + // make sure we have all the Type information necessary to render the menus + ResourceType type = parentResourceComposite.getResource().getResourceType(); + ResourceTypeRepository.Cache.getInstance().getResourceTypes( + type.getId(), + EnumSet.of(ResourceTypeRepository.MetadataType.operations, ResourceTypeRepository.MetadataType.children, + ResourceTypeRepository.MetadataType.subCategory, + ResourceTypeRepository.MetadataType.pluginConfigurationDefinition, + ResourceTypeRepository.MetadataType.resourceConfigurationDefinition, + ResourceTypeRepository.MetadataType.measurements), new ResourceTypeRepository.TypeLoadedCallback() { + + public void onTypesLoaded(ResourceType type) { + parentResourceType = type; + initMenus(false); + } + }); + }
}