List of usage examples for org.apache.solr.client.solrj SolrQuery addField
public SolrQuery addField(String field)
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; }