modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AlertDefinitionHandlerBean.java
| 3
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
| 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/GroupHandlerBean.java
| 8 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
| 4
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
| 54 ++++++++--
6 files changed, 61 insertions(+), 14 deletions(-)
New commits:
commit 6d5e400decd1b55624daedda9a8e0a6814155eda
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Thu May 23 20:40:21 2013 +0200
BZ use explicit paging fields, as there is no default. In the specific case, the
'name' field was not unique and thus 'random within the resources with the
same name'
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AlertDefinitionHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AlertDefinitionHandlerBean.java
index 4ceae82..305d867 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AlertDefinitionHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AlertDefinitionHandlerBean.java
@@ -79,6 +79,7 @@ import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.AlertConditionManagerLocal;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
@@ -148,11 +149,11 @@ public class AlertDefinitionHandlerBean extends AbstractRestBean {
public Response listAlertDefinitions(
@ApiParam(value = "Page number") @QueryParam("page")
Integer page,
@ApiParam(value = "Page size") @DefaultValue("20")
@QueryParam("ps") int pageSize,
- @ApiParam(value = "Limit to status, UNUSED AT THE MOMENT ")
@QueryParam("status") String status, // TODO
@Context HttpHeaders headers,
@Context UriInfo uriInfo) {
AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
+ criteria.addSortId(PageOrdering.ASC);
if (page!=null) {
criteria.setPaging(page,pageSize);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
index fd8a835..4f4d6b4 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/EventHandlerBean.java
@@ -62,6 +62,7 @@ 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.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.event.EventManagerLocal;
import org.rhq.enterprise.server.rest.domain.EventDefinitionRest;
@@ -243,6 +244,7 @@ public class EventHandlerBean extends AbstractRestBean {
EventSource source = findEventSourceById(sourceId);
EventCriteria criteria = new EventCriteria();
+ criteria.addSortId(PageOrdering.ASC);
criteria.addFilterSourceId(source.getId());
if (startTime>0) {
criteria.addFilterStartTime(startTime);
@@ -291,6 +293,8 @@ public class EventHandlerBean extends AbstractRestBean {
}
EventCriteria criteria = new EventCriteria();
+ criteria.addSortId(PageOrdering.ASC);
+
criteria.addFilterResourceId(resourceId);
if (startTime>0) {
criteria.addFilterStartTime(startTime);
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 d65a850..006c8a0 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
@@ -27,8 +27,6 @@ import java.util.Set;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
@@ -67,6 +65,7 @@ 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.PageList;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
@@ -105,9 +104,6 @@ public class GroupHandlerBean extends AbstractRestBean {
@EJB
GroupDefinitionManagerLocal definitionManager;
- @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
- EntityManager em;
-
@GZIP
@GET
@@ -119,6 +115,8 @@ public class GroupHandlerBean extends AbstractRestBean {
@Context HttpHeaders headers, @Context UriInfo uriInfo) {
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
+ criteria.addSortId(PageOrdering.ASC);
+
if (q!=null) {
criteria.addFilterName(q);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
index 81d490b..d46850c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
@@ -401,12 +401,12 @@ public class OperationsHandlerBean extends AbstractRestBean {
@Context HttpHeaders httpHeaders) {
ResourceOperationHistoryCriteria criteria = new
ResourceOperationHistoryCriteria();
+ criteria.addSortStartTime(PageOrdering.ASC);
if (resourceId>0) {
criteria.addFilterResourceIds(resourceId);
}
if (page!=null) {
criteria.setPaging(page,pageSize);
- criteria.addSortStartTime(PageOrdering.ASC);
}
criteria.addSortEndTime(PageOrdering.DESC);
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 0c3a7cd..332dfbc 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
@@ -188,6 +188,8 @@ public class ResourceHandlerBean extends AbstractRestBean {
@Context UriInfo uriInfo) {
ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addSortName(PageOrdering.ASC);
+ criteria.addSortId(PageOrdering.ASC);
if (!status.toLowerCase().equals("all")) {
try {
criteria.addFilterInventoryStatus(InventoryStatus.valueOf(status.toUpperCase()));
@@ -206,7 +208,6 @@ public class ResourceHandlerBean extends AbstractRestBean {
}
if (page!=null) {
criteria.setPaging(page,pageSize);
- criteria.addSortName(PageOrdering.ASC);
}
PageList<Resource> ret = resMgr.findResourcesByCriteria(caller,criteria);
@@ -232,6 +233,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
else {
pc = PageControl.getUnlimitedInstance();
}
+ pc.setPrimarySort("id",PageOrdering.ASC);
PageList<Resource> ret = resMgr.findResourcesByCategory(caller,
ResourceCategory.PLATFORM,
InventoryStatus.COMMITTED, pc);
diff --git
a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
index cd103ca..900ab10 100644
---
a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
+++
b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
@@ -24,11 +24,16 @@ package org.rhq.modules.integrationTests.restApi;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.path.json.JsonPath;
import com.jayway.restassured.path.xml.XmlPath;
import com.jayway.restassured.path.xml.element.Node;
import com.jayway.restassured.response.Response;
+import com.jayway.restassured.response.ResponseBody;
import org.apache.http.HttpStatus;
import org.junit.Test;
@@ -73,8 +78,8 @@ public class ResourcesTest extends AbstractBase {
.contentType(ContentType.JSON)
.log().everything()
.body("links.self", notNullValue())
- .body("resourceId",is(_platformId))
- .body("typeId",is(_platformTypeId))
+ .body("resourceId", is(_platformId))
+ .body("typeId", is(_platformTypeId))
.body("parentId",is(0))
.when()
.get("/resource/{id}");
@@ -94,8 +99,8 @@ public class ResourcesTest extends AbstractBase {
.contentType(WRAPPED_JSON)
.log().everything()
.body("links.self", notNullValue())
- .body("resourceId",is(_platformId))
- .body("typeId",is(_platformTypeId))
+ .body("resourceId", is(_platformId))
+ .body("typeId", is(_platformTypeId))
.body("parentId",is(0))
.when()
.get("/resource/{id}");
@@ -277,13 +282,50 @@ public class ResourcesTest extends AbstractBase {
.statusCode(200)
.log().everything()
// .header("Link", allOf(containsString("page=2"),
containsString("current")))
- .header("Link",not(containsString("prev")))
+ .header("Link", not(containsString("prev")))
.body("links.self", notNullValue())
.when()
.get("/resource");
}
@Test
+ public void testGetResourcesWithPagingAndUniquenessCheck() throws Exception {
+
+ int currentPage = 0;
+ Set<Integer> seen = new HashSet<Integer>();
+
+ for(;;) {
+ JsonPath path =
+ given()
+ .header("Accept",
"application/vnd.rhq.wrapped+json")
+ .with()
+ .queryParam("page", currentPage)
+ .queryParam("ps", 5) // Unusually small to provoke having more
than 1 page
+ .queryParam("status","COMMITTED")
+ .expect()
+ .statusCode(200)
+ .log().ifError()
+ .when()
+ .get("/resource")
+ .jsonPath();
+
+ List<Integer> ids = path.getList("data.resourceId");
+
+ for (Integer id : ids ) {
+ assert !seen.contains(id);
+ seen.add(id);
+ }
+
+ currentPage++;
+ if (currentPage > path.getInt("lastPage")) {
+ break;
+ }
+ System.out.print("+");
+ }
+ System.out.println();
+ }
+
+ @Test
public void testGetResourcesWithPagingAndWrapping() throws Exception {
given()
@@ -314,7 +356,7 @@ public class ResourcesTest extends AbstractBase {
.log().ifError()
.body("links.self", notNullValue())
.header("Link", not(containsString("prev=")))
- .header("Link",
anyOf(containsString("current"),containsString("last")))
+ .header("Link", anyOf(containsString("current"),
containsString("last")))
.when().get("/resource/platforms");
}