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

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

Introduction

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

Prototype

public SolrQuery addField(String field) 

Source Link

Usage

From source file:edu.unc.lib.dl.search.solr.service.SolrSearchService.java

License:Apache License

/**
 * Returns the value of a single field from the object identified by pid.
 * /*from   ww w  . j av a2s .  c om*/
 * @param pid
 * @param field
 * @return The value of the specified field or null if it wasn't found.
 */
public Object getField(String pid, String field) throws SolrServerException {
    QueryResponse queryResponse = null;
    SolrQuery solrQuery = new SolrQuery();
    StringBuilder query = new StringBuilder();
    query.append("id:").append(SolrSettings.sanitize(pid));
    solrQuery.setQuery(query.toString());
    solrQuery.addField(field);

    queryResponse = server.query(solrQuery);
    if (queryResponse.getResults().getNumFound() > 0) {
        return queryResponse.getResults().get(0).getFieldValue(field);
    }
    return null;
}

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

License:Apache License

/**
 * Checks if an item is accessible given the specified access restrictions
 * /*  w w w. j  a  v a2  s  .c o  m*/
 * @param idRequest
 * @param accessType
 * @return
 */
public boolean isAccessible(SimpleIdRequest idRequest) {
    QueryResponse queryResponse = null;
    SolrQuery solrQuery = new SolrQuery();
    StringBuilder query = new StringBuilder();

    PID pid = new PID(idRequest.getId());
    String id = pid.getPid();
    String[] idParts = id.split("/");
    String datastream = null;
    if (idParts.length > 1) {
        id = idParts[0];
        datastream = idParts[1];
        solrQuery.addField(solrSettings.getFieldName(SearchFieldKeys.ROLE_GROUP.name()));
    }

    query.append(solrSettings.getFieldName(SearchFieldKeys.ID.name())).append(':')
            .append(SolrSettings.sanitize(id));

    try {
        // Add access restrictions to query
        addAccessRestrictions(query, idRequest.getAccessGroups());
    } catch (AccessRestrictionException e) {
        // If the user doesn't have any access groups, they don't have access to anything, return null.
        LOG.error(e.getMessage());
        return false;
    }

    solrQuery.setQuery(query.toString());
    if (datastream == null)
        solrQuery.setRows(0);
    else
        solrQuery.setRows(1);

    solrQuery.addField(solrSettings.getFieldName(SearchFieldKeys.ID.name()));

    LOG.debug("getObjectById query: " + solrQuery.toString());
    try {
        queryResponse = this.executeQuery(solrQuery);
        if (queryResponse.getResults().getNumFound() == 0)
            return false;
        if (datastream == null)
            return true;

        List<BriefObjectMetadataBean> results = queryResponse.getBeans(BriefObjectMetadataBean.class);
        BriefObjectMetadataBean metadata = results.get(0);

        return AccessUtil.permitDatastreamAccess(idRequest.getAccessGroups(), datastream, metadata);
    } catch (SolrServerException e) {
        LOG.error("Error retrieving Solr object request: " + e);
    }

    return false;
}

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

License:Apache License

public SolrQuery buildSolrQuery(Map<String, String> key, String sorts, String facets, int start, int end,
        boolean highlight) {

    SolrQuery query = new SolrQuery();
    SolrInterface solr = new SolrInterface();

    // Processing key map
    query.setQuery(StringHelper.stripQuoteAndParseSolrKeywordOperator(key.get("keyword")));

    if (key.containsKey("filter") && key.get("filter") != null) {
        query.addFilterQuery(key.get("filter"));
    }/*  w  w  w.ja  v a2 s . c om*/
    if (key.containsKey("filter2") && key.get("filter2") != null) {
        query.addFilterQuery(key.get("filter2"));
    }

    // use SolrJoin if possible
    if (key.containsKey("join")) {
        query.addFilterQuery(key.get("join"));
    }

    if (key.containsKey("fields") && !key.get("fields").equals("")) {
        query.addField(key.get("fields"));
    }

    // sort conditions
    if (sorts != null && !sorts.equals("") && !sorts.equals("[]")) {
        try {
            JSONArray sorter = (JSONArray) new JSONParser().parse(sorts);
            for (Object aSort : sorter) {
                JSONObject jsonSort = (JSONObject) aSort;
                query.addSort(SolrQuery.SortClause.create(jsonSort.get("property").toString(),
                        jsonSort.get("direction").toString().toLowerCase()));
            }
        } catch (ParseException e) {
            LOGGER.error(e.getMessage(), e);
        }
    }

    // facet conditions
    if (facets != null && !facets.equals("") && !facets.equals("{}")) {
        query.setFacet(true).setFacetMinCount(1).setFacetLimit(-1).setFacetSort(FacetParams.FACET_SORT_COUNT)
                .set("json.nl", "map");

        try {
            JSONObject facetConditions = (JSONObject) new JSONParser().parse(facets);

            if (facetConditions.containsKey("facet.sort")) {
                String facetSort = facetConditions.get("facet.sort").toString();
                if (facetSort.equals("index")) {
                    query.setFacetSort(FacetParams.FACET_SORT_INDEX);
                }
            }

            if (facetConditions.containsKey("field_facets")) {
                String[] fieldFacets = facetConditions.get("field_facets").toString().split(",");
                query.addFacetField(fieldFacets);
            }

            if (facetConditions.containsKey("date_range_facets")
                    && !facetConditions.get("date_range_facets").equals("")) {
                String[] dateRangeFacets = facetConditions.get("date_range_facets").toString().split(",");
                for (String field : dateRangeFacets) {
                    query.addDateRangeFacet(field, solr.getRangeStartDate(), solr.getRangeEndDate(),
                            solr.getRangeDate());
                }
            }
        } catch (ParseException e) {
            LOGGER.error(e.getMessage(), e);
        }
    }

    // start & end
    query.setStart(start); // setting starting index

    if (end == -1) {
        query.setRows(MAX_ROWS);
    } else {
        query.setRows(end);
    }

    // highlight
    if (highlight) {
        query.set("hl", "on").set("hl.fl", "*");
    }

    return query;
}

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

License:Apache License

/**
 * Builds an array of nodes for Genome List view
 * //from   ww  w  .j  a va2s  . 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   w w  w.j a  v  a 2 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.common.OrganismTreeBuilder.java

License:Apache License

/**
 * Build a taxonomy-genome map.//from  w  w  w  . ja  v 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.FunctionalPropertiesPortlet.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");

    PortletRequestDispatcher prd;/*ww w. j av a 2 s  .  c  o  m*/

    GenomeFeature feature = null;

    DataApiHandler dataApi = new DataApiHandler(request);

    if (cType != null && cId != null && cType.equals("feature")) {
        feature = dataApi.getPATRICFeature(cId);
    }

    if (feature != null) {

        if (feature.getFeatureType().equals("CDS") || feature.getFeatureType().equals("mat_peptide")) {

            // to stuffs to here //
            // UniprotKBAccession
            String uniprotkbAccession = null;
            List<String> pdbIds = new ArrayList<>();
            {
                SolrQuery query = new SolrQuery("id_value:(" + feature.getGi() + ")");
                query.addFilterQuery("id_type:GI");

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

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

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

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

                for (Map<String, String> doc : docs) {
                    uniprotkbAccession = doc.get("uniprotkb_accession");
                }
            }
            {
                SolrQuery query = new SolrQuery("uniprotkb_accession:(" + uniprotkbAccession + ")");
                query.setRows(DataApiHandler.MAX_ROWS);
                LOGGER.debug("[{}] {}", SolrCore.ID_REF.getSolrCoreName(), query);

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

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

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

                for (Map<String, String> doc : docs) {
                    if (doc.get("id_type").equals("PDB")) {
                        pdbIds.add(doc.get("id_value"));
                    }
                }
            }

            // Structure Center related
            List<Map> listStructure = null;

            SolrQuery query = new SolrQuery(
                    "gene_symbol_collection:\"PATRIC_ID:" + feature.getPatricId() + "\"");
            query.addField("target_id,target_status,has_clones,has_proteins,selection_criteria");
            LOGGER.trace("[{}] {}", SolrCore.STRUCTURE, query);

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

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

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

            if (!docs.isEmpty()) {
                listStructure = docs;
            }

            // taxonomy genus name
            String genusName = null;
            Genome genome = dataApi.getGenome(feature.getGenomeId());
            if (genome != null) {
                genusName = genome.getGenus();
            }

            request.setAttribute("feature", feature);
            request.setAttribute("uniprotkbAccession", uniprotkbAccession);
            request.setAttribute("pdbIds", pdbIds);
            request.setAttribute("listStructure", listStructure);
            request.setAttribute("genusName", genusName);

            prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/functional_properties/protein.jsp");
            prd.include(request, response);
        } else if (feature.getFeatureType().contains("RNA")) {
            //            ResultType rnaInfo = conn_summary.getRNAInfo("" + feature.getP2FeatureId());
            //
            //            if (rnaInfo.containsKey("comment_string") && rnaInfo.get("comment_string").contains("structure:")) {
            //               String[] tmp = rnaInfo.get("comment_string").split("structure:");
            //               if (tmp[0] != null) {
            //                  rnaInfo.put("comment", tmp[0]);
            //               }
            //               if (tmp[1] != null) {
            //                  rnaInfo.put("structure", tmp[1]);
            //               }
            //            }
            //            else if (rnaInfo.containsKey("comment_string")) {
            //               rnaInfo.put("comment", rnaInfo.get("comment_string"));
            //            }
            //
            //            request.setAttribute("rna", rnaInfo);
            request.setAttribute("rna", new ResultType());
            prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/functional_properties/rna.jsp");
            prd.include(request, response);
        } else if (feature.getFeatureType().equals("misc_feature")) {
            String comment = ""; // conn_shared.getNaFeatureComment("" + feature.getP2FeatureId());
            request.setAttribute("comment", comment);
            prd = getPortletContext()
                    .getRequestDispatcher("/WEB-INF/jsp/functional_properties/misc_feature.jsp");
            prd.include(request, response);
        } else {
            PrintWriter writer = response.getWriter();
            writer.write("No information is available.");
            writer.close();
        }
    } else {
        PrintWriter writer = response.getWriter();
        writer.write("No information is available.");
        writer.close();
    }
}

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

License:Apache License

@SuppressWarnings("unchecked")
public void serveResource(ResourceRequest request, ResourceResponse response)
        throws PortletException, IOException {

    response.setContentType("text/html");
    String callType = request.getParameter("callType");

    switch (callType) {
    case "saveParams": {

        Map<String, String> key = new HashMap<>();
        key.put("feature_id", request.getParameter("feature_id"));

        long pk = (new Random()).nextLong();

        SessionHandler.getInstance().set(SessionHandler.PREFIX + pk, jsonWriter.writeValueAsString(key));

        PrintWriter writer = response.getWriter();
        writer.write("" + pk);
        writer.close();//w w  w .  j  a  v  a2  s  .com
        break;
    }
    case "getFeatureIds": {
        String pathwayId = request.getParameter("map");
        String featureList = request.getParameter("featureList");
        String algorithm = request.getParameter("algorithm");

        DataApiHandler dataApi = new DataApiHandler(request);

        SolrQuery query = new SolrQuery("pathway_id:(" + pathwayId.replaceAll(",", " OR ")
                + ") AND feature_id:(" + featureList.replaceAll(",", " OR ") + ")");
        query.addFilterQuery("annotation:" + algorithm).setRows(dataApi.MAX_ROWS).addField("feature_id");

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

        Map resp = jsonReader.readValue(apiResponse);
        Map respBody = (Map) resp.get("response");
        List<GenomeFeature> features = dataApi.bindDocuments((List<Map>) respBody.get("docs"),
                GenomeFeature.class);

        JSONArray featureIds = new JSONArray();
        for (GenomeFeature feature : features) {
            featureIds.add(feature.getId());
        }

        response.setContentType("application/json");
        featureIds.writeJSONString(response.getWriter());
        break;
    }
    case "getGenomeIds": {

        String featureIds = request.getParameter("feature_id");
        String pathwayId = request.getParameter("map");

        DataApiHandler dataApi = new DataApiHandler(request);

        String genomeId = "";
        if (featureIds != null && !featureIds.equals("") && pathwayId != null && !pathwayId.equals("")) {
            String[] listFeatureId = featureIds.split(",");

            SolrQuery query = new SolrQuery("pathway_id:(" + pathwayId + ") AND feature_id:("
                    + StringUtils.join(listFeatureId, " OR ") + ")");
            query.addField("genome_id").setRows(listFeatureId.length);

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

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

            Set<String> listGenomeId = new HashSet<>();
            for (Map doc : sdl) {
                listGenomeId.add(doc.get("genome_id").toString());
            }
            genomeId = StringUtils.join(listGenomeId, ",");
        }
        PrintWriter writer = response.getWriter();
        writer.write(genomeId);
        writer.close();
        break;
    }
    case "download": {

        String _filename = "PathwaySummary";
        String _fileformat = request.getParameter("fileformat");
        String pk = request.getParameter("pk");
        Map<String, String> key = jsonReader
                .readValue(SessionHandler.getInstance().get(SessionHandler.PREFIX + pk));

        if (key != null && key.containsKey("feature_id")) {
            List<String> featureIDs = Arrays.asList(key.get("feature_id").split(","));
            JSONObject jsonResult = getEnrichmentPathway(request, featureIDs);

            List<String> _tbl_header = new ArrayList<>();
            List<String> _tbl_field = new ArrayList<>();
            JSONArray _tbl_source = (JSONArray) jsonResult.get("results");

            _tbl_header.addAll(Arrays.asList("Pathway Name", "# of Genes Selected   ", "# of Genes Annotated",
                    "% Coverage"));
            _tbl_field.addAll(Arrays.asList("pathway_name", "ocnt", "ecnt", "percentage"));

            ExcelHelper excel = new ExcelHelper("xssf", _tbl_header, _tbl_field, _tbl_source);
            excel.buildSpreadsheet();

            if (_fileformat.equalsIgnoreCase("xlsx")) {

                response.setContentType("application/octetstream");
                response.setProperty("Content-Disposition",
                        "attachment; filename=\"" + _filename + "." + _fileformat + "\"");

                excel.writeSpreadsheettoBrowser(response.getPortletOutputStream());
            } else if (_fileformat.equalsIgnoreCase("txt")) {

                response.setContentType("application/octetstream");
                response.setProperty("Content-Disposition",
                        "attachment; filename=\"" + _filename + "." + _fileformat + "\"");

                response.getWriter().write(excel.writeToTextFile());
            }
        }
        break;
    }
    case "getFeatureTable": {

        String pk = request.getParameter("pk");
        Map<String, String> key = jsonReader
                .readValue(SessionHandler.getInstance().get(SessionHandler.PREFIX + pk));

        response.setContentType("application/json");
        if (key != null && key.containsKey("feature_id")) {

            List<String> featureIDs = Arrays.asList(key.get("feature_id").split(","));
            JSONObject jsonResult = getEnrichmentPathway(request, featureIDs);

            PrintWriter writer = response.getWriter();
            jsonResult.writeJSONString(writer);
            writer.close();
        } else {
            PrintWriter writer = response.getWriter();
            writer.write("{}");
            writer.close();
        }
        break;
    }
    }
}

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

License:Apache License

private JSONObject getEnrichmentPathway(ResourceRequest request, List<String> featureIDs) throws IOException {

    DataApiHandler dataApi = new DataApiHandler(request);

    // 1. get Pathway ID, Pathway Name & genomeID
    //solr/pathway/select?q=feature_id:(PATRIC.83332.12.NC_000962.CDS.34.1524.fwd)&fl=pathway_name,pathway_id,gid

    Map<String, JSONObject> pathwayMap = new LinkedHashMap<>();
    Set<String> listFeatureID = new HashSet<>();
    Set<String> listGenomeID = new HashSet<>();
    Set<String> listPathwayID = new HashSet<>();

    SolrQuery query = new SolrQuery("feature_id:(" + StringUtils.join(featureIDs, " OR ") + ")");
    int queryRows = Math.max(dataApi.MAX_ROWS, (featureIDs.size() * 2));
    query.addField("pathway_name,pathway_id,genome_id,feature_id").setRows(queryRows);

    LOGGER.trace("Enrichment 1/3: [{}] {}", SolrCore.PATHWAY.getSolrCoreName(), query);

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

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

    for (Map doc : pathwayList) {
        JSONObject pw = new JSONObject();
        pw.put("pathway_id", doc.get("pathway_id"));
        pw.put("pathway_name", doc.get("pathway_name"));
        pathwayMap.put(doc.get("pathway_id").toString(), pw);

        // LOGGER.debug("{}", pw.toJSONString());
        listFeatureID.add(doc.get("feature_id").toString());
        listGenomeID.add(doc.get("genome_id").toString());
        listPathwayID.add(doc.get("pathway_id").toString());
    }/*w w w.  j  a v a  2  s  . c o  m*/

    // 2. get pathway ID & Ocnt
    //solr/pathway/select?q=feature_id:(PATRIC.83332.12.NC_000962.CDS.34.1524.fwd)&rows=0&facet=true
    // &json.facet={stat:{field:{field:pathway_id,limit:-1,facet:{gene_count:"unique(feature_id)"}}}}
    query = new SolrQuery("feature_id:(" + StringUtils.join(featureIDs, " OR ") + ")");
    query.setRows(0).setFacet(true);
    query.add("json.facet",
            "{stat:{field:{field:pathway_id,limit:-1,facet:{gene_count:\"unique(feature_id)\"}}}}");

    LOGGER.trace("Enrichment 2/3: [{}] {}", SolrCore.PATHWAY.getSolrCoreName(),
            URLDecoder.decode(query.toString(), "UTF-8"));

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

    resp = jsonReader.readValue(apiResponse);
    Map facets = (Map) resp.get("facets");
    if ((Integer) facets.get("count") > 0) {
        Map stat = (Map) facets.get("stat");
        List<Map> buckets = (List) stat.get("buckets");

        for (Map value : buckets) {
            String aPathwayId = value.get("val").toString();

            if (pathwayMap.containsKey(aPathwayId)) {
                pathwayMap.get(aPathwayId).put("ocnt", value.get("gene_count"));
            }
        }
    }

    // 3. with genomeID, get pathway ID & Ecnt
    //solr/pathway/select?q=genome_id:83332.12 AND pathway_id:(00230 OR 00240)&fq=annotation:PATRIC&rows=0&facet=true //&facet.mincount=1&facet.limit=-1
    // &json.facet={stat:{field:{field:pathway_id,limit:-1,facet:{gene_count:"unique(feature_id)"}}}}
    if (!listGenomeID.isEmpty() && !listPathwayID.isEmpty()) {
        query = new SolrQuery("genome_id:(" + StringUtils.join(listGenomeID, " OR ") + ") AND pathway_id:("
                + StringUtils.join(listPathwayID, " OR ") + ")");
        query.setRows(0).setFacet(true).addFilterQuery("annotation:PATRIC");
        query.add("json.facet",
                "{stat:{field:{field:pathway_id,limit:-1,facet:{gene_count:\"unique(feature_id)\"}}}}");

        LOGGER.trace("Enrichment 3/3: {}", query.toString());

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

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

        for (Map value : buckets) {
            pathwayMap.get(value.get("val").toString()).put("ecnt", value.get("gene_count"));
        }
    }

    // 4. Merge hash and calculate percentage on the fly
    JSONObject jsonResult = new JSONObject();
    JSONArray results = new JSONArray();
    for (JSONObject item : pathwayMap.values()) {
        if (item.get("ecnt") != null && item.get("ocnt") != null) {
            float ecnt = Float.parseFloat(item.get("ecnt").toString());
            float ocnt = Float.parseFloat(item.get("ocnt").toString());
            float percentage = ocnt / ecnt * 100;
            item.put("percentage", (int) percentage);
            results.add(item);
        }
    }
    jsonResult.put("results", results);
    jsonResult.put("total", results.size());
    jsonResult.put("featureRequested", featureIDs.size());
    jsonResult.put("featureFound", listFeatureID.size());

    return jsonResult;
}

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;//from w  ww .j a v  a2s. co 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;
}