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(a)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);
+ }
+ });
+ }
}