package org.genedb.crawl.elasticsearch.mappers; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.elasticsearch.action.count.CountResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilders; import org.genedb.crawl.mappers.OrganismsMapper; import org.genedb.crawl.model.Organism; import org.genedb.crawl.model.Property; import org.springframework.stereotype.Component; @Component public class ElasticSearchOrganismsMapper extends ElasticSearchBaseMapper implements OrganismsMapper { private Logger logger = Logger.getLogger(ElasticSearchOrganismsMapper.class); private int getTotalOrganisms() { CountResponse cr = connection.getClient() .prepareCount(connection.getIndex()) .setTypes(connection.getOrganismType()) .setQuery( QueryBuilders.matchAllQuery()) .execute() .actionGet(); long count = cr.count(); return (int) count; } public List<Organism> list() { logger.info("Fetching organisms from " + connection); SearchResponse response = connection.getClient() .prepareSearch(connection.getIndex()) .setTypes(connection.getOrganismType()) .setQuery(QueryBuilders.matchAllQuery()) .setSize(getTotalOrganisms()) .execute() .actionGet(); return getAllMatches(response, Organism.class); } public Organism getByID(int ID) { Organism o = (Organism) this.getFirstMatch(connection.getIndex(), connection.getOrganismType(), "ID", String.valueOf(ID), Organism.class); logger.info(o); return o; } public Organism getByTaxonID(String taxonID) { return (Organism) this.getFirstMatch(connection.getIndex(), connection.getOrganismType(), "taxonID", taxonID, Organism.class); } public Organism getByCommonName(String commonName) { return (Organism) this.getFirstMatch(connection.getIndex(), connection.getOrganismType(), "common_name", commonName, Organism.class); } public Property getOrganismProp(Organism organism, String cv, String cvterm) { if (organism.properties == null) return null; for (Property property : organism.properties) { if (! property.name.equals(cvterm)) continue; if (cv == null || property.type.name.equals(cv)) return property; } return null; } @Override public List<Property> getOrganismProps(Organism organism, String cv) { if (cv == null) return organism.properties; List<Property> properties = new ArrayList<Property>(); for (Property property : organism.properties) { if (property.type.name.equals(cv)) properties.add(property); } return properties; } public void createOrUpdate(Organism organism) { //String source = jsonIzer.toJson(organism); //logger.info(source); logger.info(String.format("Storing organism as %s in index %s and type %s", connection.getIndex(), connection.getOrganismType(), organism.common_name)); // connection.getClient().prepareIndex(connection.getIndex(), // connection.getOrganismType(), // organism.common_name).setSource(source).execute().actionGet(); createOrUpdate(connection.getIndex(), connection.getOrganismType(), organism.common_name, organism); } }