Skip to content

Commit

Permalink
add gene sequence end point. #528
Browse files Browse the repository at this point in the history
  • Loading branch information
julie-sullivan committed Mar 10, 2020
1 parent 18e0f6f commit 6a7cd2c
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,11 @@ public void updateParams(Map<String, String> uriParams) throws QueryException {
}
params.remove(fieldNameDotNotation);
}
// TODO handle assembly better. we're just ignoring it now.
if (!params.isEmpty()) {
throw new QueryException("Invalid query parameter found: " + params.keySet().toString());
}
// TODO there are params in the query string that are not in the query, e.g. aa and position for substitution scores
// do we remove this check? or handle expected parameteters? I think we delete this.
// if (!params.isEmpty()) {
// throw new QueryException("Invalid query parameter found: " + params.keySet().toString());
// }
objectMapper.updateValue(this, objectHashMap);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,9 +334,15 @@ public Bson parseQuery(GeneQuery geneQuery) {
case "transcripts.xrefs":
if (!visited) {
List<String> identifers = new ArrayList<>();
identifers.addAll(geneQuery.getIds());
identifers.addAll(geneQuery.getNames());
identifers.addAll(geneQuery.getTranscriptsXrefs());
if (geneQuery.getIds() != null) {
identifers.addAll(geneQuery.getIds());
}
if (geneQuery.getNames() != null) {
identifers.addAll(geneQuery.getNames());
}
if (geneQuery.getTranscriptsXrefs() != null) {
identifers.addAll(geneQuery.getTranscriptsXrefs());
}
createIdRegionQuery(geneQuery.getRegions(), identifers, andBsonList);
visited = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ protected void createIdRegionQuery(List<Region> regions, List<String> ids, List<
Bson end = Filters.gte("end", regions.get(0).getStart());
andBsonList.add(Filters.and(chromosome, start, end));
} else if (CollectionUtils.isEmpty(regions) && ids.size() == 1) {
Bson idFilter = Filters.eq("id", ids.get(0));
Bson idFilter = Filters.eq("transcripts.xrefs.id", ids.get(0));
andBsonList.add(idFilter);
} else {
List<Bson> orBsonList = new ArrayList<>();
Expand All @@ -159,7 +159,7 @@ protected void createIdRegionQuery(List<Region> regions, List<String> ids, List<
}
if (CollectionUtils.isNotEmpty(ids)) {
for (String id : ids) {
Bson idFilter = Filters.eq("id", id);
Bson idFilter = Filters.eq("transcripts.xrefs.id", id);
orBsonList.add(idFilter);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ public TranscriptCoreDBAdaptor(String species, String assembly, MongoDataStore m
logger.debug("TranscriptMongoDBAdaptor: in 'constructor'");
}



// @Override
// public CellBaseDataResult<String> getCdna(String id) {
// Bson bson = Filters.eq("transcripts.xrefs.id", id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@

public interface AggregationApi<Q extends AbstractQuery, T> extends FeatureApi {

default CellBaseDataResult<T> count(Q query) {
query.setCount(Boolean.TRUE);
return getDBAdaptor().count(query);
}

default CellBaseDataResult<T> groupBy(Q query) {
query.setCount(Boolean.FALSE);
return getDBAdaptor().groupBy(query);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,25 @@

package org.opencb.cellbase.lib.managers;

import org.apache.commons.collections.CollectionUtils;
import org.opencb.biodata.models.core.Gene;
import org.opencb.biodata.models.core.GenomeSequenceFeature;
import org.opencb.biodata.models.core.Region;
import org.opencb.cellbase.core.api.core.CellBaseCoreDBAdaptor;
import org.opencb.cellbase.core.api.queries.GeneQuery;
import org.opencb.cellbase.core.config.CellBaseConfiguration;
import org.opencb.cellbase.core.result.CellBaseDataResult;
import org.opencb.cellbase.lib.impl.core.GeneCoreDBAdaptor;
import org.opencb.cellbase.lib.impl.core.GenomeMongoDBAdaptor;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class GeneManager extends AbstractManager implements AggregationApi {

private GeneCoreDBAdaptor geneDBAdaptor;
private GenomeMongoDBAdaptor genomeDBAdaptor;

public GeneManager(String species, String assembly, CellBaseConfiguration configuration) {
super(species, assembly, configuration);
Expand All @@ -35,6 +43,7 @@ public GeneManager(String species, String assembly, CellBaseConfiguration config

private void init() {
geneDBAdaptor = dbAdaptorFactory.getGeneDBAdaptor(species, assembly);
genomeDBAdaptor = dbAdaptorFactory.getGenomeDBAdaptor(species, assembly);
}

public Iterator<Gene> iterator(GeneQuery geneQuery) {
Expand All @@ -46,6 +55,26 @@ public CellBaseCoreDBAdaptor getDBAdaptor() {
return geneDBAdaptor;
}

public List<CellBaseDataResult<GenomeSequenceFeature>> getSequence(List<GeneQuery> queries) {
List<CellBaseDataResult<GenomeSequenceFeature>> sequences = new ArrayList<>();
for (GeneQuery query : queries) {
// get the coordinates for the gene
CellBaseDataResult<Gene> geneCellBaseDataResult = geneDBAdaptor.query(query);

// get the sequences for those coordinates
List<Gene> results = geneCellBaseDataResult.getResults();
if (CollectionUtils.isNotEmpty(results)) {
Gene gene = results.get(0);
Region region = Region.parseRegion(gene.getChromosome() + ":" + gene.getStart() + "-" + gene.getEnd());
CellBaseDataResult<GenomeSequenceFeature> sequence = genomeDBAdaptor.getSequence(region, query.toQueryOptions());
sequences.add(sequence);
} else {
sequences.add(null);
}
}
return sequences;
}

// public List<CellBaseDataResult> getRegulatoryElements(Query geneQuery, String genes) {
// String[] geneArray = genes.split(",");
// List<CellBaseDataResult> geneQueryResults = new ArrayList<>(geneArray.length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
import com.google.common.base.Splitter;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.StopWatch;
import org.opencb.cellbase.core.CellBaseDataResponse;
Expand Down Expand Up @@ -180,7 +181,10 @@ public Map<String, String> convertMultiToMap(MultivaluedMap<String, String> mult
return convertedMap;
}
for (Map.Entry<String, List<String>> entry : multivaluedMap.entrySet()) {
convertedMap.put(entry.getKey(), String.join(",", entry.getValue()));
List<String> values = entry.getValue();
if (CollectionUtils.isNotEmpty(values)) {
convertedMap.put(entry.getKey(), String.join(",", entry.getValue()));
}
}
return convertedMap;
}
Expand Down Expand Up @@ -364,7 +368,9 @@ protected Response createStringResponse(String str) {

protected Response createJsonResponse(CellBaseDataResponse queryResponse) {
try {
System.out.println("queryResponse.getResponses().get(0).toString() = " + queryResponse.getResponses().get(0).toString());
if (CollectionUtils.isNotEmpty(queryResponse.getResponses()) && queryResponse.getResponses().get(0) != null) {
System.out.println("queryResponse.getResponses().get(0).toString() = " + queryResponse.getResponses().get(0).toString());
}
String value = jsonObjectWriter.writeValueAsString(queryResponse);
ResponseBuilder ok = Response.ok(value, MediaType.APPLICATION_JSON_TYPE.withCharset("utf-8"));
return buildResponse(ok);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.commons.lang3.StringUtils;
import org.opencb.biodata.formats.protein.uniprot.v202003jaxb.Entry;
import org.opencb.biodata.models.core.Gene;
import org.opencb.biodata.models.core.GenomeSequenceFeature;
import org.opencb.biodata.models.core.Transcript;
import org.opencb.biodata.models.core.TranscriptTfbs;
import org.opencb.biodata.models.variant.Variant;
Expand Down Expand Up @@ -691,6 +692,34 @@ public Response getProteinById(@PathParam("genes") @ApiParam(name = "genes", val
}
}

@GET
@Path("/{genes}/sequence")
@ApiOperation(httpMethod = "GET", value = "Return sequences for specified genes", response = GenomeSequenceFeature.class,
responseContainer = "QueryResponse")
@ApiImplicitParams({
@ApiImplicitParam(name = "exclude", value = ParamConstants.EXCLUDE_DESCRIPTION,
required = false, dataType = "java.util.List", paramType = "query"),
@ApiImplicitParam(name = "include", value = ParamConstants.INCLUDE_DESCRIPTION,
required = false, dataType = "java.util.List", paramType = "query")
})
public Response getSequence(@PathParam("genes") @ApiParam(name = "genes", value = ParamConstants.GENE_IDS,
required = true) String genes) {
try {
List<GeneQuery> queries = new ArrayList<>();
String[] identifiers = genes.split(",");
for (String identifier : identifiers) {
GeneQuery query = new GeneQuery(uriParams);
query.setTranscriptsXrefs(Arrays.asList(identifier));
queries.add(query);
logger.info("REST GeneQuery: " + query.toString());
}
List<CellBaseDataResult<GenomeSequenceFeature>> queryResults = geneManager.getSequence(queries);
return createOkResponse(queryResults);
} catch (Exception e) {
return createErrorResponse(e);
}
}

// @GET
// @Path("/{genes}/ppi")
// @ApiOperation(httpMethod = "GET", value = "Get the protein-protein interactions in which this gene is involved",
Expand Down

0 comments on commit 6a7cd2c

Please sign in to comment.