mirror of
https://github.com/sismics/docs.git
synced 2025-12-13 09:46:17 +00:00
#159: get routes on a document
This commit is contained in:
@@ -4,27 +4,28 @@ import com.sismics.docs.core.constant.AclTargetType;
|
||||
import com.sismics.docs.core.constant.PermType;
|
||||
import com.sismics.docs.core.constant.RouteStepTransition;
|
||||
import com.sismics.docs.core.constant.RouteStepType;
|
||||
import com.sismics.docs.core.dao.jpa.AclDao;
|
||||
import com.sismics.docs.core.dao.jpa.RouteDao;
|
||||
import com.sismics.docs.core.dao.jpa.RouteModelDao;
|
||||
import com.sismics.docs.core.dao.jpa.RouteStepDao;
|
||||
import com.sismics.docs.core.dao.jpa.*;
|
||||
import com.sismics.docs.core.dao.jpa.criteria.RouteCriteria;
|
||||
import com.sismics.docs.core.dao.jpa.criteria.RouteStepCriteria;
|
||||
import com.sismics.docs.core.dao.jpa.dto.DocumentDto;
|
||||
import com.sismics.docs.core.dao.jpa.dto.RouteDto;
|
||||
import com.sismics.docs.core.dao.jpa.dto.RouteStepDto;
|
||||
import com.sismics.docs.core.model.jpa.Route;
|
||||
import com.sismics.docs.core.model.jpa.RouteModel;
|
||||
import com.sismics.docs.core.model.jpa.RouteStep;
|
||||
import com.sismics.docs.core.util.RoutingUtil;
|
||||
import com.sismics.docs.core.util.SecurityUtil;
|
||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||
import com.sismics.rest.exception.ClientException;
|
||||
import com.sismics.rest.exception.ForbiddenClientException;
|
||||
import com.sismics.rest.util.JsonUtil;
|
||||
import com.sismics.rest.util.ValidationUtil;
|
||||
|
||||
import javax.json.*;
|
||||
import javax.ws.rs.FormParam;
|
||||
import javax.ws.rs.NotFoundException;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Route REST resources.
|
||||
@@ -178,4 +179,81 @@ public class RouteResource extends BaseResource {
|
||||
.add("status", "ok");
|
||||
return Response.ok().entity(response.build()).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the routes on a document.
|
||||
*
|
||||
* @api {get} /route Get the routes on a document
|
||||
* @apiName GetRoutes
|
||||
* @apiGroup Route
|
||||
* @apiParam {String} id Document ID
|
||||
* @apiSuccess {Object[]} routes List of routes
|
||||
* @apiSuccess {String} routes.name Name
|
||||
* @apiSuccess {Number} routes.create_date Create date (timestamp)
|
||||
* @apiSuccess {Object[]} routes.steps Route steps
|
||||
* @apiSuccess {String} routes.steps.name Route step name
|
||||
* @apiSuccess {String="APPROVE", "VALIDATE"} routes.steps.type Route step type
|
||||
* @apiSuccess {String} routes.steps.comment Route step comment
|
||||
* @apiSuccess {Number} routes.steps.end_date Route step end date (timestamp)
|
||||
* @apiSuccess {String="APPROVED","REJECTED","VALIDATED"} routes.steps.transition Route step transition
|
||||
* @apiSuccess {Object} routes.steps.validator_username Validator username
|
||||
* @apiSuccess {Object} routes.steps.target Route step target
|
||||
* @apiSuccess {String} routes.steps.target.id Route step target ID
|
||||
* @apiSuccess {String} routes.steps.target.name Route step target name
|
||||
* @apiSuccess {String="USER","GROUP"} routes.steps.target.type Route step target type
|
||||
* @apiError (client) NotFound Document not found
|
||||
* @apiPermission none
|
||||
* @apiVersion 1.5.0
|
||||
*
|
||||
* @param documentId Document ID
|
||||
* @return Response
|
||||
*/
|
||||
@GET
|
||||
public Response get(@QueryParam("documentId") String documentId) {
|
||||
if (!authenticate()) {
|
||||
throw new ForbiddenClientException();
|
||||
}
|
||||
|
||||
DocumentDao documentDao = new DocumentDao();
|
||||
DocumentDto documentDto = documentDao.getDocument(documentId, PermType.READ, getTargetIdList(null));
|
||||
if (documentDto == null) {
|
||||
throw new NotFoundException();
|
||||
}
|
||||
|
||||
JsonArrayBuilder routes = Json.createArrayBuilder();
|
||||
|
||||
RouteDao routeDao = new RouteDao();
|
||||
RouteStepDao routeStepDao = new RouteStepDao();
|
||||
List<RouteDto> routeDtoList = routeDao.findByCriteria(new RouteCriteria()
|
||||
.setDocumentId(documentId), new SortCriteria(2, false));
|
||||
for (RouteDto routeDto : routeDtoList) {
|
||||
List<RouteStepDto> routeStepDtoList = routeStepDao.findByCriteria(new RouteStepCriteria()
|
||||
.setRouteId(routeDto.getId()), new SortCriteria(6, true));
|
||||
JsonArrayBuilder steps = Json.createArrayBuilder();
|
||||
|
||||
for (RouteStepDto routeStepDto : routeStepDtoList) {
|
||||
steps.add(Json.createObjectBuilder()
|
||||
.add("name", routeStepDto.getName())
|
||||
.add("type", routeStepDto.getType().name())
|
||||
.add("comment", JsonUtil.nullable(routeStepDto.getComment()))
|
||||
.add("end_date", JsonUtil.nullable(routeStepDto.getEndDateTimestamp()))
|
||||
.add("validator_username", JsonUtil.nullable(routeStepDto.getValidatorUserName()))
|
||||
.add("target", Json.createObjectBuilder()
|
||||
.add("id", routeStepDto.getTargetId())
|
||||
.add("name", JsonUtil.nullable(routeStepDto.getTargetName()))
|
||||
.add("type", routeStepDto.getTargetType()))
|
||||
.add("transition", JsonUtil.nullable(routeStepDto.getTransition())));
|
||||
}
|
||||
|
||||
routes.add(Json.createObjectBuilder()
|
||||
.add("name", routeDto.getName())
|
||||
.add("create_date", routeDto.getCreateTimestamp())
|
||||
.add("steps", steps));
|
||||
}
|
||||
|
||||
JsonObjectBuilder json = Json.createObjectBuilder()
|
||||
.add("routes", routes);
|
||||
|
||||
return Response.ok().entity(json.build()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,31 @@ public class TestRouteResource extends BaseJerseyTest {
|
||||
.param("documentId", document1Id)
|
||||
.param("routeModelId", routeModels.getJsonObject(0).getString("id"))), JsonObject.class);
|
||||
|
||||
// Get the route on document 1
|
||||
json = target().path("/route")
|
||||
.queryParam("documentId", document1Id)
|
||||
.request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
.get(JsonObject.class);
|
||||
JsonArray routes = json.getJsonArray("routes");
|
||||
Assert.assertEquals(1, routes.size());
|
||||
JsonObject route = routes.getJsonObject(0);
|
||||
Assert.assertEquals("Document review", route.getString("name"));
|
||||
Assert.assertNotNull(route.getJsonNumber("create_date"));
|
||||
JsonArray steps = route.getJsonArray("steps");
|
||||
Assert.assertEquals(3, steps.size());
|
||||
JsonObject step = steps.getJsonObject(0);
|
||||
Assert.assertEquals("Check the document's metadata", step.getString("name"));
|
||||
Assert.assertEquals("VALIDATE", step.getString("type"));
|
||||
Assert.assertTrue(step.isNull("comment"));
|
||||
Assert.assertTrue(step.isNull("end_date"));
|
||||
Assert.assertTrue(step.isNull("validator_username"));
|
||||
Assert.assertTrue(step.isNull("transition"));
|
||||
JsonObject target = step.getJsonObject("target");
|
||||
Assert.assertEquals("administrators", target.getString("id"));
|
||||
Assert.assertEquals("administrators", target.getString("name"));
|
||||
Assert.assertEquals("GROUP", target.getString("type"));
|
||||
|
||||
// Get document 1 as route1
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
@@ -83,6 +108,25 @@ public class TestRouteResource extends BaseJerseyTest {
|
||||
.param("documentId", document1Id)
|
||||
.param("transition", "VALIDATED")), JsonObject.class);
|
||||
|
||||
// Get the route on document 1
|
||||
json = target().path("/route")
|
||||
.queryParam("documentId", document1Id)
|
||||
.request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
.get(JsonObject.class);
|
||||
routes = json.getJsonArray("routes");
|
||||
Assert.assertEquals(1, routes.size());
|
||||
route = routes.getJsonObject(0);
|
||||
Assert.assertNotNull(route.getJsonNumber("create_date"));
|
||||
steps = route.getJsonArray("steps");
|
||||
Assert.assertEquals(3, steps.size());
|
||||
step = steps.getJsonObject(0);
|
||||
Assert.assertEquals("VALIDATE", step.getString("type"));
|
||||
Assert.assertTrue(step.isNull("comment"));
|
||||
Assert.assertFalse(step.isNull("end_date"));
|
||||
Assert.assertEquals("admin", step.getString("validator_username"));
|
||||
Assert.assertEquals("VALIDATED", step.getString("transition"));
|
||||
|
||||
// Get document 1 as admin
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||
@@ -99,6 +143,25 @@ public class TestRouteResource extends BaseJerseyTest {
|
||||
.param("transition", "VALIDATED")
|
||||
.param("comment", "OK")), JsonObject.class);
|
||||
|
||||
// Get the route on document 1
|
||||
json = target().path("/route")
|
||||
.queryParam("documentId", document1Id)
|
||||
.request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
.get(JsonObject.class);
|
||||
routes = json.getJsonArray("routes");
|
||||
Assert.assertEquals(1, routes.size());
|
||||
route = routes.getJsonObject(0);
|
||||
Assert.assertNotNull(route.getJsonNumber("create_date"));
|
||||
steps = route.getJsonArray("steps");
|
||||
Assert.assertEquals(3, steps.size());
|
||||
step = steps.getJsonObject(1);
|
||||
Assert.assertEquals("VALIDATE", step.getString("type"));
|
||||
Assert.assertEquals("OK", step.getString("comment"));
|
||||
Assert.assertFalse(step.isNull("end_date"));
|
||||
Assert.assertEquals("admin", step.getString("validator_username"));
|
||||
Assert.assertEquals("VALIDATED", step.getString("transition"));
|
||||
|
||||
// Get document 1 as admin
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||
@@ -114,13 +177,32 @@ public class TestRouteResource extends BaseJerseyTest {
|
||||
.param("documentId", document1Id)
|
||||
.param("transition", "APPROVED")), JsonObject.class);
|
||||
|
||||
// Get the route on document 1
|
||||
json = target().path("/route")
|
||||
.queryParam("documentId", document1Id)
|
||||
.request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
.get(JsonObject.class);
|
||||
routes = json.getJsonArray("routes");
|
||||
Assert.assertEquals(1, routes.size());
|
||||
route = routes.getJsonObject(0);
|
||||
Assert.assertNotNull(route.getJsonNumber("create_date"));
|
||||
steps = route.getJsonArray("steps");
|
||||
Assert.assertEquals(3, steps.size());
|
||||
step = steps.getJsonObject(2);
|
||||
Assert.assertEquals("APPROVE", step.getString("type"));
|
||||
Assert.assertTrue(step.isNull("comment"));
|
||||
Assert.assertFalse(step.isNull("end_date"));
|
||||
Assert.assertEquals("admin", step.getString("validator_username"));
|
||||
Assert.assertEquals("APPROVED", step.getString("transition"));
|
||||
|
||||
// Get document 1 as admin
|
||||
Response response = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||
.get();
|
||||
Assert.assertEquals(Response.Status.NOT_FOUND, Response.Status.fromStatusCode(response.getStatus()));
|
||||
|
||||
// Get document 1 as admin
|
||||
// Get document 1 as route1
|
||||
json = target().path("/document/" + document1Id).request()
|
||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, route1Token)
|
||||
.get(JsonObject.class);
|
||||
|
||||
Reference in New Issue
Block a user