modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
| 15 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerLocal.java
| 6 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
| 51 +++++++---
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerLocal.java
| 11 +-
4 files changed, 61 insertions(+), 22 deletions(-)
New commits:
commit cd40200ad13c0abf7adcf1e021db81c1c8d967a8
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Thu Nov 29 11:56:01 2012 +0100
Add support for searching of resources, groups and group definitions by name via ?q=
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
index f3bcdff..d051585 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
@@ -22,13 +22,13 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.GroupDefinition;
import org.rhq.core.domain.resource.group.ResourceGroup;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
@@ -64,9 +64,12 @@ public class GroupHandlerBean extends AbstractRestBean implements
GroupHandlerLo
@EJB
GroupDefinitionManagerLocal definitionManager;
- public Response getGroups(@Context Request request, @Context HttpHeaders headers,
@Context UriInfo uriInfo) {
+ public Response getGroups(String q, @Context Request request, @Context HttpHeaders
headers, @Context UriInfo uriInfo) {
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
+ if (q!=null) {
+ criteria.addFilterName(q);
+ }
List<ResourceGroup> groups =
resourceGroupManager.findResourceGroupsByCriteria(caller,criteria);
List<GroupRest> list = new ArrayList<GroupRest>(groups.size());
@@ -299,10 +302,14 @@ public class GroupHandlerBean extends AbstractRestBean implements
GroupHandlerLo
}
@Override
- public Response getGroupDefinitions(@Context Request request, @Context HttpHeaders
headers,
+ public Response getGroupDefinitions(String q, @Context Request request, @Context
HttpHeaders headers,
@Context UriInfo uriInfo) {
- PageList<GroupDefinition> gdlist =
definitionManager.getGroupDefinitions(caller,new PageControl());
+ ResourceGroupDefinitionCriteria criteria = new
ResourceGroupDefinitionCriteria();
+ if (q!=null) {
+ criteria.addFilterName(q);
+ }
+ PageList<GroupDefinition> gdlist =
definitionManager.findGroupDefinitionsByCriteria(caller, criteria);
List<GroupDefinitionRest> list = new
ArrayList<GroupDefinitionRest>(gdlist.getTotalSize());
for (GroupDefinition def: gdlist) {
GroupDefinitionRest definitionRest = buildGDRestFromDefinition(def);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerLocal.java
index 39e0c2a..1cfc171 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerLocal.java
@@ -44,7 +44,8 @@ public interface GroupHandlerLocal {
@GET
@Path("/")
@ApiOperation(value = "List all groups", multiValueResponse = true)
- public Response getGroups(@Context Request request, @Context HttpHeaders headers,
+ public Response getGroups(@ApiParam("String to search in the group name")
@QueryParam("q") String q,
+ @Context Request request, @Context HttpHeaders headers,
@Context UriInfo uriInfo);
@Cache(isPrivate = true,maxAge = 60)
@@ -129,7 +130,8 @@ public interface GroupHandlerLocal {
@GET
@Path("/definitions")
@ApiOperation(value="List all existing GroupDefinitions",multiValueResponse
= true)
- public Response getGroupDefinitions(@Context Request request, @Context HttpHeaders
headers,
+ public Response getGroupDefinitions(@ApiParam("String to search in the group
definition name") @QueryParam("q") String q,
+ @Context Request request, @Context HttpHeaders
headers,
@Context UriInfo uriInfo);
@GZIP
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
index c0efed4..9709fd6 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
@@ -33,9 +33,6 @@ import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Context;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.HttpHeaders;
@@ -48,6 +45,7 @@ import javax.ws.rs.core.UriInfo;
import org.rhq.core.domain.alert.Alert;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.criteria.AvailabilityCriteria;
+import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.discovery.AvailabilityReport;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.measurement.AvailabilityType;
@@ -93,7 +91,7 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
private EntityManager entityManager;
@Override
- public Response getResource(int id, @Context Request request, @Context HttpHeaders
headers, @Context UriInfo uriInfo) {
+ public Response getResource(int id, Request request, HttpHeaders headers, UriInfo
uriInfo) {
Resource res;
res = fetchResource(id);
@@ -121,13 +119,39 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
}
@Override
- public Response getPlatforms(@Context Request request, @Context HttpHeaders headers,
@Context UriInfo uriInfo) {
+ public Response getResourcesByQuery(String q, Request request, HttpHeaders headers,
+ UriInfo uriInfo) {
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterName(q);
+ List<Resource> ret = resMgr.findResourcesByCriteria(caller,criteria);
+
+ Response.ResponseBuilder builder =
getResponseBuilderForResourceList(headers,uriInfo,ret);
+
+ return builder.build();
+ }
+
+ @Override
+ public Response getPlatforms(Request request, HttpHeaders headers, UriInfo uriInfo)
{
PageControl pc = new PageControl();
List<Resource> ret = resMgr.findResourcesByCategory(caller,
ResourceCategory.PLATFORM,
InventoryStatus.COMMITTED, pc);
- List<ResourceWithType> rwtList = new
ArrayList<ResourceWithType>(ret.size());
- for (Resource r : ret) {
+ Response.ResponseBuilder builder = getResponseBuilderForResourceList(headers,
uriInfo, ret);
+
+ return builder.build();
+ }
+
+ /**
+ * Translate the passed list of resources into a response according to the acceptable
mime types etc.
+ * @param headers HttpHeaders from the request
+ * @param uriInfo Uri from the request
+ * @param resources List of resources
+ * @return An initialized ResponseBuilder
+ */
+ private Response.ResponseBuilder getResponseBuilderForResourceList(HttpHeaders
headers, UriInfo uriInfo,
+
List<Resource> resources) {
+ List<ResourceWithType> rwtList = new
ArrayList<ResourceWithType>(resources.size());
+ for (Resource r : resources) {
putToCache(r.getId(), Resource.class, r);
ResourceWithType rwt = fillRWT(r, uriInfo);
rwtList.add(rwt);
@@ -143,8 +167,7 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
};
builder = Response.ok(list);
}
-
- return builder.build();
+ return builder;
}
@Override
@@ -267,7 +290,7 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
}
public Response getSchedules(int resourceId, String scheduleType, boolean
enabledOnly, String name,
- @Context Request request, @Context HttpHeaders headers, @Context UriInfo uriInfo)
{
+ Request request, HttpHeaders headers, UriInfo uriInfo) {
// allow metric as input
if (scheduleType.equals("metric"))
@@ -333,7 +356,7 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
}
@Override
- public Response getChildren(int id, @Context Request request, @Context HttpHeaders
headers, @Context UriInfo uriInfo) {
+ public Response getChildren(int id, Request request, HttpHeaders headers, UriInfo
uriInfo) {
PageControl pc = new PageControl();
Resource parent;
parent = fetchResource(id);
@@ -387,7 +410,7 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
}
@Override
- public Response createPlatform(@PathParam("name") String name, StringValue
typeValue, @Context UriInfo uriInfo) {
+ public Response createPlatform(String name, StringValue typeValue, UriInfo uriInfo)
{
String typeName = typeValue.getValue();
ResourceType type =
resourceTypeManager.getResourceTypeByNameAndPlugin(typeName,"Platforms");
@@ -462,8 +485,8 @@ public class ResourceHandlerBean extends AbstractRestBean implements
ResourceHan
}
@Override
- public Response createResource(@PathParam("name") String name, StringValue
typeValue,
- @QueryParam("plugin") String plugin, int
parentId, UriInfo uriInfo) {
+ public Response createResource(String name, StringValue typeValue,
+ String plugin, int parentId, UriInfo uriInfo) {
Resource parent = resMgr.getResourceById(caller,parentId);
if (parent==null)
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerLocal.java
index b30f8ce..935f875 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerLocal.java
@@ -56,7 +56,7 @@ import org.rhq.enterprise.server.rest.domain.*;
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML,MediaType.TEXT_HTML})
@Path("/resource")
@Local
-@Api(value="Resource related", description = "This endpoint deals with
single resources, not groups")
+@Api(value="Resource related", description = "This endpoint deals with
individual resources, not resource groups")
public interface ResourceHandlerLocal {
static String NO_RESOURCE_FOR_ID = "If no resource with the passed id
exists";
@@ -75,6 +75,13 @@ public interface ResourceHandlerLocal {
@Context Request request, @Context HttpHeaders headers,
@Context UriInfo uriInfo);
+ @GET
+ @Path("/")
+ @ApiOperation(value = "Search for resources by the given search string",
responseClass = "ResourceWithType")
+ Response getResourcesByQuery(@ApiParam("String to search in the resource
name") @QueryParam("q")String q,
+ @Context Request request, @Context HttpHeaders headers,
+ @Context UriInfo uriInfo);
+
@GZIP
@GET
@Path("/platforms")
@@ -170,7 +177,7 @@ public interface ResourceHandlerLocal {
@ApiOperation(value = "Create a resource with a given type below a certain
parent")
@POST
@Path("{name}")
- public javax.ws.rs.core.Response createResource(
+ public Response createResource(
@ApiParam("Name of the new resource") @PathParam("name")
String name,
@ApiParam("Name of the Resource tpye") StringValue type,
@ApiParam("Name of the plugin providing the type")
@QueryParam("plugin") String plugin,