Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SCRUM-3952: change vocabularyterm to ontologyterm after LinkML change #1667

Merged
merged 5 commits into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ public class LinkMLSchemaConstants {
private LinkMLSchemaConstants() {
// Hidden from view, as it is a utility class
}
public static final String LATEST_RELEASE = "2.6.1";
public static final String LATEST_RELEASE = "2.7.0";
public static final String MIN_ONTOLOGY_RELEASE = "1.2.4";
public static final String MAX_ONTOLOGY_RELEASE = LATEST_RELEASE;

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,17 @@ private VocabularyConstants() {

public static final String GENE_EXPRESSION_VOCABULARY = "gene_expression";
public static final String GENE_EXPRESSION_RELATION_TERM = "is_expressed_in";

public static final String TRANSCRIPT_RELATION_VOCABULARY = "transcript_relation";
public static final String TRANSCRIPT_CHILD_TERM = "is_child_of";
public static final String TRANSCRIPT_PARENT_TERM = "is_parent_of";

public static final String STAGE_UBERON_SLIM_TERMS = "stage_uberon_slim_terms";
public static final String ANATOMICAL_STRUCTURE_UBERON_SLIM_TERMS = "anatomical_structure_uberon_slim_terms";
public static final String CELLULAR_COMPONENT_QUALIFIERS = "cellular_component_qualifiers";
public static final String SPATIAL_EXPRESSION_QUALIFIERS = "spatial_expression_qualifiers";
abecerra marked this conversation as resolved.
Show resolved Hide resolved
public static final String ANATOMICAL_STRUCTURE_QUALIFIER = "anatomical_structure_qualifier";
public static final String ANATOMICAL_SUBSTRUCTURE_QUALIFIER = "anatomical_subtructure_qualifier";
public static final String CELLULAR_COMPONENT_QUALIFIER = "cellular_component_qualifier";

public static final String HTP_DATASET_CATEGORY_TAGS = "data_set_category_tags";
public static final String HTP_DATASET_NOTE_TYPE_VOCABULARY_TERM_SET = "htp_expression_dataset_note_type";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.alliancegenome.curation_api.model.entities.base.AuditedObject;
import org.alliancegenome.curation_api.model.entities.ontology.AnatomicalTerm;
import org.alliancegenome.curation_api.model.entities.ontology.GOTerm;
import org.alliancegenome.curation_api.model.entities.ontology.OntologyTerm;
import org.alliancegenome.curation_api.model.entities.ontology.UBERONTerm;
import org.alliancegenome.curation_api.view.View;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
Expand All @@ -30,7 +31,7 @@
@Entity
@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
@AGRCurationSchemaVersion(min = "2.6.1", max = LinkMLSchemaConstants.LATEST_RELEASE)
@AGRCurationSchemaVersion(min = "2.7.0", max = LinkMLSchemaConstants.LATEST_RELEASE)
@Schema(name = "Anatomical_Site", description = "Anatomical part of an expression pattern")
@Table(indexes = {
@Index(name = "anatomicalsite_anatomicalstructure_index ", columnList = "anatomicalstructure_id"),
Expand All @@ -55,7 +56,7 @@ public class AnatomicalSite extends AuditedObject {
@ManyToOne
@JsonView({View.FieldsOnly.class})
private GOTerm cellularComponentTerm;

//celullar compoent ribbon -- slim
@IndexedEmbedded(includePaths = {"name", "name_keyword"})
@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)
Expand All @@ -79,7 +80,7 @@ public class AnatomicalSite extends AuditedObject {
@Index(name = "anatomicalstructurequalifiers_anatomicalsite_index", columnList = "anatomicalsite_id"),
@Index(name = "anatomicalstructurequalifiers_structurequalifiers_index", columnList = "anatomicalstructurequalifiers_id")}
)
private List<VocabularyTerm> anatomicalStructureQualifiers;
private List<OntologyTerm> anatomicalStructureQualifiers;

@FullTextField(analyzer = "autocompleteAnalyzer", searchAnalyzer = "autocompleteSearchAnalyzer")
@KeywordField(name = "anatomicalsubstructurequalifiers_keyword", aggregable = Aggregable.YES, sortable = Sortable.YES, searchable = Searchable.YES, normalizer = "sortNormalizer")
Expand All @@ -91,7 +92,7 @@ public class AnatomicalSite extends AuditedObject {
@Index(name = "anatomicalsubstructurequalifiers_anatomicalsite_index", columnList = "anatomicalsite_id"),
@Index(name = "anatomicalsubstructurequalifiers_qualifiers_index", columnList = "anatomicalsubstructurequalifiers_id")}
)
private List<VocabularyTerm> anatomicalSubstructureQualifiers;
private List<OntologyTerm> anatomicalSubstructureQualifiers;

@FullTextField(analyzer = "autocompleteAnalyzer", searchAnalyzer = "autocompleteSearchAnalyzer")
@KeywordField(name = "cellularcomponentqualifiers_keyword", aggregable = Aggregable.YES, sortable = Sortable.YES, searchable = Searchable.YES, normalizer = "sortNormalizer")
Expand All @@ -103,7 +104,7 @@ public class AnatomicalSite extends AuditedObject {
@Index(name = "cellularcomponentqualifiers_anatomicalsite_index", columnList = "anatomicalsite_id"),
@Index(name = "cellularcomponentqualifiers_cellularcomponentqualifiers_index", columnList = "cellularcomponentqualifiers_id")}
)
private List<VocabularyTerm> cellularComponentQualifiers;
private List<OntologyTerm> cellularComponentQualifiers;

@FullTextField(analyzer = "autocompleteAnalyzer", searchAnalyzer = "autocompleteSearchAnalyzer")
@KeywordField(name = "anatomicalstructureuberonterms_keyword", aggregable = Aggregable.YES, sortable = Sortable.YES, searchable = Searchable.YES, normalizer = "sortNormalizer")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
package org.alliancegenome.curation_api.services.validation.dto.fms;

import java.time.OffsetDateTime;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.List;

import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import org.alliancegenome.curation_api.constants.ValidationConstants;
import org.alliancegenome.curation_api.constants.VocabularyConstants;
import org.alliancegenome.curation_api.dao.GeneExpressionAnnotationDAO;
import org.alliancegenome.curation_api.enums.BackendBulkDataProvider;
import org.alliancegenome.curation_api.exceptions.ValidationException;
import org.alliancegenome.curation_api.exceptions.ObjectValidationException;
import org.alliancegenome.curation_api.model.entities.AnatomicalSite;
import org.alliancegenome.curation_api.model.entities.ExpressionPattern;
import org.alliancegenome.curation_api.model.entities.Gene;
import org.alliancegenome.curation_api.model.entities.GeneExpressionAnnotation;
import org.alliancegenome.curation_api.model.entities.Reference;
import org.alliancegenome.curation_api.model.entities.TemporalContext;
import org.alliancegenome.curation_api.model.entities.VocabularyTerm;
import org.alliancegenome.curation_api.model.entities.ontology.AnatomicalTerm;
import org.alliancegenome.curation_api.model.entities.ontology.GOTerm;
import org.alliancegenome.curation_api.model.entities.ontology.MMOTerm;
import org.alliancegenome.curation_api.model.entities.ontology.StageTerm;
import org.alliancegenome.curation_api.model.entities.ontology.UBERONTerm;
import org.alliancegenome.curation_api.model.entities.*;
import org.alliancegenome.curation_api.model.entities.ontology.*;
import org.alliancegenome.curation_api.model.ingest.dto.fms.GeneExpressionFmsDTO;
import org.alliancegenome.curation_api.model.ingest.dto.fms.UberonSlimTermDTO;
import org.alliancegenome.curation_api.response.ObjectResponse;
Expand All @@ -32,16 +19,14 @@
import org.alliancegenome.curation_api.services.ReferenceService;
import org.alliancegenome.curation_api.services.VocabularyTermService;
import org.alliancegenome.curation_api.services.helpers.annotations.GeneExpressionAnnotationUniqueIdHelper;
import org.alliancegenome.curation_api.services.ontology.AnatomicalTermService;
import org.alliancegenome.curation_api.services.ontology.GoTermService;
import org.alliancegenome.curation_api.services.ontology.MmoTermService;
import org.alliancegenome.curation_api.services.ontology.StageTermService;
import org.alliancegenome.curation_api.services.ontology.UberonTermService;
import org.alliancegenome.curation_api.services.ontology.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ObjectUtils;

import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import java.time.OffsetDateTime;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.List;

@RequestScoped
public class GeneExpressionAnnotationFmsDTOValidator {
Expand All @@ -57,6 +42,7 @@ public class GeneExpressionAnnotationFmsDTOValidator {
@Inject GoTermService goTermService;
@Inject UberonTermService uberonTermService;
@Inject StageTermService stageTermService;
@Inject OntologyTermService ontologyTermService;

public GeneExpressionAnnotation validateAnnotation(GeneExpressionFmsDTO geneExpressionFmsDTO, BackendBulkDataProvider dataProvider) throws ValidationException {
ObjectResponse<GeneExpressionAnnotation> response = new ObjectResponse<>();
Expand Down Expand Up @@ -118,7 +104,7 @@ public GeneExpressionAnnotation validateAnnotation(GeneExpressionFmsDTO geneExpr

ObjectResponse<AnatomicalSite> anatomicalSiteObjectResponse = validateAnatomicalSite(geneExpressionFmsDTO);
if (anatomicalSiteObjectResponse.hasErrors()) {
response.addErrorMessage("whereExpressed", anatomicalSiteObjectResponse.errorMessagesString());
response.addErrorMessage("expressionPattern", anatomicalSiteObjectResponse.errorMessagesString());
markquintontulloch marked this conversation as resolved.
Show resolved Hide resolved
} else {
geneExpressionAnnotation.setWhereExpressedStatement(geneExpressionFmsDTO.getWhereExpressed().getWhereExpressedStatement());
AnatomicalSite anatomicalSite = updateAnatomicalSite(anatomicalSiteObjectResponse, geneExpressionAnnotation);
Expand All @@ -127,7 +113,7 @@ public GeneExpressionAnnotation validateAnnotation(GeneExpressionFmsDTO geneExpr

ObjectResponse<TemporalContext> temporalContextObjectResponse = validateTemporalContext(geneExpressionFmsDTO);
if (temporalContextObjectResponse.hasErrors()) {
response.addErrorMessage("whenExpressed", temporalContextObjectResponse.errorMessagesString());
response.addErrorMessage("expressionPattern", temporalContextObjectResponse.errorMessagesString());
markquintontulloch marked this conversation as resolved.
Show resolved Hide resolved
} else {
geneExpressionAnnotation.setWhenExpressedStageName(geneExpressionFmsDTO.getWhenExpressed().getStageName());
TemporalContext temporalContext = updateTemporalContext(temporalContextObjectResponse, geneExpressionAnnotation);
Expand Down Expand Up @@ -238,31 +224,37 @@ private ObjectResponse<AnatomicalSite> validateAnatomicalSite(GeneExpressionFmsD

if (!ObjectUtils.isEmpty(geneExpressionFmsDTO.getWhereExpressed().getAnatomicalStructureQualifierTermId())) {
String anatomicalstructurequalifiertermId = geneExpressionFmsDTO.getWhereExpressed().getAnatomicalStructureQualifierTermId();
VocabularyTerm anatomicalStructureQualifierTerm = vocabularyTermService.getTermInVocabulary(VocabularyConstants.ANATOMICAL_STRUCTURE_UBERON_SLIM_TERMS, anatomicalstructurequalifiertermId).getEntity();
if (anatomicalStructureQualifierTerm == null) {
response.addErrorMessage("whereExpressed - anatomicalStructureQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + geneExpressionFmsDTO.getWhereExpressed().getAnatomicalStructureTermId() + ")");
} else {
anatomicalSite.setAnatomicalStructureQualifiers(List.of(anatomicalStructureQualifierTerm));
if (vocabularyTermService.getTermInVocabularyTermSet(VocabularyConstants.ANATOMICAL_STRUCTURE_QUALIFIER, anatomicalstructurequalifiertermId) != null) {
OntologyTerm anatomicalStructureQualifierTerm = ontologyTermService.findByCurieOrSecondaryId(anatomicalstructurequalifiertermId);
if (anatomicalStructureQualifierTerm == null) {
response.addErrorMessage("whereExpressed - anatomicalStructureQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + anatomicalstructurequalifiertermId + ")");
} else {
anatomicalSite.setAnatomicalStructureQualifiers(List.of(anatomicalStructureQualifierTerm));
}
}
}

if (!ObjectUtils.isEmpty(geneExpressionFmsDTO.getWhereExpressed().getAnatomicalSubStructureQualifierTermId())) {
String anatomicalsubstructurequalifierId = geneExpressionFmsDTO.getWhereExpressed().getAnatomicalSubStructureQualifierTermId();
VocabularyTerm anatomicalSubStructureQualifierTerm = vocabularyTermService.getTermInVocabulary(VocabularyConstants.ANATOMICAL_STRUCTURE_UBERON_SLIM_TERMS, anatomicalsubstructurequalifierId).getEntity();
if (anatomicalSubStructureQualifierTerm == null) {
response.addErrorMessage("whereExpressed - anatomicalSubStructureQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + geneExpressionFmsDTO.getWhereExpressed().getAnatomicalSubStructureTermId() + ")");
} else {
anatomicalSite.setAnatomicalSubstructureQualifiers(List.of(anatomicalSubStructureQualifierTerm));
if (vocabularyTermService.getTermInVocabularyTermSet(VocabularyConstants.ANATOMICAL_SUBSTRUCTURE_QUALIFIER, anatomicalsubstructurequalifierId) != null) {
OntologyTerm anatomicalSubStructureQualifierTerm = ontologyTermService.findByCurieOrSecondaryId(anatomicalsubstructurequalifierId);
if (anatomicalSubStructureQualifierTerm == null) {
response.addErrorMessage("whereExpressed - anatomicalSubStructureQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + anatomicalsubstructurequalifierId + ")");
} else {
anatomicalSite.setAnatomicalSubstructureQualifiers(List.of(anatomicalSubStructureQualifierTerm));
}
}
}

if (!ObjectUtils.isEmpty(geneExpressionFmsDTO.getWhereExpressed().getCellularComponentQualifierTermId())) {
String cellularComponentQualifierTermId = geneExpressionFmsDTO.getWhereExpressed().getCellularComponentQualifierTermId();
VocabularyTerm cellularComponentQualifierTerm = vocabularyTermService.getTermInVocabulary(VocabularyConstants.CELLULAR_COMPONENT_QUALIFIERS, cellularComponentQualifierTermId).getEntity();
if (cellularComponentQualifierTerm == null) {
response.addErrorMessage("whereExpressed - cellularComponentQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + geneExpressionFmsDTO.getWhereExpressed().getCellularComponentQualifierTermId() + ")");
} else {
anatomicalSite.setCellularComponentQualifiers(List.of(cellularComponentQualifierTerm));
if (vocabularyTermService.getTermInVocabularyTermSet(VocabularyConstants.CELLULAR_COMPONENT_QUALIFIER, cellularComponentQualifierTermId) != null) {
OntologyTerm cellularComponentQualifierTerm = ontologyTermService.findByCurieOrSecondaryId(cellularComponentQualifierTermId);
if (cellularComponentQualifierTerm == null) {
response.addErrorMessage("whereExpressed - cellularComponentQualifierTermId", ValidationConstants.INVALID_MESSAGE + " (" + cellularComponentQualifierTermId + ")");
} else {
anatomicalSite.setCellularComponentQualifiers(List.of(cellularComponentQualifierTerm));
}
}
}

Expand Down
Loading
Loading