package org.genedb.crawl.controller; import java.io.IOException; import java.util.List; import javax.jws.WebService; import org.genedb.crawl.CrawlException; import org.genedb.crawl.annotations.ResourceDescription; import org.genedb.crawl.dao.VariantDAO; import org.genedb.crawl.model.MappedSAMSequence; import org.genedb.crawl.model.MappedVCFRecord; import org.genedb.crawl.model.Variant; 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; import uk.ac.sanger.artemis.util.OutOfRangeException; @Controller @ResourceDescription("Provides methods for VCF/BCF variant querying.") @RequestMapping("/variants") @WebService(serviceName="variants") public class VariantController extends BaseController implements VariantDAO { @Autowired VariantDAO dao; @Override @ResourceDescription("Returns the complete list of variant files.") @RequestMapping(method=RequestMethod.GET, value={"/list", "/list.*"}) public List<Variant> list() throws IOException { return dao.list(); } @Override @ResourceDescription("Returns a list of sequences in a variant file.") @RequestMapping(method=RequestMethod.GET, value={"/sequences", "/sequences.*"}) public List<MappedSAMSequence> sequences( @RequestParam("fileID") int fileID) throws IOException { return dao.sequences(fileID); } @Override @ResourceDescription("Returns a list of variant files for a particular organism.") @RequestMapping(method=RequestMethod.GET, value={"/listfororganism", "/listfororganism.*"}) public List<Variant> listfororganism( @RequestParam("organism") String organism) throws IOException { return dao.listfororganism(organism); } @Override @ResourceDescription("Returns a list of variant files for a particular sequence.") @RequestMapping(method=RequestMethod.GET, value={"/listforsequence", "/listforsequence.*"}) public List<Variant> listforsequence( @RequestParam("sequence") String sequence) throws Exception { return dao.listforsequence(sequence); } @Override @ResourceDescription("Queries a region of a variant file.") @RequestMapping(method=RequestMethod.GET, value={"/query", "/query.*"}) public List<MappedVCFRecord> query( @RequestParam("fileID") int fileID, @RequestParam("sequence") String sequence, @RequestParam("start") int start, @RequestParam("end") int end, @RequestParam(value="filter", required=false) Integer filter, @RequestParam(value="filters", required=false) List<String> filters) throws IOException, CrawlException, OutOfRangeException { return dao.query(fileID, sequence, start, end, filter, filters); } }