package cloudone.cumulonimbus.resources; import cloudone.ServiceFullName; import cloudone.cumulonimbus.ResourceRegistryService; import cloudone.cumulonimbus.model.HttpMethod; import cloudone.cumulonimbus.model.RestResourceDescription; import cloudone.internal.ApplicationFullName; import org.slf4j.LoggerFactory; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import java.util.Collection; import java.util.List; import java.util.Set; /** * Search for registered resources. * * @author Martin Mares (martin.mares at oracle.com) */ @Path("resource-discovery") public class ResourceDiscoveryResource { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ResourceDiscoveryResource.class); @GET @Produces("application/json") public Set<ApplicationFullName> getApplicationsForResource(@QueryParam("path") String path, @QueryParam("method") String method) { if (path == null || path.length() == 0 || method == null || method.length() == 0) { throw new WebApplicationException("Query parameters path and method must be specified!", 400); } return ResourceRegistryService.getInstance().getApplicationsForResource(path, HttpMethod.valueOf(method)); } @GET @Produces("text/plain") public String getPortsForResourceAsString(@QueryParam("path") String path, @QueryParam("method") String method) { Set<ApplicationFullName> apps = getApplicationsForResource(path, method); final StringBuilder result = new StringBuilder(); for (ApplicationFullName app : apps) { result.append(app).append('\n'); } return result.toString(); } @GET @Path("describe/{group}/{application}/{version}/{application}") @Produces("application/json") public Collection<RestResourceDescription> describeService(@PathParam("group") String group, @PathParam("application") String app, @PathParam("version") String version, @PathParam("application") String application) { final ServiceFullName serviceName = new ServiceFullName(group, app, version); final List<RestResourceDescription> result = ResourceRegistryService.getInstance().getResourcesForApplication(new ApplicationFullName(serviceName, application)); return result; } @GET @Path("describe/{group}/{application}/{version}/{application}") @Produces("text/plain") public String describeServiceAsString(@PathParam("group") String group, @PathParam("application") String app, @PathParam("version") String version, @PathParam("application") String application) { final Collection<RestResourceDescription> data = describeService(group, app, version, application); final StringBuilder result = new StringBuilder(); if (data != null) { for (RestResourceDescription description : data) { result.append(description).append('\n'); } } return result.toString(); } }