package org.genedb.crawl.controller; import java.util.List; import javax.jws.WebService; import org.genedb.crawl.CrawlException; import org.genedb.crawl.annotations.ResourceDescription; import org.genedb.crawl.dao.RegionsDAO; import org.genedb.crawl.model.Feature; import org.genedb.crawl.model.LocatedFeature; import org.genedb.crawl.model.Sequence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/regions") @ResourceDescription("Provides queries related to large genomic regions such as chromosomes or contigs") @WebService(serviceName="regions") public class RegionsController extends BaseController implements RegionsDAO { @Autowired RegionsDAO dao; /** * The exclude parameter works in this form: * &exclude=repeat_region&exclude=gene * * but not this form : * * &exclude[]=repeat_region&exclude[]=gene * * which JQuery would typically send. I think we can resolve this by setting * * jQuery.ajaxSettings.traditional = true; * * or * * $.ajaxSetup({ traditional: true }); * * in Web-Artemis. * * * @param region * @param start * @param end * @param exclude * @return * @throws CrawlException */ @Override @RequestMapping(method=RequestMethod.GET, value={"/locations", "/locations.*"}) @ResourceDescription("Returns features and their locations on a region of interest") public List<LocatedFeature> locations( @RequestParam("region") String region, @RequestParam(value="start",required=false) Integer start, @RequestParam(value="end", required=false) Integer end, @RequestParam(value="exclude", required=false) Boolean exclude, @RequestParam(value="types", required=false) @ResourceDescription("A list of features types to exclude or include.") List<String> types ) throws CrawlException { return dao.locations(region, start, end, exclude, types); } @Override @RequestMapping(method=RequestMethod.GET, value="/sequenceLength") @ResourceDescription("Returns the sequence on a region.") public List<Sequence> sequenceLength( @RequestParam("region") String region) { return dao.sequenceLength(region); } @Override @RequestMapping(method=RequestMethod.GET, value="/sequence") @ResourceDescription("Returns the sequence on a region.") public List<Sequence> sequence( @RequestParam("region") String region, @RequestParam(value="start", required=false) Integer start, @RequestParam(value="end", required=false) Integer end) { return dao.sequence(region, start, end); } @Override @RequestMapping(method=RequestMethod.GET, value="getInfo") @ResourceDescription("Returns the region's information.") public Feature getInfo( @RequestParam(value="uniqueName") String uniqueName, @RequestParam(value="name", required=false) String name, @RequestParam(value="organism", required=false) String organism) throws CrawlException { return dao.getInfo(uniqueName, name, organism); } @Override @RequestMapping(method=RequestMethod.GET, value="inorganism") @ResourceDescription("Returns the regions in an organism.") public List<Feature> inorganism( @RequestParam("organism") String organism, @RequestParam(value="limit", required=false) Integer limit, @RequestParam(value="offset", required=false) Integer offset, @RequestParam(value="type", required=false) String type) throws CrawlException { return dao.inorganism(organism, limit, offset, type); } @Override @RequestMapping(method=RequestMethod.GET, value="typesinorganism") @ResourceDescription("Returns the types of region present in an organism.") public List<Feature> typesInOrganism( @RequestParam("organism") String organism ) throws CrawlException { return dao.typesInOrganism(organism); } }