Github user tbouron commented on a diff in the pull request: https://github.com/apache/brooklyn-server/pull/821#discussion_r141595976 --- Diff: rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java --- @@ -0,0 +1,233 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.rest.api; + +import java.util.List; +import java.util.Map; + +import javax.ws.rs.Consumes; +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 javax.ws.rs.core.Response; + +import org.apache.brooklyn.rest.domain.AdjunctDetail; +import org.apache.brooklyn.rest.domain.AdjunctSummary; +import org.apache.brooklyn.rest.domain.ConfigSummary; +import org.apache.brooklyn.rest.domain.Status; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; + +@Path("/applications/{application}/entities/{entity}/adjuncts") +@Api("Entity Adjuncts (policies, enrichers, feeds)") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public interface AdjunctApi { + + @GET + @ApiOperation(value = "Fetch the adjuncts attached to a specific application entity", + response = org.apache.brooklyn.rest.domain.AdjunctSummary.class, + responseContainer = "List") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application or entity") + }) + public List<AdjunctSummary> list( + @ApiParam(value = "Application ID or name", required = true) + @PathParam("application") final String application, + @ApiParam(value = "Entity ID or name", required = true) + @PathParam("entity") final String entityToken, + @ApiParam(value = "Filter by adjunct type", required = false) + @QueryParam("adjunctType") final String adjunctType); + + @POST + @ApiOperation(value = "Add an adjunct (policy, enricher, or feed)", notes = "Returns a summary of the added adjunct") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application or entity"), + @ApiResponse(code = 400, message = "Type is not a suitable adjunct") + }) + public AdjunctSummary addAdjunct( + @ApiParam(name = "application", value = "Application ID or name", required = true) + @PathParam("application") String application, + + @ApiParam(name = "entity", value = "Entity ID or name", required = true) + @PathParam("entity") String entityToken, + + @ApiParam(name = "type", value = "Adjunct from the type registry to instantiate and add", required = true) + @QueryParam("type") + String adjunctRegisteredTypeName, + + // TODO would like to make this optional but jersey complains if we do + @ApiParam(name = "config", value = "Configuration for the adjunct (as key value pairs)", required = true) + Map<String, String> config); + + @GET + @Path("/{adjunct}") + @ApiOperation(value = "Gets detail of an adjunct") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application, entity or adjunct") + }) + public AdjunctDetail get( + @ApiParam(name = "application", value = "Application ID or name", required = true) + @PathParam("application") String application, + + @ApiParam(name = "entity", value = "Entity ID or name", required = true) + @PathParam("entity") String entityToken, + + @ApiParam(name = "adjunct", value = "Adjunct ID or name", required = true) + @PathParam("adjunct") String adjunctId); + + @GET + @Path("/{adjunct}/status") + @ApiOperation(value = "Gets status of an adjunct (RUNNING / SUSPENDED)") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application, entity or adjunct") + }) + public Status getStatus( + @ApiParam(name = "application", value = "Application ID or name", required = true) + @PathParam("application") String application, + + @ApiParam(name = "entity", value = "Entity ID or name", required = true) + @PathParam("entity") String entityToken, + + @ApiParam(name = "adjunct", value = "Adjunct ID or name", required = true) + @PathParam("adjunct") String adjunctId); + + @POST + @Path("/{adjunct}/start") + @ApiOperation(value = "Start or resume an adjunct") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application, entity or adjunct") + }) + public Response start( + @ApiParam(name = "application", value = "Application ID or name", required = true) + @PathParam("application") String application, + + @ApiParam(name = "entity", value = "Entity ID or name", required = true) + @PathParam("entity") String entityToken, + + @ApiParam(name = "adjunct", value = "Adjunct ID or name", required = true) + @PathParam("adjunct") String adjunctId); + + @POST + @Path("/{adjunct}/stop") + @ApiOperation(value = "Suspends an adjunct") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Could not find application, entity or adjunct") --- End diff -- This endpoint also returns a 400, based on the `AdjunctResource`. Should be listed here.
---