package org.nextprot.api.core.service;
import org.nextprot.api.commons.constants.TerminologyCv;
import org.nextprot.api.commons.utils.Tree;
import org.nextprot.api.core.domain.CvTerm;
import org.nextprot.api.core.domain.Terminology;
import org.nextprot.api.core.utils.graph.OntologyDAG;
import java.util.List;
import java.util.Set;
public interface TerminologyService {
/**
* @return a {@code CvTerm} by accession
*/
CvTerm findCvTermByAccession(String accession);
/**
* @return a list of all {@code CvTerm}s of a given ontology
*/
List<CvTerm> findCvTermsByOntology(String ontology);
/**
* @deprecated use {@link #findOntologyGraph(TerminologyCv)} instead
*/
@Deprecated
Terminology findTerminology(TerminologyCv terminologyCv);
/**
* @return a Directed Acyclic Graph of {@code CvTerm}s ontology
*/
OntologyDAG findOntologyGraph(TerminologyCv terminologyCv);
/**
* @return a {@code CvTerm} by id
*/
// TODO: should be implemented here, implementation should be cached, OntologyDAG will refered this service
//CvTerm findCvTermById(long id);
/**
* Retrieves terms sorted by ontology
*
* @return
*/
List<CvTerm> findAllCVTerms();
/**
* Gets enzyme terminologies
*
* @param entryName
* @return
*/
List<CvTerm> findEnzymeByMaster(String entryName);
List<CvTerm> findCvTermsByAccessions(Set<String> terminologyAccessions);
List<String> findTerminologyNamesList();
//TODO TRY TO PLACE THIS ELSEWHERE, BUT PROBABLY SHOULD BE CACHED!
Set<String> getAncestorSets(List<Tree<CvTerm>> trees, String accession);
}