Github user ahgittin commented on a diff in the pull request:
https://github.com/apache/brooklyn-server/pull/821#discussion_r142348859
--- 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")
+ })
+ public Response stop(
+ @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);
+
+ @DELETE
+ @Path("/{adjunct}")
+ @ApiOperation(value = "Destroy an adjunct", notes="Removes an adjunct
from being associated with the entity and destroys it (stopping first if
running)")
+ @ApiResponses(value = {
+ @ApiResponse(code = 404, message = "Could not find
application, entity or adjunct")
--- End diff --
this one should never fall in to the `400` block; updated adjunct resource
---