package org.nextprot.api.user.controller; import java.util.ArrayList; import java.util.List; import org.jsondoc.core.annotation.Api; import org.jsondoc.core.annotation.ApiMethod; import org.jsondoc.core.annotation.ApiPathParam; import org.jsondoc.core.pojo.ApiVerb; import org.nextprot.api.security.service.impl.NPSecurityContext; import org.nextprot.api.user.domain.UserQuery; import org.nextprot.api.user.service.UserQueryService; import org.nextprot.api.user.utils.UserQueryUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** * Controller for operating (CRUD) on user queries (SPARQL) * * @author dteixeira */ @Lazy @Controller @Api(name = "Queries", description = "Method to access queries without authentication (SPARQL)", group="Sparql Queries") public class PublicQueryController { @Autowired private UserQueryService userQueryService; // Collections ///////////////// @ApiMethod(verb = ApiVerb.GET, description = "Gets all public queries plus user queries if the user is currently logged in. Also if snorql parameter is set, snorql specific queries will also be retrieved", produces = {MediaType.APPLICATION_JSON_VALUE}, consumes = { MediaType.APPLICATION_JSON_VALUE}) @RequestMapping(value = "/queries", method = { RequestMethod.GET }) @ResponseBody public List<UserQuery> getQueriesIHaveAccess(@RequestParam(value="snorql", required=false) Boolean snorql) { //start with queries List<UserQuery> res = new ArrayList<UserQuery>(); res.addAll(userQueryService.getNxqTutorialQueries()); //add user queries if logged (access db, but is cached with cache evict if the query is modified) if (NPSecurityContext.getCurrentUser() != null) { res.addAll(userQueryService.getUserQueries(NPSecurityContext.getCurrentUser())); } //remove snorql queries if not specified if(snorql == null || !snorql){ res = UserQueryUtils.removeQueriesContainingTag(res, "snorql-only"); } return res; } //Not really used, just to show the user... @ApiMethod(verb = ApiVerb.GET, description = "Gets all tutorial queries", produces = {MediaType.APPLICATION_JSON_VALUE}, consumes = { MediaType.APPLICATION_JSON_VALUE}) @RequestMapping(value = "/queries/tutorial", method = { RequestMethod.GET }) @ResponseBody @Deprecated //use only queries instead public List<UserQuery> getTutorialQueries() { List<UserQuery> res = new ArrayList<UserQuery>(); res.addAll(userQueryService.getNxqTutorialQueries()); //add user queries if logged (access db, but is cached with cache evict if the query is modified) if (NPSecurityContext.getCurrentUser() != null) { res.addAll(userQueryService.getUserQueries(NPSecurityContext.getCurrentUser())); } return res; } // Gets query by public id ///////////////// @ApiMethod(verb = ApiVerb.GET, description = "Gets user queries the current logged user and all the tutorials queries as well, If snorql parameter is set, snorql specific queries should also be retrieved", produces = {MediaType.APPLICATION_JSON_VALUE}, consumes = { MediaType.APPLICATION_JSON_VALUE}) @RequestMapping(value = "/queries/{id}", method = { RequestMethod.GET }) @ResponseBody public UserQuery getQueriesByItsPublicId(@ApiPathParam(name = "id", description = "The private or public id", allowedvalues = { "NXQ_00001" }) @PathVariable("id") String id) { return userQueryService.getUserQueryByPublicId(id); } }