/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package uk.ac.ebi.ep.base.search;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.client.RestTemplate;
import uk.ac.ebi.ep.data.common.CommonSpecies;
import uk.ac.ebi.ep.data.dataconfig.DataConfig;
import uk.ac.ebi.ep.data.search.model.Species;
import uk.ac.ebi.ep.data.service.DiseaseService;
import uk.ac.ebi.ep.data.service.EnzymePortalService;
import uk.ac.ebi.ep.data.service.UniprotEntryService;
import uk.ac.ebi.ep.ebeye.model.EbeyeSearchResult;
import uk.ac.ebi.ep.ebeye.protein.model.Entry;
/**
*
* @author joseph
*/
public class EbeyeSearchTest {
@Autowired
private static UniprotEntryService uniprotEntryService;
public static void main(String args[]) {
EbeyeSearchTest t = new EbeyeSearchTest();
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.getEnvironment().setActiveProfiles("uzpdev");
//context.getEnvironment().setActiveProfiles("ezprel");
context.register(DataConfig.class);
context.scan("uk.ac.ebi.ep.data.dataconfig");
context.refresh();
UniprotEntryService service = context.getBean(UniprotEntryService.class);
EnzymePortalService compoundService = context.getBean(EnzymePortalService.class);
DiseaseService diseaseService = context.getBean(DiseaseService.class);
RestTemplate restTemplate = new RestTemplate();
String query = "alzheimer disease";
String url = "http://www.ebi.ac.uk/ebisearch/ws/rest/uniprot?query="+query+"&format=json&size=100";
EbeyeSearchResult searchResult = restTemplate.getForObject(url, EbeyeSearchResult.class);
List<Entry> results = searchResult.getEntries().stream().distinct()
.collect(Collectors.toList());
//Collections.sort(results, (Entry n1, Entry n2) -> n1.getUniport_name().compareTo(n2.getUniport_name()));
System.out.println("results " + results.size());
for(Entry d : results){
System.out.println("found "+ d.getUniprotAccession());
}
// List<UniprotEntry> enzymes = null;
// List<EnzymePortalCompound> compounds = null;
// List<EnzymePortalDisease> diseases = null;
// List<String> prefixes = new LinkedList<>();
// List<String> accessions = new ArrayList<>();
//
// results.stream().forEach((result) -> {
// // prefixes.add("ACE");
// prefixes.add(result.getUniport_name());
// accessions.add(result.getUniprotAccession());
// //System.out.println("names "+ result.getUniport_name());
// });
//find by prefixes
// enzymes = service.findByNamePrefixes(prefixes);
// //compounds = compoundService.findCompoundsByNamePrefix(prefixes);
// //diseases = diseaseService.findDiseasesByNamePrefix(prefixes);
// //List<Species> specieList = new LinkedList<>();
//
// //find by accessions
//
// //enzymes = service.findEnzymesByAccessions(accessions);
// diseases = diseaseService.findDiseasesByAccessions(accessions);
//
// Set<Species> uniqueSpecies = new TreeSet<>();
// Set<EnzymePortalDisease> uniqueDiseases = new TreeSet<>();
//
// System.out.println("final result " + enzymes.size());
// // System.out.println("num of dieases "+ enzymes.iterator().next().getEnzymePortalDiseaseList().size());
// for (UniprotEntry u : enzymes) {
// //System.out.println("summary "+ u);
// Species s = new Species();
// s.setCommonname(u.getCommonName());
// s.setScientificname(u.getScientificName());
// s.setSelected(false);
// uniqueSpecies.add(s);
//
// for(EnzymePortalDisease d : u.getEnzymePortalDiseaseSet()){
// EnzymePortalDisease disease = new EnzymePortalDisease();
// disease.setDiseaseId(d.getDiseaseId());
// disease.setDiseaseName(d.getDiseaseName());
// disease.setUrl(d.getUrl());
// disease.setDefinition(d.getDefinition());
// disease.setEvidence(d.getEvidence());
// disease.setUniprotAccession(d.getUniprotAccession());
// uniqueDiseases.add(disease);
// }
//
//
//
//// for(EnzymePortalCompound c : u.getEnzymePortalCompoundSet()){
//// EnzymePortalCompound compound = new EnzymePortalCompound();
//// compound.setCompoundId(c.getCompoundId());
//// compound.setCompoundName(c.getCompoundName());
//// compound.setCompoundRole(c.getCompoundRole());
//// compound.setCompoundSource(c.getCompoundSource());
//// compound.setRelationship(url);
//// }
//
//
// }
//species
// t.buildSpeciesFilter(uniqueSpecies);
//compounds
// for(EnzymePortalCompound c : compounds){
// //System.out.println("compounds found "+ c);
// }
//
// //diseases
// System.out.println("unique diseases found "+ uniqueDiseases.size());
// for(EnzymePortalDisease d : uniqueDiseases){
// //System.out.println("Diseases : "+ d);
// }
//System.out.println("number of EnzymePortalDiseases found "+ diseases.size());
// for(EnzymePortalDisease d : diseases){
// System.out.println("EnzymePortalDiseases found : "+ d);
// }
//
// RestTemplate restTemplate = new RestTemplate();
// String url = "http://www.ebi.ac.uk/ebisearch/ws/rest/uniprot?query=cancer&format=json&size=100";
//
// EbeyeSearchResult searchResult = restTemplate.getForObject(url, EbeyeSearchResult.class);
//
// List<UniProtDomain> results = searchResult.getUniProtDomains().stream().distinct()
// .collect(Collectors.toList());
//
//
// //Collections.sort(results, (Entry n1, Entry n2) -> n1.getUniport_name().compareTo(n2.getUniport_name()));
//
//
//
//
// for (Entry result : results) {
//
// //System.out.println("Acc: " + result.getUniprotAccession());
// System.out.println("Id: " + result.getUniport_name());
// //System.out.println("Source: " + result.getSource());
// // Iterable<UniprotEntry> ue = uniprotEntryService.findByNamePrefix(result.getUniport_name());
// //System.out.println("size "+ ue.iterator().next());
// }
}
public List<Species> buildSpeciesFilter(Set<Species> uniqueSpecies) {
List<String> commonSpecieList = new ArrayList<>();
for (CommonSpecies commonSpecies : CommonSpecies.values()) {
commonSpecieList.add(commonSpecies.getScientificName());
}
Map<Integer, Species> priorityMapper = new TreeMap<>();
AtomicInteger key = new AtomicInteger(50);
AtomicInteger customKey = new AtomicInteger(6);
for (Species sp : uniqueSpecies) {
if (commonSpecieList.contains(sp.getScientificname().split("\\(")[0].trim())) {
// HUMAN, MOUSE, RAT, Fly, WORM, Yeast, ECOLI
// "Homo sapiens","Mus musculus","Rattus norvegicus", "Drosophila melanogaster","WORM","Saccharomyces cerevisiae","ECOLI"
if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.HUMAN.getScientificName())) {
priorityMapper.put(1, sp);
} else if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.MOUSE.getScientificName())) {
priorityMapper.put(2, sp);
} else if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.RAT.getScientificName())) {
priorityMapper.put(3, sp);
} else if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.FRUIT_FLY.getScientificName())) {
priorityMapper.put(4, sp);
} else if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.WORM.getScientificName())) {
priorityMapper.put(5, sp);
} else if (sp.getScientificname().equalsIgnoreCase(CommonSpecies.ECOLI.getScientificName())) {
priorityMapper.put(6, sp);
} else if (sp.getScientificname().split("\\(")[0].trim().equalsIgnoreCase(CommonSpecies.BAKER_YEAST.getScientificName())) {
priorityMapper.put(customKey.getAndIncrement(), sp);
}
} else {
priorityMapper.put(key.getAndIncrement(), sp);
}
}
List<Species> speciesFilters = new LinkedList<>();
for (Map.Entry<Integer, Species> map : priorityMapper.entrySet()) {
speciesFilters.add(map.getValue());
}
// for (Species s : speciesFilters) {
// System.out.println("Name " + s.getCommonname() + " " + "Sciencetific " + s.getScientificname());
// }
return speciesFilters;
//building search filters
// SearchFilters filters = new SearchFilters();
// filters.setSpecies(speciesFilters);
// //filters.setCompounds(compoundFilters);
// //filters.setDiseases(diseaseFilter);
// // searchResults.setSearchfilters(filters);
//
//
}
}