Example usage for org.apache.solr.client.solrj SolrQuery setRows

List of usage examples for org.apache.solr.client.solrj SolrQuery setRows

Introduction

In this page you can find the example usage for org.apache.solr.client.solrj SolrQuery setRows.

Prototype

public SolrQuery setRows(Integer rows) 

Source Link

Usage

From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java

License:Apache License

public boolean hasRole(AccessGroupSet accessGroups, UserRole userRole) {
    StringBuilder query = new StringBuilder();
    String joinedGroups = accessGroups.joinAccessGroups(" OR ", userRole.toString() + "|", true);
    query.append("roleGroup:(").append(joinedGroups).append(')');

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery(query.toString());
    solrQuery.setRows(0);

    try {/*from  w w w .  j  av a2 s .  c om*/
        QueryResponse queryResponse = this.executeQuery(solrQuery);
        return queryResponse.getResults().getNumFound() > 0;
    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
    }
    return false;
}

From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java

License:Apache License

/**
 * Get the number of departments represented in the collection
 * //w w  w.  j a v  a  2  s  .co m
 * @return the count, or -1 if there was an error retrieving the count
 */

public int getDepartmentsCount() {

    SolrQuery query;
    QueryResponse response;

    query = new SolrQuery();
    query.setQuery("*:*");
    query.setRows(0);
    query.addFacetField("department");
    query.setFacetLimit(-1);

    try {
        response = this.executeQuery(query);
        return response.getFacetField("department").getValueCount();
    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
    }

    return -1;

}

From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java

License:Apache License

/**
 * Get the total number of collections//  w ww.j  ava 2  s  . co  m
 * 
 * @return the count, or -1 if there was an error retrieving the count
 */

public long getCollectionsCount() {

    SolrQuery query;
    QueryResponse response;

    query = new SolrQuery();
    query.setQuery("resourceType:Collection");
    query.setRows(0);
    query.setFacetLimit(-1);

    try {
        response = this.executeQuery(query);
        return response.getResults().getNumFound();
    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
    }

    return -1;

}

From source file:edu.unc.lib.dl.ui.service.SolrQueryLayerService.java

License:Apache License

/**
 * Get the number of objects present in the collection for various formats
 * /*w ww.  j  a v a2  s  .c o m*/
 * @return a map from format name to count
 */

public Map<String, Long> getFormatCounts() {

    SolrQuery query;
    QueryResponse response;

    query = new SolrQuery();
    query.setQuery("*:*");
    query.setRows(0);
    query.addFacetField("contentType");
    query.setFacetLimit(-1);

    HashMap<String, Long> counts = new HashMap<String, Long>();

    try {
        response = this.executeQuery(query);
        FacetField facetField = response.getFacetField("contentType");

        for (Count count : facetField.getValues()) {

            if (count.getName().startsWith("^text"))
                counts.put("text", count.getCount());
            else if (count.getName().startsWith("^image"))
                counts.put("image", count.getCount());
            else if (count.getName().startsWith("^dataset"))
                counts.put("dataset", count.getCount());
            else if (count.getName().startsWith("^audio"))
                counts.put("audio", count.getCount());
            else if (count.getName().startsWith("^video"))
                counts.put("video", count.getCount());

        }

    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
    }

    return counts;

}

From source file:edu.usu.sdl.openstorefront.service.SearchServiceImpl.java

License:Apache License

@Override
public List<ComponentSearchView> getSearchItems(SearchQuery query, FilterQueryParams filter) {
    // use for advanced search with And - Or combinations on separate fields
    String queryOperator = " " + SolrAndOr.OR + " ";
    String myQueryString;/*from  ww w  . ja v a 2  s  .  c  om*/

    // If incoming query string is blank, default to solar *:* for the full query
    if (StringUtils.isNotBlank(query.getQuery())) {
        StringBuilder queryData = new StringBuilder();

        Field fields[] = SolrComponentModel.class.getDeclaredFields();
        for (Field field : fields) {
            org.apache.solr.client.solrj.beans.Field fieldAnnotation = field
                    .getAnnotation(org.apache.solr.client.solrj.beans.Field.class);
            if (fieldAnnotation != null && field.getType() == String.class) {
                String name = field.getName();
                if (StringUtils.isNotBlank(fieldAnnotation.value())
                        && org.apache.solr.client.solrj.beans.Field.DEFAULT
                                .equals(fieldAnnotation.value()) == false) {
                    name = fieldAnnotation.value();
                }

                queryData.append(SolrEquals.EQUAL.getSolrOperator()).append(name)
                        .append(SolrManager.SOLR_QUERY_SEPERATOR).append(query.getQuery())
                        .append(queryOperator);
            }
        }
        myQueryString = queryData.toString();
        if (myQueryString.endsWith(queryOperator)) {
            queryData.delete((myQueryString.length() - (queryOperator.length())), myQueryString.length());
            myQueryString = queryData.toString();
        }
    } else {
        myQueryString = SolrManager.SOLR_ALL_QUERY;
    }
    log.log(Level.FINER, myQueryString);

    // execute the searchComponent method and bring back from solr a list array
    List<SolrComponentModel> resultsList = new ArrayList<>();
    try {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(myQueryString);

        // fields to be returned back from solr
        solrQuery.setFields(SolrComponentModel.ID_FIELD, SolrComponentModel.ISCOMPONENT_FIELD);
        solrQuery.setStart(filter.getOffset());
        solrQuery.setRows(filter.getMax());

        Field sortField = ReflectionUtil.getField(new SolrComponentModel(), filter.getSortField());
        if (sortField != null) {
            String sortFieldText = filter.getSortField();
            org.apache.solr.client.solrj.beans.Field fieldAnnotation = sortField
                    .getAnnotation(org.apache.solr.client.solrj.beans.Field.class);
            if (fieldAnnotation != null) {
                sortFieldText = fieldAnnotation.value();
            }
            SolrQuery.ORDER order = SolrQuery.ORDER.desc;
            if (OpenStorefrontConstant.SORT_ASCENDING.equalsIgnoreCase(filter.getSortOrder())) {
                order = SolrQuery.ORDER.asc;
            }
            solrQuery.addSort(sortFieldText, order);
        }

        solrQuery.setIncludeScore(true);

        QueryResponse response = SolrManager.getServer().query(solrQuery);
        SolrDocumentList results = response.getResults();
        DocumentObjectBinder binder = new DocumentObjectBinder();
        resultsList = binder.getBeans(SolrComponentModel.class, results);
    } catch (SolrServerException ex) {
        throw new OpenStorefrontRuntimeException("Search Failed",
                "Contact System Admin.  Seach server maybe Unavailable", ex);
    } catch (Exception ex) {
        log.log(Level.WARNING, "Solr query failed unexpectly; likely bad input.", ex);
    }

    //Pulling the full object on the return
    List<ComponentSearchView> views = new ArrayList<>();

    List<String> componentIds = new ArrayList<>();
    for (SolrComponentModel result : resultsList) {
        if (result.getIsComponent()) {
            componentIds.add(result.getId());
        }
    }

    //remove bad indexes, if any
    List<ComponentSearchView> componentSearchViews = getComponentService().getSearchComponentList(componentIds);
    Set<String> goodComponentIdSet = new HashSet<>();
    for (ComponentSearchView view : componentSearchViews) {
        goodComponentIdSet.add(view.getComponentId());
    }

    for (String componentId : componentIds) {
        if (goodComponentIdSet.contains(componentId) == false) {
            log.log(Level.FINE, MessageFormat.format("Removing bad index: {0}", componentId));
            deleteById(componentId);
        }
    }
    views.addAll(componentSearchViews);

    List<ComponentSearchView> articleViews = getAttributeService().getArticlesSearchView();
    Map<String, ComponentSearchView> allViews = new HashMap<>();
    for (ComponentSearchView componentSearchView : articleViews) {
        AttributeCodePk attributeCodePk = new AttributeCodePk();
        attributeCodePk.setAttributeType(componentSearchView.getArticleAttributeType());
        attributeCodePk.setAttributeCode(componentSearchView.getArticleAttributeCode());
        allViews.put(attributeCodePk.toKey(), componentSearchView);
    }
    for (SolrComponentModel result : resultsList) {

        if (result.getIsComponent() == false) {
            ComponentSearchView view = allViews.get(result.getId());
            if (view != null) {
                views.add(view);
            } else {
                log.log(Level.FINE, MessageFormat.format("Removing bad index: {0}", result.getId()));
                deleteById(result.getId());
            }
        }
    }

    //TODO: Get the score and sort by score
    return views;
}

From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java

License:Apache License

private JSONObject getPopularGenomes() {
    JSONObject jsonData = null;//from ww w  .  j a v a  2s  .c om
    JSONArray list = new JSONArray();

    DataApiHandler dataApi = new DataApiHandler();

    for (String genomeId : REFERENCE_GENOME_IDS) {

        Genome genome = dataApi.getGenome(genomeId);

        // construct genome
        JSONObject popGenome = new JSONObject();
        popGenome.put("link", URL_GENOMEOVERVIEW_TAB.replace("{cType}", "genome").replace("{cId}", genomeId));
        popGenome.put("popularName", genome.getGenomeName());
        popGenome.put("gb_link", URL_GENOMEBROWSER.replace("{cType}", "genome").replace("{cId}", genomeId));

        // meta data
        JSONObject meta = new JSONObject();
        meta.put("genome_status", genome.getGenomeStatus());
        meta.put("completion_date", genome.hasCompletionDate() ? genome.getCompletionDate() : "");
        meta.put("collection_date", genome.hasCollectionDate() ? genome.getCollectionDate() : "");
        meta.put("isolation_country", genome.hasIsolationCountry() ? genome.getIsolationCountry() : "");
        meta.put("host_name", genome.hasHostName() ? genome.getHostName() : "");
        meta.put("disease", genome.hasDisease() ? StringUtils.join(genome.getDisease(), ", ") : "");
        meta.put("chromosomes", genome.getChromosomes());
        meta.put("plasmids", genome.getPlasmids());
        meta.put("contigs", genome.getContigs());
        meta.put("genome_length", genome.getGenomeLength());

        popGenome.put("metadata", meta);

        JSONArray data = new JSONArray();

        // Features
        JSONObject ft = new JSONObject();
        ft.put("description", "Features");
        ft.put("link", URL_FEATURETABLE_TAB.replace("{cType}", "genome").replace("{cId}", genomeId)
                .replace("{featureType}", "").replace("{filterType}", ""));
        ft.put("picture", "/patric/images/icon-popular-feature.png");
        ft.put("data", genome.getPatricCds());
        data.add(ft);

        // Pathways
        JSONObject pw = new JSONObject();
        pw.put("description", "Pathways");
        pw.put("link",
                URL_PATHWAY_TAB.replace("{cType}", "genome").replace("{cId}", genomeId).replace("{pId}", ""));
        pw.put("picture", "/patric/images/icon-popular-pathway.png");

        int cntPathway = 0;
        try {
            SolrQuery query = new SolrQuery("genome_id:" + genomeId);
            // {stat:{field:{field:genome_id,facet:{pathway_count:"unique(pathway_id)"}}}}}
            query.setRows(0).setFacet(true).set("json.facet",
                    "{stat:{field:{field:genome_id,facet:{pathway_count:\"unique(pathway_id)\"}}}}}");

            LOGGER.trace("[{}] {}", SolrCore.PATHWAY.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.PATHWAY, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map facets = (Map) resp.get("facets");
            List<Map> buckets = (List) ((Map) facets.get("stat")).get("buckets");
            Map firstPathway = buckets.get(0);
            cntPathway = (Integer) firstPathway.get("pathway_count");
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }
        pw.put("data", cntPathway);
        data.add(pw);

        // Protein Family
        JSONObject pf = new JSONObject();
        pf.put("description", "Protein Families");
        pf.put("link", URL_PROTEINFAMILY_TAB.replace("{cType}", "genome").replace("{cId}", genomeId));
        pf.put("picture", "/patric/images/icon-popular-proteinfamily.png");

        // Experiment
        JSONObject tr = new JSONObject();
        tr.put("description", "Transcriptomic Experiments");
        tr.put("link", URL_TRANSCRIPTOMICS_TAB.replace("{cType}", "genome").replace("{cId}", genomeId)
                .replace("{kw}", ""));

        long numFound = 0;
        try {
            SolrQuery query = new SolrQuery("genome_ids:" + genomeId);
            query.setRows(0);

            LOGGER.trace("[{}] {}", SolrCore.TRANSCRIPTOMICS_EXPERIMENT.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.TRANSCRIPTOMICS_EXPERIMENT, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map respBody = (Map) resp.get("response");
            numFound = (Integer) respBody.get("numFound");
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }
        tr.put("picture", "/patric/images/icon-popular-experiment.png");
        tr.put("data", (int) numFound);

        data.add(tr);

        try {
            SolrQuery query = new SolrQuery(
                    "figfam_id:[* TO *] AND annotation:PATRIC AND genome_id:" + genomeId);
            query.setRows(0);

            LOGGER.trace("[{}] {}", SolrCore.FEATURE.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map respBody = (Map) resp.get("response");

            pf.put("data", respBody.get("numFound"));
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }
        data.add(pf);

        popGenome.put("popularData", data);

        list.add(popGenome);
    }
    if (list.size() > 0) {
        jsonData = new JSONObject();
        jsonData.put("popularList", list);
        jsonData.put("popularTitle", "Select Genomes");
    }
    return jsonData;
}

From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java

License:Apache License

private JSONObject getPopularGenomesForPathways() {

    JSONObject jsonData = null;/*from  w  ww .  j  a va  2  s.  c o m*/
    JSONArray list = new JSONArray();

    for (String genomeId : REFERENCE_GENOME_IDS) {
        Genome genome = dataApi.getGenome(genomeId);

        // construct genome
        JSONObject popGenome = new JSONObject();

        popGenome.put("popularName", genome.getGenomeName());
        popGenome.put("link",
                URL_PATHWAY_TAB.replace("{cType}", "genome").replace("{cId}", genomeId).replace("{pId}", ""));

        JSONArray data = new JSONArray();

        LinkedList<Map<String, String>> pathwayList = new LinkedList<>();

        try {
            //{stat:{field:{field:pathway_id,sort:{ec_count:desc},facet:{ec_count:"unique(ec_number)",gene_count:"unique(feature_id)",field:{field:pathway_name}}}}}
            SolrQuery query = new SolrQuery("genome_id:" + genomeId).addFilterQuery("annotation:PATRIC");
            query.setRows(0).setFacet(true).set("json.facet",
                    "{stat:{field:{field:pathway_id,sort:{ec_count:desc},facet:{ec_count:\"unique(ec_number)\",gene_count:\"unique(feature_id)\",field:{field:pathway_name}}}}}");

            LOGGER.debug("getPopularGenomesForPathways: [{}] {}", SolrCore.PATHWAY.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.PATHWAY, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map facets = (Map) resp.get("facets");
            List<Map> buckets = (List) ((Map) facets.get("stat")).get("buckets");

            for (Map bucket : buckets) {
                Map<String, String> pathway = new HashMap<>();
                pathway.put("id", bucket.get("val").toString());
                pathway.put("ec_count", bucket.get("ec_count").toString());
                pathway.put("gene_count", bucket.get("gene_count").toString());

                // getting name
                List<Map> subBuckets = (List) ((Map) bucket.get("field")).get("buckets");
                pathway.put("name", subBuckets.get(0).get("val").toString());

                pathwayList.add(pathway);
            }
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }

        for (Map<String, String> pathway : pathwayList) {
            JSONObject pw = new JSONObject();

            pw.put("name", pathway.get("name"));
            pw.put("name_link", URL_PATHWAY_TAB.replace("{cType}", "genome").replace("{cId}", genomeId)
                    .replace("{pId}", pathway.get("id")));
            // pw.put("class", item.get("pathway_class"));
            pw.put("gene_count", pathway.get("gene_count"));
            pw.put("gene_link",
                    URL_PATHWAY_GENE_TAB.replace("{cId}", genomeId).replace("{pId}", pathway.get("id")));
            pw.put("ec_count", pathway.get("ec_count"));
            pw.put("ec_link",
                    URL_PATHWAY_EC_TAB.replace("{cId}", genomeId).replace("{pId}", pathway.get("id")));

            data.add(pw);
        }
        popGenome.put("popularData", data);
        list.add(popGenome);
    }
    if (list.size() > 0) {
        jsonData = new JSONObject();
        jsonData.put("popularList", list);
        jsonData.put("popularTitle", "Select Genomes");
    }
    return jsonData;
}

From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java

License:Apache License

private JSONObject getPopularGenomesForTranscriptomics() {
    JSONObject jsonData = null;//from  w w  w.  ja  v  a2s .  com
    JSONArray list = new JSONArray();

    for (String genomeId : REFERENCE_GENOME_IDS_TRANSCRIPTOMICS) {

        // construct genome node
        JSONObject popGenome = new JSONObject();

        Genome genome = dataApi.getGenome(genomeId);

        popGenome.put("popularName", genome.getGenomeName());
        popGenome.put("link", URL_TRANSCRIPTOMICS_TAB.replace("{cType}", "genome").replace("{cId}", genomeId)
                .replace("{kw}", ""));

        // Retrieve eId associated a given genome
        List<String> eIds = new ArrayList<>();
        try {
            SolrQuery query = new SolrQuery("genome_ids:" + genomeId);
            query.setRows(1000).setFields("eid");

            LOGGER.trace("[{}] {}", SolrCore.TRANSCRIPTOMICS_EXPERIMENT.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.TRANSCRIPTOMICS_EXPERIMENT, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map respBody = (Map) resp.get("response");
            List<Map> sdl = (List) respBody.get("docs");

            for (Map doc : sdl) {
                eIds.add(doc.get("eid").toString());
            }
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }

        JSONObject gm = new JSONObject();
        JSONObject ec = new JSONObject();
        gm.put("title", "Gene Modifications");
        ec.put("title", "Experiment Conditions");
        JSONArray data = new JSONArray();
        try {
            Map response = dataApi.getFieldFacets(SolrCore.TRANSCRIPTOMICS_EXPERIMENT, "*:*",
                    "eid:(" + StringUtils.join(eIds, " OR ") + ")", "mutant,condition");
            Map facets = (Map) response.get("facets");

            Map mutantsFacet = (Map) facets.get("mutant");

            int i = 0;
            for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) mutantsFacet.entrySet()) {
                JSONObject mutant = new JSONObject();
                mutant.put("label", entry.getKey());
                mutant.put("value", entry.getValue());
                data.add(mutant);
                i++;
                if (i > 4) {
                    break;
                }
            }
            gm.put("data", data);

            // top 5 experiment conditoins
            data = new JSONArray();
            Map conditionsFacet = (Map) facets.get("condition");
            i = 0;
            for (Map.Entry<String, Integer> entry : (Iterable<Map.Entry>) conditionsFacet.entrySet()) {
                JSONObject condition = new JSONObject();
                condition.put("label", entry.getKey());
                condition.put("value", entry.getValue());
                data.add(condition);
                i++;
                if (i > 4) {
                    break;
                }
            }
            ec.put("data", data);
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }

        popGenome.put("GeneModifications", gm);
        popGenome.put("ExperimentConditions", ec);

        list.add(popGenome);
    }
    if (list.size() > 0) {
        jsonData = new JSONObject();
        jsonData.put("popularList", list);
        jsonData.put("popularTitle", "Select Genomes");
    }
    return jsonData;
}

From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java

License:Apache License

private JSONObject getPathwayECDist() {
    JSONObject jsonData;//w  w  w .  j a  va2 s . c  om
    JSONArray series = new JSONArray();

    for (Integer txId : GENUS_TAXON_IDS) {
        int total = 0;
        List<Integer> distribution = new LinkedList<>();

        // {stat:{field:{field:pathway_id,limit:-1,facet:{ec_count:"unique(ec_number)",genome_count:"unique(genome_id)",genome_ec_count:"unique(genome_ec)"}}}}
        try {
            SolrQuery query = new SolrQuery("annotation:PATRIC");
            query.addFilterQuery(SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id",
                    "genome_status:(Complete OR WGS) AND taxon_lineage_ids:" + txId));
            query.setRows(0).setFacet(true).set("json.facet",
                    "{stat:{field:{field:pathway_id,limit:-1,facet:{ec_count:\"unique(ec_number)\",genome_count:\"unique(genome_id)\",genome_ec_count:\"unique(genome_ec)\"}}}}");

            LOGGER.debug("getPathwayECDist: [{}] {}", SolrCore.PATHWAY.getSolrCoreName(), query);

            String apiResponse = dataApi.solrQuery(SolrCore.PATHWAY, query);

            Map resp = jsonReader.readValue(apiResponse);
            Map facets = (Map) resp.get("facets");
            List<Map> buckets = (List) ((Map) facets.get("stat")).get("buckets");

            int bin1 = 0, bin2 = 0, bin3 = 0, bin4 = 0, bin5 = 0;

            for (Map bucket : buckets) {

                double ec_count = ((Integer) bucket.get("ec_count")).doubleValue();
                double genome_count = ((Integer) bucket.get("genome_count")).doubleValue();
                double genome_ec_count = ((Integer) bucket.get("genome_ec_count")).doubleValue();

                long bin = Math.round(genome_ec_count / genome_count / ec_count * 100);

                //               LOGGER.trace("calculating conservation, ec:{}, genome:{}, genome_ec:{}, bin:{}", ec_count, genome_count, genome_ec_count, bin);
                if (bin < 20) {
                    bin5++;
                } else if (bin >= 20 && bin < 40) {
                    bin4++;
                } else if (bin >= 40 && bin < 60) {
                    bin3++;
                } else if (bin >= 60 && bin < 80) {
                    bin2++;
                } else if (bin >= 80) {
                    bin1++;
                }
                total++;
            }
            distribution.addAll(Arrays.asList(bin1, bin2, bin3, bin4, bin5));
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }

        Taxonomy taxonomy = dataApi.getTaxonomy(txId);

        JSONObject item = new JSONObject();
        item.put("pathogen", taxonomy.getTaxonName());
        item.put("total", total);
        item.put("dist", distribution);

        series.add(item);
    }

    jsonData = new JSONObject();
    jsonData.put("chart_title", "Pathway Conservation in Pathogenic Bacteria");
    jsonData.put("chart_desc",
            "The graph below shows conservation of metabolic pathways across percentage of total genomes in each pathogenic genus.");
    jsonData.put("data", series);

    return jsonData;
}

From source file:edu.vt.vbi.patric.cache.DataLandingGenerator.java

License:Apache License

private JSONArray getFIGFamConservationDistribution(int taxonId) {
    JSONArray dist = new JSONArray();

    try {//from   ww  w.j  a v a 2s  .  c o  m
        Map<Integer, List<String>> distMap = new LinkedHashMap<>();

        SolrQuery query = new SolrQuery("*:*");
        query.addFilterQuery("feature_type:CDS AND annotation:PATRIC");
        query.addFilterQuery(
                SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id", "taxon_lineage_ids:" + taxonId));
        query.setRows(0).setFacet(true).set("json.facet",
                "{stat:{field:{field:figfam_id,limit:-1,allBuckets:true,facet:{genome_count:\"unique(genome_id)\"}}}}");

        LOGGER.trace("getFIGFamConservationDistribution(), [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query);

        String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);

        Map resp = jsonReader.readValue(apiResponse);
        Map facets = (Map) resp.get("facets");

        Map allBuckets = (Map) ((Map) facets.get("stat")).get("allBuckets");
        double totalGenomeCount = ((Integer) allBuckets.get("genome_count")).doubleValue();

        List<Map> buckets = (List<Map>) ((Map) facets.get("stat")).get("buckets");

        for (Map bucket : buckets) {
            String figfamID = (String) bucket.get("val");
            double genomeCount = ((Integer) bucket.get("genome_count")).doubleValue();
            int groupHash = ((Double) Math.ceil(genomeCount / totalGenomeCount * 10.0d)).intValue();

            //            LOGGER.trace("group hashing.. {}:{}/{} -> {}", figfamID, genomeCount, totalGenomeCount, groupHash);
            if (distMap.get(groupHash) == null) {
                distMap.put(groupHash, new LinkedList<String>());
            }
            distMap.get(groupHash).add(figfamID);
        }

        for (int i = 1; i <= 10; i++) {
            JSONObject item = new JSONObject();
            if (distMap.get(i) != null && !distMap.get(i).isEmpty()) {
                item.put("x", (i) + "0%");
                item.put("y", distMap.get(i).size());
            } else {
                item.put("x", (i) + "0%");
                item.put("y", 0);
            }
            dist.add(item);
        }
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    return dist;
}