package org.genedb.crawl.controller;
import java.util.List;
import javax.jws.WebService;
import org.biojava.bio.BioException;
import org.genedb.crawl.CrawlException;
import org.genedb.crawl.annotations.ResourceDescription;
import org.genedb.crawl.controller.BaseController;
import org.genedb.crawl.dao.FeatureDAO;
import org.genedb.crawl.model.Dbxref;
import org.genedb.crawl.model.Feature;
import org.genedb.crawl.model.Property;
import org.genedb.crawl.model.Synonym;
import org.genedb.crawl.model.LocatedFeature;
import org.genedb.util.TranslationException;
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("/feature")
@ResourceDescription("Single feature related queries")
@WebService(serviceName="feature")
public class FeatureController extends BaseController implements FeatureDAO {
@Autowired
FeatureDAO dao;
@Override
@ResourceDescription("Return a gene's information")
@RequestMapping(method=RequestMethod.GET, value="/info")
public Feature get(
@RequestParam("uniqueName") String uniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name,
@RequestParam(value="type",required=false) String type) {
return dao.get(uniqueName, organism, name, type);
}
@Override
@ResourceDescription("Return feature dbxrefs")
@RequestMapping(method=RequestMethod.GET, value="/dbxrefs")
public List<Dbxref> dbxrefs(
@RequestParam(value="uniqueName") String featureUniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name) {
return dao.dbxrefs(featureUniqueName, organism, name);
}
@Override
@RequestMapping(method=RequestMethod.GET, value="/parents")
public List<Feature> parents(
@RequestParam("uniqueName") String featureUniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name,
@RequestParam(value="relationships", required=false) String[] relationships) throws CrawlException {
return dao.parents(featureUniqueName, organism, name, relationships);
}
@Override
@RequestMapping(method=RequestMethod.GET, value="/children")
public List<Feature> children(
@RequestParam("uniqueName") String featureUniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name,
@RequestParam(value="relationships", required=false) String[] relationships) throws CrawlException {
return dao.children(featureUniqueName, organism, name, relationships);
}
@Override
@ResourceDescription("Returns the hierarchy of a feature (i.e. the parent/child relationship graph), but routed on the feature itself (rather than Gene).")
@RequestMapping(method=RequestMethod.GET, value="/hierarchy")
public Feature hierarchy(
@RequestParam("uniqueName") String uniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name,
@RequestParam(value="relationships", required=false) String[] relationships,
@RequestParam(value="includeSummaries", required=false) Boolean includeSummaries
) throws CrawlException {
return dao.hierarchy(uniqueName, organism, name, relationships, includeSummaries);
}
@Override
@ResourceDescription("Return features located on features")
@RequestMapping(method=RequestMethod.GET, value="/locations")
public List<LocatedFeature> locations(@RequestParam("uniqueName") String feature ) {
return dao.locations(feature);
}
@Override
@RequestMapping(method=RequestMethod.GET, value="/domains")
public List<LocatedFeature> domains(
@RequestParam("uniqueName") String featureUniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name) {
return dao.domains(featureUniqueName, organism, name);
}
@Override
@ResourceDescription("Return feature dbxrefs")
@RequestMapping(method = RequestMethod.GET, value = "/polypeptide_properties")
public List<Property> getPolypeptideProperties(
@RequestParam(value = "uniqueName") String featureUniqueName,
@RequestParam(value = "organism", required = false) String organism,
@RequestParam(value = "name", required = false) String name) throws BioException, TranslationException {
return dao.getPolypeptideProperties(featureUniqueName, organism, name);
}
@Override
@ResourceDescription("Return feature synonyms")
@RequestMapping(method = RequestMethod.GET, value = "/synonyms")
public List<Synonym> synonyms(
@RequestParam("uniqueName") String uniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name) {
return dao.synonyms(uniqueName, organism, name);
}
@Override
@ResourceDescription("Returns the isoform unique name")
@RequestMapping(method = RequestMethod.GET, value = "/isoform")
public Feature getIsoform(
@RequestParam("uniqueName") String uniqueName,
@RequestParam(value="organism",required=false) String organism,
@RequestParam(value="name",required=false) String name) {
return dao.getIsoform(uniqueName, organism, name);
}
}