modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AuthorizationGWTService.java | 9 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 1 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java | 55 ++++++++-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java | 16 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 1 7 files changed, 73 insertions(+), 13 deletions(-)
New commits: commit d44ae2f95128ade4a1081e11e61a927e548f6746 Author: Simeon Pinder spinder@redhat.com Date: Wed Oct 13 08:52:39 2010 -0400
fix for manage inventory permissions warnings with discovery queue
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java index 062b882..b5e820e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java @@ -64,7 +64,7 @@ public class AutodiscoveryPortlet extends ResourceAutodiscoveryView implements C protected void onInit() { super.onInit(); //initialize the datasource to include Portlet instance - this.dataSource = new AutodiscoveryQueueDataSource(); + this.dataSource = new AutodiscoveryQueueDataSource(getTreeGrid()); if ((getTreeGrid() != null) && (getDataSource() != null)) { getTreeGrid().setDataSource(getDataSource()); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AuthorizationGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AuthorizationGWTService.java index 5beb2b6..58bae69 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AuthorizationGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AuthorizationGWTService.java @@ -22,7 +22,6 @@ import java.util.Set;
import com.google.gwt.user.client.rpc.RemoteService;
-import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Permission;
/** @@ -66,7 +65,6 @@ public interface AuthorizationGWTService extends RemoteService { */ Set<Permission> getImplicitGroupPermissions(int groupId);
- /** * Gets the set of global permissions that the current user explicitly possesses. * @@ -74,6 +72,11 @@ public interface AuthorizationGWTService extends RemoteService { */ Set<Permission> getExplicitGlobalPermissions();
- + /** + * Lightweight check of whether current user has manage inventory permissions. + * + * @return Boolean answer to manage inventory permissions status. + */ + Boolean checkUserGlobalPermission(Permission permission);
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java index ab4ae27..c1ad38b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java @@ -72,4 +72,5 @@ public interface ResourceGWTService extends RemoteService { List<ResourceError> findResourceErrors(int resourceId);
Resource manuallyAddResource(int resourceTypeId, int parentResourceId, Configuration pluginConfiguration); + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java index a881444..a947c57 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map;
+import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; @@ -31,14 +32,17 @@ import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.DSDataFormat; import com.smartgwt.client.types.DSProtocol; +import com.smartgwt.client.widgets.tree.TreeGrid; import com.smartgwt.client.widgets.tree.TreeNode;
+import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageOrdering; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.gwt.AuthorizationGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
@@ -50,6 +54,11 @@ public class AutodiscoveryQueueDataSource extends DataSource { private int unlimited = -1; private int maximumPlatformsToDisplay = -1; private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService(); + private AuthorizationGWTServiceAsync authorizationService = GWTServiceLookup.getAuthorizationService(); + public static final String NO_MANAGE_INVENTORY_PERMS_EMPTY_MESSAGE = "(Required manage inventory permissions missing. See Administrator to change)"; + public static final String EMPTY_MESSAGE = "No items to show"; + private TreeGrid dataContainerReference = null; + private static final Permission MANAGE_INVENTORY = Permission.MANAGE_INVENTORY;
public AutodiscoveryQueueDataSource() { setClientOnly(false); @@ -78,6 +87,11 @@ public class AutodiscoveryQueueDataSource extends DataSource { statusField, timestampField); }
+ public AutodiscoveryQueueDataSource(TreeGrid treeGrid) { + this(); + this.dataContainerReference = treeGrid; + } + protected Object transformRequest(DSRequest request) { DSResponse response = new DSResponse(); response.setAttribute("clientContext", request.getAttributeAsObject("clientContext")); @@ -95,9 +109,9 @@ public class AutodiscoveryQueueDataSource extends DataSource { }
protected void executeFetch(final DSRequest request, final DSResponse response) { - PageControl pc = getPageControl(request); + final PageControl pc = getPageControl(request);
- HashSet<InventoryStatus> statuses = new HashSet<InventoryStatus>(); + final HashSet<InventoryStatus> statuses = new HashSet<InventoryStatus>();
String statusesString = request.getCriteria().getAttributeAsString("statuses"); if (statusesString != null) { @@ -113,16 +127,41 @@ public class AutodiscoveryQueueDataSource extends DataSource { statuses.add(InventoryStatus.NEW); }
- resourceService.getQueuedPlatformsAndServers(statuses, pc, new AsyncCallback<Map<Resource, List<Resource>>>() { - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to load inventory discovery queue", caught); + //determine if has manage inventory perms, if so then chain and proceed with getting discovered resources + authorizationService.checkUserGlobalPermission(MANAGE_INVENTORY, new AsyncCallback<Boolean>() { + public void onSuccess(Boolean hasManageInventoryPermissions) { + if (hasManageInventoryPermissions) { + if (dataContainerReference != null) { + dataContainerReference.setEmptyMessage(EMPTY_MESSAGE); + } + resourceService.getQueuedPlatformsAndServers(statuses, pc, + new AsyncCallback<Map<Resource, List<Resource>>>() { + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to load inventory discovery queue", + caught); + } + + public void onSuccess(Map<Resource, List<Resource>> result) { + response.setData(buildNodes(result)); + processResponse(request.getRequestId(), response); + } + }); + } else { + Log.debug("(User does not have required managed inventory permissions. " + EMPTY_MESSAGE); + response.setTotalRows(0); + if (dataContainerReference != null) { + Log.debug("Setting better empty container message." + NO_MANAGE_INVENTORY_PERMS_EMPTY_MESSAGE); + dataContainerReference.setEmptyMessage(NO_MANAGE_INVENTORY_PERMS_EMPTY_MESSAGE); + } + processResponse(request.getRequestId(), response); + } }
- public void onSuccess(Map<Resource, List<Resource>> result) { - response.setData(buildNodes(result)); - processResponse(request.getRequestId(), response); + public void onFailure(Throwable caught) { + Log.error("Unable to determine whether if user has manage inventory permissions - check server logs."); } }); + }
private TreeNode[] buildNodes(Map<Resource, List<Resource>> result) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java index e1ea25e..1fee831 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java @@ -121,7 +121,7 @@ public class ResourceAutodiscoveryView extends LocatableVLayout {
treeGrid.setHeight100();
- treeGrid.setDataSource(dataSource = new AutodiscoveryQueueDataSource()); + treeGrid.setDataSource(dataSource = new AutodiscoveryQueueDataSource(treeGrid)); treeGrid.setAutoFetchData(true); treeGrid.setResizeFieldsInRealTime(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java index 4b8d73f..7a13a94 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java @@ -82,4 +82,20 @@ public class AuthorizationGWTServiceImpl extends AbstractGWTServiceImpl implemen throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } } + + /** Lightweight check of whether user has requested permission. + * + * @return Boolean data point. + */ + public Boolean checkUserGlobalPermission(Permission permission) { + Boolean accessGranted = false; + try { + Set<Permission> globalPermissions = authorizationManager.getExplicitGlobalPermissions(getSessionSubject()); + accessGranted = globalPermissions.contains(permission); + return accessGranted; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } + } + } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 861fe72..dac630f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@ -297,4 +297,5 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } } + }