package org.axway.grapes.server.webapp.resources;
import org.axway.grapes.commons.api.ServerAPI;
import org.axway.grapes.server.config.GrapesServerConfig;
import org.axway.grapes.server.core.graphs.AbstractGraph;
import org.axway.grapes.server.core.graphs.TreeNode;
import org.axway.grapes.server.core.options.FiltersHolder;
import org.axway.grapes.server.db.RepositoryHandler;
import org.axway.grapes.server.db.datamodel.DbModule;
import org.eclipse.jetty.http.HttpStatus;
import org.slf4j.Logger;
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.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
/**
* Sequoia
*
* <p>This server resource handles dependencies rendering.</p>
*/
@Path(ServerAPI.SEQUOIA_RESOURCE)
public class Sequoia extends AbstractResource{
private static final Logger LOG = LoggerFactory.getLogger(Sequoia.class);
public Sequoia(final RepositoryHandler repoHandler, final GrapesServerConfig dmConfig) {
super(repoHandler, "Sequoia.ftl",dmConfig);
}
/**
* Perform a module dependency graph of the target and return the graph as a JSON
*
* @param moduleName
* @param moduleVersion
* @param uriInfo
* @return Response
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/graph/{name}/{version}")
public Response getModuleGraph(@PathParam("name") final String moduleName,
@PathParam("version") final String moduleVersion,
@Context final UriInfo uriInfo){
LOG.info("Dependency Checker got a get module graph export request.");
if(moduleName == null || moduleVersion == null){
return Response.serverError().status(HttpStatus.NOT_ACCEPTABLE_406).build();
}
final FiltersHolder filters = new FiltersHolder();
filters.init(uriInfo.getQueryParameters());
final String moduleId = DbModule.generateID(moduleName, moduleVersion);
final AbstractGraph moduleGraph = getGraphsHandler(filters).getModuleGraph(moduleId);
return Response.ok(moduleGraph).build();
}
/**
* Provide a module dependency tree
*
* @param moduleName
* @param moduleVersion
* @param uriInfo
* @return Response
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/tree/{name}/{version}")
public Response getModuleTree(@PathParam("name") final String moduleName,
@PathParam("version") final String moduleVersion,
@Context final UriInfo uriInfo){
LOG.info("Dependency Checker got a get groupid tree export request.");
if(moduleName == null || moduleVersion == null){
return Response.serverError().status(HttpStatus.NOT_ACCEPTABLE_406).build();
}
final FiltersHolder filters = new FiltersHolder();
filters.init(uriInfo.getQueryParameters());
final String moduleId = DbModule.generateID(moduleName, moduleVersion);
final TreeNode jsonTree = getGraphsHandler(filters).getModuleTree(moduleId);
return Response.ok(jsonTree).build();
}
}