package org.genedb.crawl.mappers;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.genedb.crawl.model.BlastPair;
import org.genedb.crawl.model.Cvterm;
import org.genedb.crawl.model.Feature;
import org.genedb.crawl.model.LocatedFeature;
import org.genedb.crawl.model.HierarchyGeneFetchResult;
import org.genedb.crawl.model.HierarchyRelation;
import org.genedb.crawl.model.Statistic;
public interface FeaturesMapper {
//int getFeatureID(String uniquename);
List<HierarchyGeneFetchResult> getGeneForFeature(@Param("features") List<String> features );
List<HierarchyRelation> getRelationshipsParents(@Param("feature") String feature, @Param("relationships") List<Cvterm> relationships );
List<HierarchyRelation> getRelationshipsChildren(@Param("feature") String feature, @Param("relationships") List<Cvterm> relationships );
List<Feature> coordinates(@Param("features") List<String> features, @Param("region") String region );
List<Feature> synonyms(@Param("features") List<String> features, @Param("types") List<String> types );
List<Feature> properties(@Param("features") List<String> features, @Param("types") List<String> types );
List<Feature> pubs (@Param("features") List<String> features);
List<Feature> dbxrefs (@Param("features") List<String> features);
List<Feature> terms (@Param("features") List<String> features, @Param("cvs") List<String> cvs);
List<Feature> orthologues(@Param("features") List<String> features);
List<Feature> clusters(@Param("features") List<String> features);
List<Feature> synonymsLike(
@Param("term") String term,
@Param("regex") Boolean regex,
@Param("region") String region);
List<Feature> featuresLike(
@Param("term") String term,
@Param("regex") Boolean regex,
@Param("region") String region);
List<Feature> withproperty(
@Param("value") String value,
@Param("regex") Boolean regex,
@Param("region") String region,
@Param("type") String type);
List<Feature> withterm(
@Param("cvterm") String cvterm,
@Param("cv") String cv,
@Param("regex") Boolean regex,
@Param("region") String region);
List<Feature> timelastmodified(
@Param("date") Date date,
@Param("organism_id") Integer organism_id,
@Param("types") List<String> types,
@Param("exclude") boolean exclude);
List<Feature> annotationModified(
@Param("date") Date date,
@Param("organism_id") Integer organism_id,
@Param("region") String region);
List<Statistic> annotationModifiedStatistics(@Param("date") Date date, @Param("organism_id") Integer organism_id, @Param("region") String region);
List<BlastPair> blastPairs(
@Param("f1") String f1,
@Param("start1") int start1,
@Param("end1") int end1,
@Param("f2") String f2,
@Param("start2") int start2,
@Param("end2") int end2,
@Param("length") Integer length,
@Param("normscore") Double normscore);
// this method should return any features that are located on regular features
// e.g. orthologues, but also domains...
// TODO think about whether this is better implemented with a less chado-ish
// interface - e.g. feature/domains
// we already have features/orthologues done this way
public List<LocatedFeature> locations(@Param("region") String region);
}