Merge pull request #297 from madhawap/rest-api-improvements

add changes to 'since' QueryParam and 'if-modified-since' HeaderParam
revert-70aa11f8
inoshperera 9 years ago committed by GitHub
commit 96eb71314b

@ -150,11 +150,11 @@ public interface ActivityInfoProviderService {
@Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"}) @Permission(scope = "activity-view", permissions = {"/permission/admin/device-mgt/admin/activities/view"})
Response getActivities( Response getActivities(
@ApiParam( @ApiParam(
name = "timestamp", name = "since",
value = "Validates if the requested variant has not been modified since the time specified, this " + value = "Validates if the requested variant has not been modified since the time specified, this " +
"should be provided in unix format in seconds.", "should be provided in unix format in seconds.",
required = false) required = false)
@QueryParam("timestamp") long timestamp, @QueryParam("since") String since,
@ApiParam( @ApiParam(
name = "offset", name = "offset",
value = "Starting point within the complete list of items qualified.", value = "Starting point within the complete list of items qualified.",

@ -74,42 +74,54 @@ public class ActivityProviderServiceImpl implements ActivityInfoProviderService
@GET @GET
@Override @Override
public Response getActivities( public Response getActivities(
@QueryParam("timestamp") long timestamp, @QueryParam("since") String since,
@QueryParam("offset") int offset, @QueryParam("offset") int offset,
@QueryParam("limit") int limit, @QueryParam("limit") int limit,
@HeaderParam("If-Modified-Since") String ifModifiedSince) { @HeaderParam("If-Modified-Since") String ifModifiedSince) {
long ifModifiedSinceTimestamp = 0;
long sinceTimestamp =0; long sinceTimestamp =0;
boolean isSinceModifiedIsSet = false; boolean isIfModifiedSinceSet = false;
if (ifModifiedSince != null && !ifModifiedSince.isEmpty()) { if (ifModifiedSince != null && !ifModifiedSince.isEmpty()) {
Date ifSinceDate;
SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
try { try {
ifSinceDate = format.parse(ifModifiedSince);
} catch (ParseException e) {
throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder().setCode(400l)
.setMessage("Invalid date string is provided in 'If-Modified-Since' header").build());
}
ifModifiedSinceTimestamp = ifSinceDate.getTime();
}
if (since != null && !since.isEmpty()){
Date sinceDate;
SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
Date sinceDate = format.parse(ifModifiedSince); try{
sinceTimestamp = sinceDate.getTime(); sinceDate = format.parse(since);
}catch (ParseException e){ }catch (ParseException e){
throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder().setCode(400l) throw new InputValidationException(new ErrorResponse.ErrorResponseBuilder().setCode(400l)
.setMessage("Invalid date " + "string is provided in 'If-Modified-Since' header").build()); .setMessage("Invalid date string is provided in 'since' filter").build());
} }
sinceTimestamp = sinceDate.getTime();
} }
if (sinceTimestamp > timestamp) { if (ifModifiedSinceTimestamp >= sinceTimestamp) {
timestamp = sinceTimestamp; sinceTimestamp = ifModifiedSinceTimestamp;
isSinceModifiedIsSet = true; isIfModifiedSinceSet = true;
} }
List<Activity> activities; List<Activity> activities;
DeviceManagementProviderService dmService; DeviceManagementProviderService dmService;
try { try {
dmService = DeviceMgtAPIUtils.getDeviceManagementService(); dmService = DeviceMgtAPIUtils.getDeviceManagementService();
activities = dmService.getActivitiesUpdatedAfter(timestamp); activities = dmService.getActivitiesUpdatedAfter(sinceTimestamp/1000);
if (activities == null || activities.size() == 0) { if (activities == null || activities.size() == 0) {
if (isSinceModifiedIsSet) { if (isIfModifiedSinceSet) {
return Response.status(Response.Status.NOT_MODIFIED).entity("No activities " + return Response.status(Response.Status.NOT_MODIFIED).entity("No activities " +
"after the timestamp provided in 'If-Modified-Since' header").build(); "after the time provided in 'If-Modified-Since' header").build();
} }
throw new NotFoundException( throw new NotFoundException(
new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage("No activities " + new ErrorResponse.ErrorResponseBuilder().setCode(404l).setMessage("No activities " +
"found.").build()); "found.").build());
} }
} catch (OperationManagementException e) { } catch (OperationManagementException e) {
String msg = "ErrorResponse occurred while fetching the activities updated after given time stamp."; String msg = "ErrorResponse occurred while fetching the activities updated after given time stamp.";
log.error(msg, e); log.error(msg, e);

Loading…
Cancel
Save