package com.hubspot.singularity.resources; import java.util.List; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import com.google.common.base.Optional; import com.google.inject.Inject; import com.hubspot.singularity.SingularityRequestGroup; import com.hubspot.singularity.SingularityService; import com.hubspot.singularity.data.RequestGroupManager; import com.hubspot.singularity.data.SingularityValidator; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; @Path(RequestGroupResource.PATH) @Produces({ MediaType.APPLICATION_JSON }) @Api(description="Manages Singularity Request Groups, which are collections of one or more Singularity Requests", value=RequestGroupResource.PATH, position=1) public class RequestGroupResource { public static final String PATH = SingularityService.API_BASE_PATH + "/groups"; private final RequestGroupManager requestGroupManager; private final SingularityValidator validator; @Inject public RequestGroupResource(RequestGroupManager requestGroupManager, SingularityValidator validator) { this.requestGroupManager = requestGroupManager; this.validator = validator; } @GET @ApiOperation(value="Get a list of Singularity request groups") public List<SingularityRequestGroup> getRequestGroupIds(@QueryParam("useWebCache") Boolean useWebCache) { return requestGroupManager.getRequestGroups(useWebCache != null && useWebCache); } @GET @Path("/group/{requestGroupId}") @ApiOperation(value="Get a specific Singularity request group by ID") public Optional<SingularityRequestGroup> getRequestGroup(@PathParam("requestGroupId") String requestGroupId) { return requestGroupManager.getRequestGroup(requestGroupId); } @DELETE @Path("/group/{requestGroupId}") @ApiOperation(value="Delete a specific Singularity request group by ID") public void deleteRequestGroup(@PathParam("requestGroupId") String requestGroupId) { requestGroupManager.deleteRequestGroup(requestGroupId); } @POST @ApiOperation(value="Create a Singularity request group") public SingularityRequestGroup saveRequestGroup(SingularityRequestGroup requestGroup) { validator.checkRequestGroup(requestGroup); requestGroupManager.saveRequestGroup(requestGroup); return requestGroup; } }