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

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

Introduction

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

Prototype

public SolrQuery(String q) 

Source Link

Document

Create a new SolrQuery

Usage

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

License:Apache License

private JSONObject getPathwayECDist() {
    JSONObject jsonData;/*w  ww . java  2 s  . c  o m*/
    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 Map<String, Integer> getFIGFamStat(int taxonId) {
    Map<String, Integer> stat = new HashMap<>();

    try {/*from   w  w  w .j a v a  2 s.c om*/
        final String filterCondition = SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id",
                "taxon_lineage_ids:" + taxonId);

        Map response = dataApi.getFieldFacets(SolrCore.FEATURE, "feature_type:CDS AND annotation:PATRIC",
                filterCondition, "figfam_id");
        Map figfamFacets = (Map) ((Map) response.get("facets")).get("figfam_id");
        int total = figfamFacets.size();

        response = dataApi.getFieldFacets(SolrCore.FEATURE, "product:(hypothetical AND protein)",
                filterCondition, "figfam_id");
        Map hypotheticalFacets = (Map) ((Map) response.get("facets")).get("figfam_id");
        int hypothetical = hypotheticalFacets.size();

        stat.put("total", total);
        stat.put("hypothetical", hypothetical);
        stat.put("functional", (total - hypothetical));

        // counting core vs accessary
        int countCore = 0;
        SolrQuery query = new SolrQuery("*:*").addFilterQuery(filterCondition).setRows(0).setFacet(true);
        query.set("json.facet",
                "{stat:{field:{field:figfam_id,limit:-1,allBuckets:true,facet:{genome_count:\"unique(genome_id)\"}}}}");

        LOGGER.debug("getFIGFamStat(): [{}] {}", 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 genomeCount = ((Integer) allBuckets.get("genome_count")).doubleValue();
        double cutoff = 0.95 * genomeCount;

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

        for (Map bucket : buckets) {
            if (((Integer) bucket.get("genome_count")).doubleValue() > cutoff) {
                countCore++;
            }
        }
        stat.put("core", countCore);
        stat.put("accessory", (total - countCore));
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    return stat;
}

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

License:Apache License

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

    try {/*  w  w w .  j  a  v a  2 s. 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;
}

From source file:edu.vt.vbi.patric.common.FASTAHelper.java

License:Apache License

public static String getFASTASequence(PortletRequest request, List<String> featureIds, String type)
        throws IOException {
    StringBuilder fasta = new StringBuilder();

    SolrQuery query = new SolrQuery("feature_id:(" + StringUtils.join(featureIds, " OR ") + ")");
    query.setFields(//from w  ww  .  j a  v a  2  s  .  com
            "feature_id,patric_id,alt_locus_tag,refseq_locus_tag,annotation,gi,product,genome_id,genome_name,na_sequence,aa_sequence");
    query.setRows(featureIds.size());

    DataApiHandler dataApi = new DataApiHandler(request);
    LOGGER.trace("getFASTASequence: [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query);
    String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);
    Map resp = jsonReader.readValue(apiResponse);
    Map respBody = (Map) resp.get("response");

    List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"), GenomeFeature.class);

    for (GenomeFeature feature : features) {

        if (type.equals("dna") || type.equals("both")) {
            fasta.append(">");
            if (feature.getAnnotation().equals("PATRIC")) {
                if (feature.hasPatricId()) {
                    fasta.append(feature.getPatricId()).append("|");
                }
            } else if (feature.getAnnotation().equals("RefSeq")) {
                if (feature.getGi() > 0) {
                    fasta.append("gi|").append(feature.getGi()).append("|");
                }
            }

            if (feature.hasRefseqLocusTag()) {
                fasta.append(feature.getRefseqLocusTag()).append("|");
            }
            if (feature.hasAltLocusTag()) {
                fasta.append(feature.getAltLocusTag()).append("|");
            }
            if (feature.hasProduct()) {
                fasta.append("   ").append(feature.getProduct());
            }
            fasta.append("   [").append(feature.getGenomeName()).append(" | ").append(feature.getGenomeId())
                    .append("]");

            fasta.append("\n");
            if (feature.hasNaSequence()) {
                fasta.append(StringHelper.chunk_split(feature.getNaSequence(), 60, "\n"));
            }
        }

        if (type.equals("protein") || type.equals("both")) {
            fasta.append(">");
            if (feature.getAnnotation().equals("PATRIC")) {
                if (feature.hasPatricId()) {
                    fasta.append(feature.getPatricId()).append("|");
                }
            } else if (feature.getAnnotation().equals("RefSeq")) {
                if (feature.getGi() > 0) {
                    fasta.append("gi|").append(feature.getGi()).append("|");
                }
            }

            if (feature.hasRefseqLocusTag()) {
                fasta.append(feature.getRefseqLocusTag()).append("|");
            }
            if (feature.hasAltLocusTag()) {
                fasta.append(feature.getAltLocusTag()).append("|");
            }
            if (feature.hasProduct()) {
                fasta.append("   ").append(feature.getProduct());
            }
            fasta.append("   [").append(feature.getGenomeName()).append(" | ").append(feature.getGenomeId())
                    .append("]");

            fasta.append("\n");
            if (feature.hasAaSequence()) {
                fasta.append(StringHelper.chunk_split(feature.getAaSequence(), 60, "\n"));
            }
        }
    }

    return fasta.toString();
}

From source file:edu.vt.vbi.patric.common.OrganismTreeBuilder.java

License:Apache License

/**
 * Builds an array of nodes for Genome List view
 * // w  w w .j av  a 2  s.  c o m
 * @param taxonId root taxon ID
 * @return json array of feed for Genome List
 */
public static JSONArray buildGenomeList(DataApiHandler dataApi, int taxonId) throws IOException {

    JSONArray treeJSON = new JSONArray();

    SolrQuery query = new SolrQuery("taxon_lineage_ids:" + taxonId);
    query.addField("taxon_id,genome_id,genome_name").setRows(1000000);
    query.addSort("genome_name", SolrQuery.ORDER.asc);
    LOGGER.trace("buildGenomeList:{}", query.toString());

    String apiResponse = dataApi.solrQuery(SolrCore.GENOME, query);
    Map resp = jsonReader.readValue(apiResponse);
    Map respBody = (Map) resp.get("response");

    List<Genome> genomeList = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class);
    Set<TaxonomyGenomeNode> children = new LinkedHashSet<>();

    for (Genome genome : genomeList) {
        TaxonomyGenomeNode node = new TaxonomyGenomeNode(genome);
        node.setParentId("0");

        children.add(node);
    }

    TaxonomyGenomeNode rootTaxonomyGenomeNode = new TaxonomyGenomeNode();
    Taxonomy rootTaxonomy = dataApi.getTaxonomy(taxonId);
    rootTaxonomyGenomeNode.setName(rootTaxonomy.getTaxonName() + " (" + rootTaxonomy.getGenomeCount() + ")");
    rootTaxonomyGenomeNode.setTaxonId(rootTaxonomy.getId());
    rootTaxonomyGenomeNode.setId("0");

    rootTaxonomyGenomeNode.setChildren(children);
    treeJSON.add(rootTaxonomyGenomeNode.getJSONObject());

    return treeJSON;
}

From source file:edu.vt.vbi.patric.common.OrganismTreeBuilder.java

License:Apache License

/**
 * Build an array of nodes for Taxonomy Tree view
 * /*from  www.  ja v  a 2  s . c  o  m*/
 * @param taxonId root taxon ID
 * @return json array of feed for Taxonomy Tree
 */
public static JSONArray buildGenomeTree(DataApiHandler dataApi, int taxonId) throws IOException {
    JSONArray treeJSON = new JSONArray();

    SolrQuery query = new SolrQuery("lineage_ids:" + taxonId + " AND genomes:[1 TO *]");
    query.addField("taxon_id,taxon_rank,taxon_name,genomes,lineage_ids").setRows(1000000);
    query.addSort("lineage", SolrQuery.ORDER.asc);
    LOGGER.trace("buildGenomeTree:{}", query.toString());

    String apiResponse = dataApi.solrQuery(SolrCore.TAXONOMY, query);
    Map resp = jsonReader.readValue(apiResponse);
    Map respBody = (Map) resp.get("response");

    List<Taxonomy> taxonomyList = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Taxonomy.class);

    Map<Integer, Taxonomy> taxonomyMap = new HashMap<>();

    // 1 populate map for detail info
    for (Taxonomy tx : taxonomyList) {
        taxonomyMap.put(tx.getId(), tx);
    }

    // 2 add to rawData array
    List<List<TaxonomyTreeNode>> rawData = new ArrayList<>();
    for (Taxonomy tx : taxonomyList) {
        List<Integer> lineage = tx.getLineageIds();
        List<Integer> descendantIds = lineage;
        if (lineage.indexOf(taxonId) > 0) {
            descendantIds = lineage.subList(lineage.indexOf(taxonId), lineage.size());
        }

        List<TaxonomyTreeNode> descendant = new LinkedList<>();
        for (Integer txId : descendantIds) {
            if (taxonomyMap.containsKey(txId)) {
                descendant.add(new TaxonomyTreeNode(taxonomyMap.get(txId)));
            }
        }
        rawData.add(descendant);
    }

    // 3 build a tree
    TaxonomyTreeNode wrapper = new TaxonomyTreeNode();
    TaxonomyTreeNode current = wrapper;
    for (List<TaxonomyTreeNode> tree : rawData) {
        TaxonomyTreeNode root = current;

        int parentId = taxonId;
        for (TaxonomyTreeNode node : tree) {
            node.setParentId(parentId);
            current = current.child(node);
            parentId = node.getTaxonId();
        }

        current = root;
    }

    TaxonomyTreeNode root = wrapper.getFirstChild();
    treeJSON.add(root.getJSONObject());

    return treeJSON;
}

From source file:edu.vt.vbi.patric.common.OrganismTreeBuilder.java

License:Apache License

/**
 * Build a taxonomy-genome map.//from   w  w w. j av  a  2 s  .c  om
 * @param taxonId root taxon ID
 * @return json array of mapping {ncbi_taxon_id,genome_info_id}
 */
public static JSONArray buildTaxonGenomeMapping(DataApiHandler dataApi, int taxonId) throws IOException {
    JSONArray mapJSON = new JSONArray();

    SolrQuery query = new SolrQuery("taxon_lineage_ids:" + taxonId);
    query.addField("genome_id,taxon_id").setRows(1000000);
    LOGGER.trace("buildTaxonGenomeMapping:{}", query.toString());

    String apiResponse = dataApi.solrQuery(SolrCore.GENOME, query);
    Map resp = jsonReader.readValue(apiResponse);
    Map respBody = (Map) resp.get("response");

    List<Genome> genomeList = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class);

    for (Genome genome : genomeList) {
        JSONObject map = new JSONObject();
        map.put("genome_id", genome.getId());
        map.put("taxon_id", genome.getTaxonId());

        mapJSON.add(map);
    }

    return mapJSON;
}

From source file:edu.vt.vbi.patric.portlets.CompareRegionViewer.java

License:Apache License

@SuppressWarnings("unchecked")
private void printTrackList(ResourceRequest request, ResourceResponse response) throws IOException {

    String contextType = request.getParameter("cType");
    String contextId = request.getParameter("cId");
    String pinFeatureSeedId = request.getParameter("feature"); // pin feature
    String windowSize = request.getParameter("window"); // window size

    int _numRegion = Integer.parseInt(request.getParameter("regions")); // number of genomes to compare
    int _numRegion_buffer = 10; // number of genomes to use as a buffer in case that PATRIC has no genome data,
    // which was retrieved from API
    String _key = "";

    DataApiHandler dataApi = new DataApiHandler(request);

    // if pin feature is not given, retrieve from the database based on na_feature_id
    if (pinFeatureSeedId == null
            && (contextType != null && contextType.equals("feature") && contextId != null)) {

        GenomeFeature feature = dataApi.getFeature(contextId);
        pinFeatureSeedId = feature.getPatricId();
    }// w ww . j a va2  s  .c om

    if (pinFeatureSeedId != null && !pinFeatureSeedId.equals("") && windowSize != null) {
        CRResultSet crRS = null;

        try {
            SAPserver sapling = new SAPserver("http://servers.nmpdr.org/pseed/sapling/server.cgi");
            crRS = new CRResultSet(pinFeatureSeedId, sapling.compared_regions(pinFeatureSeedId,
                    _numRegion + _numRegion_buffer, Integer.parseInt(windowSize) / 2));

            long pk = (new Random()).nextLong();
            _key = "" + pk;

            Gson gson = new Gson();
            SessionHandler.getInstance().set(SessionHandler.PREFIX + pk, gson.toJson(crRS, CRResultSet.class));
            SessionHandler.getInstance().set(SessionHandler.PREFIX + "_windowsize" + pk, windowSize);

        } catch (Exception ex) {
            LOGGER.error(ex.getMessage(), ex);
        }

        JSONObject trackList = new JSONObject();
        JSONArray tracks = new JSONArray();
        JSONObject trStyle = new JSONObject();
        trStyle.put("className", "feature5");
        trStyle.put("showLabels", false);
        trStyle.put("label", "function( feature ) { return feature.get('patric_id'); }");
        JSONObject trHooks = new JSONObject();
        trHooks.put("modify",
                "function(track, feature, div) { div.style.backgroundColor = ['red','#1F497D','#938953','#4F81BD','#9BBB59','#806482','#4BACC6','#F79646'][feature.get('phase')];}");

        // query genome metadata
        SolrQuery query = new SolrQuery("genome_id:(" + StringUtils.join(crRS.getGenomeIds(), " OR ") + ")");
        query.setFields(
                "genome_id,genome_name,isolation_country,host_name,disease,collection_date,completion_date");
        query.setRows(_numRegion + _numRegion_buffer);

        String apiResponse = dataApi.solrQuery(SolrCore.GENOME, query);
        Map resp = jsonReader.readValue(apiResponse);
        Map respBody = (Map) resp.get("response");

        List<Genome> patricGenomes = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class);

        int count_genomes = 1;
        if (crRS.getGenomeNames().size() > 0) {
            for (Integer idx : crRS.getTrackMap().keySet()) {
                if (count_genomes > _numRegion) {
                    break;
                }
                CRTrack crTrack = crRS.getTrackMap().get(idx);
                Genome currentGenome = null;
                for (Genome genome : patricGenomes) {
                    if (genome.getId().equals(crTrack.getGenomeID())) {
                        currentGenome = genome;
                    }
                }
                if (currentGenome != null) {
                    count_genomes++;
                    crRS.addToDefaultTracks(crTrack);
                    JSONObject tr = new JSONObject();
                    tr.put("style", trStyle);
                    tr.put("hooks", trHooks);
                    tr.put("type", "FeatureTrack");
                    tr.put("tooltip",
                            "<div style='line-height:1.7em'><b>{patric_id}</b> | {refseq_locus_tag} | {alt_locus_tag} | {gene}<br>{product}<br>{type}:{start}...{end} ({strand_str})<br> <i>Click for detail information</i></div>");
                    tr.put("urlTemplate",
                            "/portal/portal/patric/CompareRegionViewer/CRWindow?action=b&cacheability=PAGE&mode=getTrackInfo&key="
                                    + _key + "&rowId=" + crTrack.getRowID() + "&format=.json");
                    tr.put("key", crTrack.getGenomeName());
                    tr.put("label", "CR" + idx);
                    tr.put("dataKey", _key);
                    JSONObject metaData = new JSONObject();

                    if (currentGenome.getIsolationCountry() != null) {
                        metaData.put("Isolation Country", currentGenome.getIsolationCountry());
                    }
                    if (currentGenome.getHostName() != null) {
                        metaData.put("Host Name", currentGenome.getHostName());
                    }
                    if (currentGenome.getDisease() != null) {
                        metaData.put("Disease", currentGenome.getDisease());
                    }
                    if (currentGenome.getCollectionDate() != null) {
                        metaData.put("Collection Date", currentGenome.getCollectionDate());
                    }
                    if (currentGenome.getCompletionDate() != null) {
                        metaData.put("Completion Date", currentGenome.getCompletionDate());
                    }

                    tr.put("metadata", metaData);
                    tracks.add(tr);
                }
            }
        }
        trackList.put("tracks", tracks);

        JSONObject facetedTL = new JSONObject();
        JSONArray dpColumns = new JSONArray();
        dpColumns.addAll(Arrays.asList("key", "Isolation Country", "Host Name", "Disease", "Collection Date",
                "Completion Date"));
        facetedTL.put("displayColumns", dpColumns);
        facetedTL.put("type", "Faceted");
        facetedTL.put("escapeHTMLInData", false);
        trackList.put("trackSelector", facetedTL);
        trackList.put("defaultTracks", crRS.getDefaultTracks());

        response.setContentType("application/json");
        trackList.writeJSONString(response.getWriter());
        response.getWriter().close();
    } else {
        response.getWriter().write("{}");
    }
}

From source file:edu.vt.vbi.patric.portlets.CompareRegionViewer.java

License:Apache License

/**
 * Retrieves features that can be mapped by PSEED peg ID. This is used for CompareRegionViewer to map
 * features each other.//from  w w w  . j  ava 2s .c  om
 *
 * @param IDs IDs
 * @return list of features (na_feature_id, pseed_id, source_id, start, end, strand, na_length, aa_length, product, genome_name, accession)
 */
private Map<String, GenomeFeature> getPSeedMapping(ResourceRequest request, String IDs) throws IOException {

    Map<String, GenomeFeature> result = new HashMap<>();

    DataApiHandler dataApi = new DataApiHandler(request);

    SolrQuery query = new SolrQuery("patric_id:(" + IDs + ")");
    query.setFields(
            "feature_id,patric_id,alt_locus_tag,start,end,strand,feature_type,product,gene,refseq_locus_tag,genome_name,accession");
    query.setRows(1000);

    String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);
    Map resp = jsonReader.readValue(apiResponse);
    Map respBody = (Map) resp.get("response");

    List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"), GenomeFeature.class);

    for (GenomeFeature feature : features) {
        result.put(feature.getPatricId(), feature);
    }
    return result;
}

From source file:edu.vt.vbi.patric.portlets.CompPathwayMap.java

License:Apache License

@Override
protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    response.setContentType("text/html");

    SiteHelper.setHtmlMetaElements(request, response, "Comparative Pathway Map");

    DataApiHandler dataApi = new DataApiHandler(request);

    String pk = request.getParameter("param_key") != null ? request.getParameter("param_key") : "";
    String dm = request.getParameter("display_mode") != null ? request.getParameter("display_mode") : "";
    String cType = request.getParameter("context_type") != null ? request.getParameter("context_type") : "";
    String map = request.getParameter("map") != null ? request.getParameter("map") : "";
    String algorithm = request.getParameter("algorithm") != null ? request.getParameter("algorithm") : "";
    String cId = request.getParameter("context_id") != null ? request.getParameter("context_id") : "";
    String ec_number = request.getParameter("ec_number") != null ? request.getParameter("ec_number") : "";
    String feature_id = request.getParameter("feature_id") != null ? request.getParameter("feature_id") : "";
    String ec_names = "";
    int occurrences = 0;
    String genomeId = "";
    String taxonId = "";
    String pathway_name = "";
    String pathway_class = "";
    String definition = "";

    int patricGenomeCount = 0;
    int brc1GenomeCount = 0;
    int refseqGenomeCount = 0;

    // get attributes
    try {//from w ww  . jav  a  2 s  .co m
        SolrQuery query = new SolrQuery("pathway_id:" + map);
        query.setFields("pathway_name,pathway_class,ec_description");

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

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

        List<Map> sdl = (List<Map>) respBody.get("docs");

        if (!sdl.isEmpty()) {
            Map doc = sdl.get(0);

            definition = doc.get("ec_description").toString();
            pathway_name = doc.get("pathway_name").toString();
            pathway_class = doc.get("pathway_class").toString();
        }
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    try {
        if (cType != null && cType.equals("taxon")) {
            taxonId = cId;
        } else if (cType != null && cType.equals("genome")) {
            genomeId = cId;
        }

        if (pk != null && !pk.isEmpty()) {
            Map<String, String> key = jsonReader
                    .readValue(SessionHandler.getInstance().get(SessionHandler.PREFIX + pk));

            if (key != null && key.containsKey("genomeId") && !key.get("genomeId").equals("")) {
                genomeId = key.get("genomeId");
            } else if (key != null && key.containsKey("taxonId") && !key.get("taxonId").equals("")) {
                taxonId = key.get("taxonId");
            }
            if (key != null && key.containsKey("feature_id") && !key.get("feature_id").equals("")) {
                feature_id = key.get("feature_id");
            }
        }

        SolrQuery query = new SolrQuery("*:*");
        query.setRows(dataApi.MAX_ROWS);
        if (!genomeId.equals("")) {
            if (genomeId.contains(",")) {
                query.addFilterQuery("genome_id:(" + StringUtils.join(genomeId.split(","), " OR ") + ")");
                query.setRows(genomeId.split(",").length);
            } else {
                query.addFilterQuery("genome_id:" + genomeId);
            }
        }
        if (!taxonId.equals("")) {
            query.addFilterQuery("taxon_lineage_ids:" + taxonId);
        }

        LOGGER.debug("counting features: {}", query.toString());

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

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

        List<Genome> genomes = dataApi.bindDocuments((List<Map>) respBody.get("docs"), Genome.class);

        for (Genome genome : genomes) {
            if (genome.hasPatricCds()) {
                patricGenomeCount++;
            }
            //            if (doc.get("brc1_cds") != null && !doc.get("brc1_cds").toString().equals("0")) {
            //               brc1GenomeCount++;
            //            }
            if (genome.hasRefseqCds()) {
                refseqGenomeCount++;
            }
        }
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    // TODO: implement with solr
    if (dm != null && dm.equals("ec")) {

        SolrQuery query = new SolrQuery("ec_number:(" + ec_number + ") AND pathway_id:(" + map + ")");

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

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

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

        List<Map> sdl = (List<Map>) respBody.get("docs");
        for (Map doc : sdl) {
            ec_names = (String) doc.get("ec_description");
            occurrences = (Integer) doc.get("occurrence");
        }
    } else if (dm != null && dm.equals("feature")) {

        // q=pathway_id:00051&fq={!join%20from=ec_number%20to=ec_number%20fromIndex=pathway}feature_id:PATRIC.235.14.JMSA01000002.CDS.537.665.fwd+AND+pathway_id:00051
        SolrQuery query = new SolrQuery("pathway_id:" + map);
        query.addFilterQuery(SolrCore.PATHWAY.getSolrCoreJoin("ec_number", "ec_number",
                "feature_id:(" + feature_id + ") AND pathway_id:(" + map + ")"));

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

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

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

        List<Map> sdl = (List<Map>) respBody.get("docs");
        for (Map doc : sdl) {
            ec_number = (String) doc.get("ec_number");
            ec_names = (String) doc.get("ec_description");
            occurrences = (Integer) doc.get("occurrence");
        }
    }

    /////
    request.setAttribute("cType", cType);
    request.setAttribute("cId", cId);
    request.setAttribute("taxonId", taxonId);
    request.setAttribute("genomeId", genomeId);
    request.setAttribute("algorithm", algorithm);
    request.setAttribute("map", map);
    request.setAttribute("dm", dm);
    request.setAttribute("pk", pk);
    request.setAttribute("feature_id", feature_id);

    request.setAttribute("ec_number", ec_number);
    request.setAttribute("ec_names", ec_names);
    request.setAttribute("occurrences", occurrences);

    request.setAttribute("taxongenomecount_patric", patricGenomeCount);
    request.setAttribute("taxongenomecount_brc1", brc1GenomeCount);
    request.setAttribute("taxongenomecount_refseq", refseqGenomeCount);

    request.setAttribute("definition", definition);
    request.setAttribute("pathway_name", pathway_name);
    request.setAttribute("pathway_class", pathway_class);

    PortletRequestDispatcher prd = getPortletContext()
            .getRequestDispatcher("/WEB-INF/jsp/comp_pathway_map.jsp");
    prd.include(request, response);
}