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

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

Introduction

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

Prototype

public SolrQuery addSort(String field, ORDER order) 

Source Link

Document

Adds a single sort clause to the end of the current sort information.

Usage

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 a  v  a2s  .co 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   w  ww.  j  a v a2 s.  co 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.portlets.CompPathwayMap.java

License:Apache License

private void processEcTable(ResourceRequest request, ResourceResponse response) throws IOException {
    String genomeId = request.getParameter("genomeId");
    String taxonId = request.getParameter("taxonId");
    String cType = request.getParameter("cType");
    String map = request.getParameter("map");
    String algorithm = request.getParameter("algorithm");
    String pk = request.getParameter("pk");

    Map<String, String> key = null;
    if (pk != null && !pk.isEmpty()) {
        key = jsonReader.readValue(SessionHandler.getInstance().get(SessionHandler.PREFIX + pk));
    }/*from   ww  w.  j  a  v a  2s .c  o  m*/

    int count_total = 0;
    JSONArray results = new JSONArray();
    try {
        Set<String> ecNumbers = new HashSet<>();

        DataApiHandler dataApi = new DataApiHandler(request);

        SolrQuery query = new SolrQuery("pathway_id:" + map + " AND annotation:" + algorithm);
        if (taxonId != null && !taxonId.equals("")) {
            query.addFilterQuery(
                    SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id", "taxon_lineage_ids:" + taxonId));
        }
        if (genomeId != null && !genomeId.equals("")) {
            query.addFilterQuery(SolrCore.GENOME.getSolrCoreJoin("genome_id", "genome_id",
                    "genome_id:(" + genomeId.replaceAll(",", " OR ") + ")"));
        }
        if (key != null && key.containsKey("genomeId") && !key.get("genomeId").equals("")) {
            query.addFilterQuery("genome_id:(" + key.get("genomeId").replaceAll(",", " OR ") + ")");
        }

        query.setRows(0).setFacet(true);
        query.add("json.facet",
                "{stat:{field:{field:ec_number,limit:-1,facet:{genome_count:\"unique(genome_id)\",gene_count:\"unique(feature_id)\"}}}}");

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

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

        if (numFound > 0) {
            List<Map> buckets = (List<Map>) ((Map) ((Map) resp.get("facets")).get("stat")).get("buckets");

            Map<String, Map> mapStat = new HashMap<>();
            for (Map value : buckets) {
                if (Integer.parseInt(value.get("gene_count").toString()) > 0) {
                    mapStat.put(value.get("val").toString(), value);
                    ecNumbers.add(value.get("val").toString());
                }
            }

            if (!ecNumbers.isEmpty()) {
                query = new SolrQuery(
                        "pathway_id:" + map + " AND ec_number:(" + StringUtils.join(ecNumbers, " OR ") + ")");
                query.setRows(ecNumbers.size()).setFields("ec_number,ec_description,occurrence");
                query.addSort("ec_number", SolrQuery.ORDER.asc);

                apiResponse = dataApi.solrQuery(SolrCore.PATHWAY_REF, query);
                resp = jsonReader.readValue(apiResponse);
                Map respBdoby = (Map) resp.get("response");

                count_total = (Integer) respBdoby.get("numFound");
                List<Map> sdl = (List<Map>) respBdoby.get("docs");

                for (Map doc : sdl) {
                    String ecNumber = doc.get("ec_number").toString();
                    Map stat = mapStat.get(ecNumber);

                    JSONObject item = new JSONObject();
                    item.put("algorithm", algorithm);
                    item.put("ec_name", doc.get("ec_description"));
                    item.put("ec_number", ecNumber);
                    item.put("occurrence", doc.get("occurrence"));
                    item.put("gene_count", stat.get("gene_count"));
                    item.put("genome_count", stat.get("genome_count"));

                    results.add(item);
                }
            }
        }
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    JSONObject jsonResult = new JSONObject();
    try {
        jsonResult.put("total", count_total);
        jsonResult.put("results", results);
    } catch (Exception ex) {
        LOGGER.error(ex.getMessage(), ex);
    }

    PrintWriter writer = response.getWriter();
    jsonResult.writeJSONString(writer);
    writer.close();
}

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

License:Apache License

protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {

    response.setContentType("text/html");
    String cType = request.getParameter("context_type");
    String cId = request.getParameter("context_id");

    if (cType != null && cId != null && cType.equals("feature")) {

        List<Map> listAnnotation = new LinkedList<>();
        DataApiHandler dataApi = new DataApiHandler(request);

        GenomeFeature feature = dataApi.getPATRICFeature(cId);

        if (feature != null) {

            if (feature.hasRefseqLocusTag()) {
                SolrQuery query = new SolrQuery("refseq_locus_tag:" + feature.getRefseqLocusTag());
                query.addFilterQuery("!property:Interaction");
                query.addSort("property", SolrQuery.ORDER.asc).addSort("evidence_code", SolrQuery.ORDER.asc);
                query.setRows(dataApi.MAX_ROWS);

                LOGGER.debug("[{}]: {}", SolrCore.STRUCTURED_ASSERTION.getSolrCoreName(), query);
                String apiResponse = dataApi.solrQuery(SolrCore.STRUCTURED_ASSERTION, query);

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

                listAnnotation.addAll((List<Map>) respBody.get("docs"));

                query.setFilterQueries("property:Interaction");
                query.setSort("value", SolrQuery.ORDER.asc).addSort("evidence_code", SolrQuery.ORDER.asc);

                LOGGER.debug("[{}]: {}", SolrCore.STRUCTURED_ASSERTION.getSolrCoreName(), query);
                apiResponse = dataApi.solrQuery(SolrCore.STRUCTURED_ASSERTION, query);

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

                listAnnotation.addAll((List<Map>) respBody.get("docs"));
            }/*  w  w w . j a v  a  2s .  c  om*/

            if (!listAnnotation.isEmpty()) {

                request.setAttribute("listAnnotation", listAnnotation);

                PortletRequestDispatcher prd = getPortletContext()
                        .getRequestDispatcher("/WEB-INF/jsp/overview/feature_comments.jsp");
                prd.include(request, response);
            } else {
                PrintWriter writer = response.getWriter();
                writer.write("<!-- no feature comment found -->");
                writer.close();
            }
        }
    } else {
        PrintWriter writer = response.getWriter();
        writer.write("<p>Invalid Parameter - missing context information</p>");
        writer.close();
    }
}

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

License:Apache License

private void printTrackInfo(ResourceRequest request, ResourceResponse response) throws IOException {

    String accession = request.getParameter("accession");
    String annotation = request.getParameter("annotation");
    String genomeId = request.getParameter("genomeId");
    //      LOGGER.debug("printTrackInfo: {}", request.getParameterMap().toString());

    if (accession != null && annotation != null) {
        DataApiHandler dataApi = new DataApiHandler(request);

        JSONArray ncList = new JSONArray();
        List<Integer> histogram = this.getFeatureCountHistogram(request);
        Integer sum = 0;//w w  w  .j  a va2  s.  c  o  m
        for (Integer hist : histogram) {
            sum += hist;
        }
        double avgCount = sum.doubleValue() / histogram.size();

        SolrQuery query = new SolrQuery("genome_id:" + genomeId + " AND accession:" + accession
                + " AND annotation:" + annotation + " AND !(feature_type:source)");
        query.setRows(dataApi.MAX_ROWS);
        query.addSort("start", SolrQuery.ORDER.asc);

        LOGGER.trace("[{}] {}", SolrCore.FEATURE.getSolrCoreName(), query.toString());
        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 f : features) {

            JSONArray alist = new JSONArray();

            alist.addAll(Arrays.asList(0, (f.getStart() - 1), f.getStart(), f.getEnd(),
                    (f.getStrand().equals("+") ? 1 : -1), f.getStrand(),

                    f.getId(), f.hasPatricId() ? f.getPatricId() : "",
                    f.hasRefseqLocusTag() ? f.getRefseqLocusTag() : "",
                    f.hasAltLocusTag() ? f.getAltLocusTag() : "", annotation, f.getFeatureType(),
                    f.hasProduct() ? f.getProduct() : "",

                    f.hasGene() ? f.getGene() : "",
                    (f.getFeatureType().equals("CDS") ? 0 : (f.getFeatureType().contains("RNA") ? 1 : 2))));

            ncList.add(alist);
        }

        //         {
        //            "featureCount": <%=features_count %>,
        //            "formatVersion": 1,
        //            "histograms": {
        //               "meta": [{
        //                  "arrayParams": {
        //                     "chunkSize": 10000,
        //                     "length": <%=hist.size()%>,
        //                     "urlTemplate": "Hist.json.jsp?accession=<%=_accession%>&algorithm=<%=_algorithm%>&chunk={Chunk}&format=.json"
        //                  },
        //                  "basesPerBin": "10000"
        //               }],
        //               "stats": [{
        //                  "basesPerBin": "10000",
        //                  "max": <%=(hist.isEmpty())?"0":Collections.max(hist)%>,
        //                  "mean": <%=hist_avg%>
        //               }]
        //            },
        //            "intervals": {
        //               "classes": [{
        //                  "attributes": [
        //                     "Start", "Start_str", "End", "Strand", "strand_str",
        //                     "id", "locus_tag", "source", "type", "product",
        //                     "gene", "refseq", "phase"],
        //                  "isArrayAttr": {}
        //               }],
        //               "count": <%=features_count %>,
        //               "lazyClass": 5,
        //               "maxEnd": 20000,
        //               "minStart": 1,
        //               "nclist": [<%=nclist.toString() %>],
        //               "urlTemplate": "lf-{Chunk}.json"
        //            }
        //         }
        JSONObject track = new JSONObject();
        track.put("featureCount", features.size());
        track.put("formatVersion", 1);
        // histogram
        JSONObject histograms = new JSONObject();
        // meta
        JSONArray meta = new JSONArray();
        JSONObject aMeta = new JSONObject();
        // arrayParams
        JSONObject arrayParams = new JSONObject();
        arrayParams.put("chunkSize", 10000);
        arrayParams.put("length", histogram.size());
        arrayParams.put("urlTemplate",
                "/portal/portal/patric/GenomeBrowser/GBWindow?action=b&cacheability=PAGE&mode=getHistogram&accession="
                        + accession + "&annotation=" + annotation + "&chunk={Chunk}");
        aMeta.put("arrayParams", arrayParams);
        aMeta.put("basesPerBin", 10000);
        meta.add(aMeta);
        // stats
        JSONArray stats = new JSONArray();
        JSONObject aStat = new JSONObject();
        aStat.put("basesPerBin", 10000);
        aStat.put("max", (histogram.isEmpty() ? 0 : Collections.max(histogram)));
        aStat.put("mean", avgCount);
        stats.add(aStat);

        histograms.put("meta", meta);
        histograms.put("stats", stats);

        // intervals
        JSONObject intervals = new JSONObject();
        // classes
        JSONArray classes = new JSONArray();
        JSONObject aClass = new JSONObject();
        JSONArray attributes = new JSONArray();
        attributes.addAll(Arrays.asList("Start", "Start_str", "End", "Strand", "strand_str", "id", "patric_id",
                "refseq_locus_tag", "alt_locus_tag", "source", "type", "product", "gene", "phase"));

        aClass.put("attributes", attributes);
        aClass.put("isArrayAttr", new JSONObject());
        classes.add(aClass);
        intervals.put("classes", classes);
        intervals.put("count", features.size());
        intervals.put("lazyClass", 5);
        intervals.put("maxEnd", 20000);
        intervals.put("minStart", 1);
        intervals.put("nclist", ncList);
        intervals.put("urlTemplate", "lf-{Chunk}.json");

        track.put("histograms", histograms);
        track.put("intervals", intervals);

        // print track info
        response.setContentType("application/json");
        track.writeJSONString(response.getWriter());
    }
}

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

License:Apache License

public void serveResource(ResourceRequest request, ResourceResponse response)
        throws PortletException, IOException {

    String contextType = request.getParameter("context_type");
    String contextId = request.getParameter("context_id");
    String genomeFilter = request.getParameter("genome_filter");

    DataApiHandler dataApi = new DataApiHandler(request);

    if (contextType != null && contextId != null) {

        if (contextType.equals("genome")) {

            Genome genome = dataApi.getGenome(contextId);

            if (genome != null) {

                // check genome_amr data is available.
                SolrQuery query = new SolrQuery("genome_id:" + genome.getId());
                query.addSort("antibiotic", SolrQuery.ORDER.asc).addSort("resistant_phenotype",
                        SolrQuery.ORDER.asc);
                query.setRows(dataApi.MAX_ROWS);
                dataApi = new DataApiHandler(request);
                String apiResponse = dataApi.solrQuery(SolrCore.GENOME_AMR, query);

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

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

                request.setAttribute("genome", genome);
                request.setAttribute("amr", amr);

                response.setContentType("text/html");
                PortletRequestDispatcher prd = getPortletContext()
                        .getRequestDispatcher("/WEB-INF/jsp/overview/sequence_summary.jsp");
                prd.include(request, response);
            }//from  ww w.  j  a va  2 s . c  om
        } else {
            // taxon level

            List<String> annotations = Arrays.asList("PATRIC", "RefSeq");

            for (String annotation : annotations) {

                String queryParam;

                switch (annotation) {
                case "PATRIC":
                    queryParam = "patric_cds:[1 TO *]";
                    break;
                case "RefSeq":
                    queryParam = "refseq_cds:[1 TO *]";
                    break;
                default:
                    queryParam = "*:*";
                    break;
                }

                if (genomeFilter != null && !genomeFilter.equals("")) {
                    queryParam += " AND (" + genomeFilter + ")";
                }

                Map counts = dataApi.getFieldFacets(SolrCore.GENOME, queryParam,
                        "taxon_lineage_ids:" + contextId, "genome_status");

                request.setAttribute(annotation, counts);
            }

            response.setContentType("text/html");
            PortletRequestDispatcher prd = getPortletContext()
                    .getRequestDispatcher("/WEB-INF/jsp/overview/sequence_summary.jsp");
            prd.include(request, response);
        }
    }
}

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

License:Apache License

@Override
protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {

    response.setContentType("text/html");

    SiteHelper.setHtmlMetaElements(request, response, "Specialty Gene Evidence");
    response.setTitle("Specialty Gene Evidence");

    String source = request.getParameter("sp_source");
    String sourceId = request.getParameter("sp_source_id"); //lmo0433, Rv3875

    if (source != null && !source.equals("") && sourceId != null && !sourceId.equals("")) {

        List<String> properties = Arrays.asList("property", "source", "source_id", "gene_name", "organism",
                "product", "gi", "gene_id");
        List<String> headers = Arrays.asList("Property", "Source", "Source ID", "Gene", "Organism", "Product",
                "GI Number", "Gene ID");

        // get properties of gene
        Map<String, Object> gene = null;
        SolrQuery query = new SolrQuery("source:" + source + " AND source_id:" + sourceId);

        DataApiHandler dataApi = new DataApiHandler(request);
        String apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE, query);

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

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

        if (!sdl.isEmpty()) {
            gene = sdl.get(0);/*from w  ww .  j av  a 2s . com*/
        }

        // get PATRIC feature
        GenomeFeature feature = null;
        query = new SolrQuery("source:" + source + " AND source_id:" + sourceId + " AND evidence:Literature");
        query.setFields("feature_id");

        apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_MAPPING, query);

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

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

        if (!sdl.isEmpty()) {
            Map doc = sdl.get(0);
            feature = dataApi.getFeature(doc.get("feature_id").toString());
        } else {
            query = new SolrQuery("alt_locus_tag:" + sourceId);

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

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

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

            if (!features.isEmpty()) {
                feature = features.get(0);
            }
        }

        // get Homolog count
        int cntHomolog = 0;
        query = new SolrQuery("source:" + source + " AND source_id:" + sourceId);

        apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_MAPPING, query);

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

        cntHomolog = (Integer) respBody.get("numFound");

        // get list of evidence
        List<Map<String, Object>> specialtyGeneEvidence = new ArrayList<>();
        query = new SolrQuery("source:" + source + " AND source_id:" + sourceId);
        query.addSort("specific_organism", SolrQuery.ORDER.asc);
        query.addSort("specific_host", SolrQuery.ORDER.asc);
        query.addSort("classification", SolrQuery.ORDER.asc);

        apiResponse = dataApi.solrQuery(SolrCore.SPECIALTY_GENE_EVIDENCE, query);

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

        List<Map> evidence = (List<Map>) respBody.get("docs");
        for (Map doc : evidence) {
            specialtyGeneEvidence.add(doc);
        }

        request.setAttribute("source", source);
        request.setAttribute("sourceId", sourceId);
        request.setAttribute("gene", gene);
        request.setAttribute("properties", properties);
        request.setAttribute("headers", headers);
        request.setAttribute("feature", feature);
        request.setAttribute("cntHomolog", cntHomolog);
        request.setAttribute("specialtyGeneEvidence", specialtyGeneEvidence);

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

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

License:Apache License

protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {

    response.setContentType("text/html");
    String cType = request.getParameter("context_type");
    String cId = request.getParameter("context_id");

    if (cType != null && cId != null && cType.equals("feature")) {

        DataApiHandler dataApi = new DataApiHandler(request);

        SolrQuery query = new SolrQuery("feature_id:" + cId);
        query.setFields(//  w w  w  . ja va 2  s  . c om
                "evidence,property,source,source_id,organism,pmid,subject_coverage,query_coverage,identity,e_value");
        query.addSort("evidence", SolrQuery.ORDER.desc);
        query.addSort("property", SolrQuery.ORDER.asc);
        query.addSort("source", SolrQuery.ORDER.asc);

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

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

        if (!listSpecialtyGenes.isEmpty()) {
            request.setAttribute("listSpecialtyGenes", listSpecialtyGenes);

            PortletRequestDispatcher prd = getPortletContext()
                    .getRequestDispatcher("/WEB-INF/jsp/overview/specialty_gene_properties.jsp");
            prd.include(request, response);
        } else {
            PrintWriter writer = response.getWriter();
            writer.write("<!-- no specialty gene property found -->");
            writer.close();
        }
    } else {
        PrintWriter writer = response.getWriter();
        writer.write("<p>Invalid Parameter - missing context information</p>");
        writer.close();
    }
}

From source file:edu.vt.vbi.patric.proteinfamily.FIGfamData.java

License:Apache License

public JSONArray getSyntonyOrder(ResourceRequest request) {
    String genomeId = request.getParameter("syntonyId");
    final String familyType = request.getParameter("familyType");
    final String familyId = familyType + "_id";
    JSONArray json_arr = null;/*w w w .j  a va  2  s .  c o  m*/

    if (genomeId != null) {

        DataApiHandler dataApi = new DataApiHandler(request);
        long end_ms, start_ms = System.currentTimeMillis();

        SolrQuery solr_query = new SolrQuery("genome_id:" + genomeId);
        //         solr_query.addFilterQuery("end:[3200 TO 4300] OR end:[4400 TO 4490] OR end:[4990 TO 4999]");
        solr_query.addFilterQuery("annotation:PATRIC AND feature_type:CDS AND " + familyId + ":[* TO *]");
        solr_query.addField(familyId);

        solr_query.setRows(DataApiHandler.MAX_ROWS);
        solr_query.addSort("accession", SolrQuery.ORDER.asc);
        solr_query.addSort("start", SolrQuery.ORDER.asc);

        LOGGER.debug("getSyntonyOrder() [{}] {}", SolrCore.FEATURE.getSolrCoreName(), solr_query);

        int orderSet = 0;
        List<SyntonyOrder> collect = new ArrayList<>();
        try {
            String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, solr_query);

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

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

            end_ms = System.currentTimeMillis();

            LOGGER.debug("Genome anchoring query time - {}", (end_ms - start_ms));

            start_ms = System.currentTimeMillis();
            for (GenomeFeature feature : features) {
                if (familyType.equals("figfam") && feature.hasFigfamId()) {
                    collect.add(new SyntonyOrder(feature.getFigfamId(), orderSet));
                    ++orderSet;
                } else if (familyType.equals("plfam") && feature.hasPlfamId()) {
                    collect.add(new SyntonyOrder(feature.getPlfamId(), orderSet));
                    ++orderSet;
                } else if (familyType.equals("pgfam") && feature.hasPgfamId()) {
                    collect.add(new SyntonyOrder(feature.getPgfamId(), orderSet));
                    ++orderSet;
                }
            }

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

        if (0 < collect.size()) {
            json_arr = new JSONArray();
            SyntonyOrder[] orderSave = new SyntonyOrder[collect.size()];
            collect.toArray(orderSave);// orderSave is array in order of Figfam ID
            SyntonyOrder[] toSort = new SyntonyOrder[collect.size()];
            System.arraycopy(orderSave, 0, toSort, 0, toSort.length);// copy the array so it can be sorted based on position in the genome
            Arrays.sort(toSort); // sort based on figfamIDs
            SyntonyOrder start = toSort[0];
            for (int i = 1; i < toSort.length; i++) {
                start = start.mergeSameId(toSort[i]);// set syntonyAt -1 to those objects which occur multiple times
            }
            orderSet = 0;
            for (SyntonyOrder anOrderSave : orderSave) {
                orderSet = (anOrderSave).compressAt(orderSet); // adjusts the syntonyAt number to get the correct
                // column based on replicon with -1's removed
            }
            for (SyntonyOrder aToSort : toSort) {// writes all those that don't have -1's
                (aToSort).write(json_arr);
            }
        }

        end_ms = System.currentTimeMillis();

        LOGGER.debug("Genome anchoring post processing time - {} ms", (end_ms - start_ms));
    }

    return json_arr;
}

From source file:edu.vt.vbi.patric.proteinfamily.FIGfamData.java

License:Apache License

@SuppressWarnings("unchecked")
public void getGroupStats(ResourceRequest request, PrintWriter writer) throws IOException {

    DataApiHandler dataApi = new DataApiHandler(request);

    JSONObject figfams = new JSONObject();
    Set<String> figfamIdList = new HashSet<>();
    List<String> genomeIdList = new LinkedList<>();
    // get family Type
    final String familyType = request.getParameter("familyType");
    final String familyId = familyType + "_id";

    // get genome list in order
    String genomeIds = request.getParameter("genomeIds");
    try {/*from www .  j  av a  2s . co  m*/
        SolrQuery query = new SolrQuery("genome_id:(" + genomeIds.replaceAll(",", " OR ") + ")");
        query.addSort("genome_name", SolrQuery.ORDER.asc).addField("genome_id")
                .setRows(DataApiHandler.MAX_ROWS);

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

        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 (final Genome genome : genomes) {
            genomeIdList.add(genome.getId());
        }

        if (genomeIdList.size() == 25000) {
            query.setStart(25000);

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

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

            for (final Genome genome : genomes) {
                genomeIdList.add(genome.getId());
            }
        }
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    //      LOGGER.debug("genomeIdList: {}", genomeIdList);

    // getting genome counts per figfamID (figfam)
    // {stat:{field:{field:figfam_id,limit:-1,facet:{min:"min(aa_length)",max:"max(aa_length)",mean:"avg(aa_length)",ss:"sumsq(aa_length)",sum:"sum(aa_length)",dist:"percentile(aa_length,50,75,99,99.9)",field:{field:genome_id}}}}}

    try {
        long start = System.currentTimeMillis();
        SolrQuery query = new SolrQuery("annotation:PATRIC AND feature_type:CDS");
        //         query.addFilterQuery("end:[3200 TO 4300] OR end:[4400 TO 4490] OR end:[4990 TO 4999]");
        query.addFilterQuery(getSolrQuery(request));
        query.addFilterQuery("!" + familyId + ":\"\"");
        query.setRows(0).setFacet(true).set("facet.threads", 15);
        query.add("json.facet", "{stat:{type:field,field:genome_id,limit:-1,facet:{figfams:{type:field,field:"
                + familyId + ",limit:-1,sort:{index:asc}}}}}");

        LOGGER.trace("getGroupStats() 1/3: [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query);
        String apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);

        long point = System.currentTimeMillis();
        LOGGER.debug("1st query: {} ms", (point - start));
        start = point;

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

        final Map<String, String> figfamGenomeIdStr = new LinkedHashMap<>();
        final Map<String, Integer> figfamGenomeCount = new LinkedHashMap<>();

        final int genomeTotal = genomeIdList.size();
        final Map<String, Integer> genomePosMap = new LinkedHashMap<>();
        for (String genomeId : genomeIdList) {
            genomePosMap.put(genomeId, genomeIdList.indexOf(genomeId));
        }

        final Map<String, List> figfamGenomeIdCountMap = new ConcurrentHashMap<>();
        final Map<String, Set> figfamGenomeIdSet = new ConcurrentHashMap<>();

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

        for (final Map bucket : genomeBuckets) {

            final String genomeId = (String) bucket.get("val");
            final List<Map> figfamBucket = (List<Map>) ((Map) bucket.get("figfams")).get("buckets");

            for (final Map figfam : figfamBucket) {
                final String figfamId = (String) figfam.get("val");
                final String genomeCount = String.format("%02x", (Integer) figfam.get("count"));

                if (figfamGenomeIdCountMap.containsKey(figfamId)) {
                    figfamGenomeIdCountMap.get(figfamId).set(genomePosMap.get(genomeId), genomeCount);
                } else {
                    final List<String> genomeIdCount = new LinkedList<>(Collections.nCopies(genomeTotal, "00"));
                    genomeIdCount.set(genomePosMap.get(genomeId), genomeCount);
                    figfamGenomeIdCountMap.put(figfamId, genomeIdCount);
                }

                if (figfamGenomeIdSet.containsKey(figfamId)) {
                    figfamGenomeIdSet.get(figfamId).add(genomeId);
                } else {
                    final Set<String> genomeIdSet = new HashSet<>();
                    genomeIdSet.add(genomeId);
                    figfamGenomeIdSet.put(figfamId, genomeIdSet);
                }
            }
        }

        for (String figfamId : figfamGenomeIdCountMap.keySet()) {
            final List genomeIdStr = figfamGenomeIdCountMap.get(figfamId);
            figfamGenomeIdStr.put(figfamId, StringUtils.join(genomeIdStr, ""));
            figfamGenomeCount.put(figfamId, figfamGenomeIdSet.get(figfamId).size());
        }

        point = System.currentTimeMillis();
        LOGGER.debug("1st query process : {} ms, figfamGenomeIdStr:{}, figfamGenomeCount:{}", (point - start),
                figfamGenomeIdStr.size(), figfamGenomeCount.size());

        long start2nd = System.currentTimeMillis();
        // 2nd query

        query.set("json.facet", "{stat:{type:field,field:" + familyId
                + ",limit:-1,facet:{min:\"min(aa_length)\",max:\"max(aa_length)\",mean:\"avg(aa_length)\",ss:\"sumsq(aa_length)\",sum:\"sum(aa_length)\"}}}");

        LOGGER.trace("getGroupStats() 2/3: [{}] {}", SolrCore.FEATURE.getSolrCoreName(), query);
        apiResponse = dataApi.solrQuery(SolrCore.FEATURE, query);

        point = System.currentTimeMillis();
        LOGGER.debug("2st query: {} ms", (point - start2nd));
        start2nd = point;

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

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

        for (Map bucket : buckets) {
            final String figfamId = (String) bucket.get("val");
            final int count = (Integer) bucket.get("count");

            double min, max, mean, sumsq, sum;
            if (bucket.get("min") instanceof Double) {
                min = (Double) bucket.get("min");
            } else if (bucket.get("min") instanceof Integer) {
                min = ((Integer) bucket.get("min")).doubleValue();
            } else {
                min = 0;
            }
            if (bucket.get("max") instanceof Double) {
                max = (Double) bucket.get("max");
            } else if (bucket.get("max") instanceof Integer) {
                max = ((Integer) bucket.get("max")).doubleValue();
            } else {
                max = 0;
            }
            if (bucket.get("mean") instanceof Double) {
                mean = (Double) bucket.get("mean");
            } else if (bucket.get("mean") instanceof Integer) {
                mean = ((Integer) bucket.get("mean")).doubleValue();
            } else {
                mean = 0;
            }
            if (bucket.get("ss") instanceof Double) {
                sumsq = (Double) bucket.get("ss");
            } else if (bucket.get("ss") instanceof Integer) {
                sumsq = ((Integer) bucket.get("ss")).doubleValue();
            } else {
                sumsq = 0;
            }
            if (bucket.get("sum") instanceof Double) {
                sum = (Double) bucket.get("sum");
            } else if (bucket.get("sum") instanceof Integer) {
                sum = ((Integer) bucket.get("sum")).doubleValue();
            } else {
                sum = 0;
            }

            //            LOGGER.debug("bucket:{}, sumsq:{}, count: {}", bucket, sumsq, count);
            double std;
            if (count > 1) {
                // std = Math.sqrt(sumsq / (count - 1));
                final double realSq = sumsq - (sum * sum) / count;
                std = Math.sqrt(realSq / (count - 1));
            } else {
                std = 0;
            }
            final JSONObject aaLength = new JSONObject();
            aaLength.put("min", min);
            aaLength.put("max", max);
            aaLength.put("mean", mean);
            aaLength.put("stddev", std);

            figfamIdList.add(figfamId);

            final JSONObject figfam = new JSONObject();
            figfam.put("genomes", figfamGenomeIdStr.get(figfamId));
            figfam.put("genome_count", figfamGenomeCount.get(figfamId));
            figfam.put("feature_count", count);
            figfam.put("stats", aaLength);

            figfams.put(figfamId, figfam);
        }

        point = System.currentTimeMillis();
        LOGGER.debug("2st query process: {} ms", (point - start2nd));
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    }

    // getting distinct figfam_product
    if (!figfamIdList.isEmpty()) {

        figfamIdList.remove("");

        try {
            SolrQuery query = new SolrQuery("family_id:(" + StringUtils.join(figfamIdList, " OR ") + ")");
            query.addFilterQuery("family_type:" + familyType);
            query.addField("family_id,family_product").setRows(figfamIdList.size());

            LOGGER.debug("getGroupStats() 3/3: [{}] {}", SolrCore.FIGFAM_DIC.getSolrCoreName(), query);

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

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

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

            for (final Map doc : sdl) {
                final JSONObject figfam = (JSONObject) figfams.get(doc.get("family_id"));
                figfam.put("description", doc.get("family_product"));
                figfams.put(doc.get("family_id").toString(), figfam);
            }

            int i = 1;
            while (sdl.size() == 25000) {
                query.setStart(25000 * i);

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

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

                for (final Map doc : sdl) {
                    final JSONObject figfam = (JSONObject) figfams.get(doc.get("family_id"));
                    figfam.put("description", doc.get("family_product"));
                    figfams.put(doc.get("family_id").toString(), figfam);
                }
                i++;
            }
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
            LOGGER.debug("::getGroupStats() 3/3, params: {}", request.getParameterMap().toString());
        }
        figfams.writeJSONString(writer);
    }
}