Skip to content
Open
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
21 changes: 21 additions & 0 deletions src/main/java/io/swagger/model/pheno/ObservationVariable.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ public class ObservationVariable extends VariableBaseClass {
@JsonProperty("observationVariableName")
private String observationVariableName = null;

@JsonProperty("programDbId")
private String programDbId = null;

@JsonProperty("programName")
private String programName = null;

public ObservationVariable observationVariableDbId(String observationVariableDbId) {
this.observationVariableDbId = observationVariableDbId;
return this;
Expand Down Expand Up @@ -61,6 +67,21 @@ public void setObservationVariableName(String observationVariableName) {
this.observationVariableName = observationVariableName;
}

public String getProgramDbId() {
return programDbId;
}

public void setProgramDbId(String programDbId) {
this.programDbId = programDbId;
}

public String getProgramName() {
return programName;
}

public void setProgramName(String programName) {
this.programName = programName;
}

@Override
public boolean equals(java.lang.Object o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ public class ObservationVariableNewRequest extends VariableBaseClass {
@JsonProperty("observationVariableName")
private Optional<String> observationVariableName = null;

@JsonProperty("programDbId")
private String programDbId = null;

public ObservationVariableNewRequest observationVariableName(String observationVariableName) {
this.observationVariableName = UpdateUtility.setField(observationVariableName);
return this;
Expand All @@ -30,6 +33,14 @@ public void setObservationVariableName(String observationVariableName) {
this.observationVariableName = UpdateUtility.setField(observationVariableName);
}

public String getProgramDbId() {
return programDbId;
}

public void setProgramDbId(String programDbId) {
this.programDbId = programDbId;
}

@Override
public boolean equals(java.lang.Object o) {
if (this == o) {
Expand All @@ -54,6 +65,7 @@ public String toString() {
sb.append("class ObservationVariableNewRequest {\n");
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
sb.append(" observationVariableName: ").append(toIndentedString(observationVariableName)).append("\n");
sb.append(" programDbId: ").append(toIndentedString(programDbId)).append("\n");
sb.append("}");
return sb.toString();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.brapi.test.BrAPITestServer.model.entity.pheno;

import jakarta.persistence.*;
import org.brapi.test.BrAPITestServer.model.entity.core.ProgramEntity;

import java.util.List;

Expand All @@ -13,6 +14,8 @@ public class ObservationVariableEntity extends VariableBaseEntity{
private String pui;
@OneToMany(mappedBy="observationVariable", fetch = FetchType.LAZY)
private List<ObservationEntity> observations;
@ManyToOne(fetch = FetchType.LAZY)
private ProgramEntity program;

public String getPui() {
return pui;
Expand All @@ -32,4 +35,10 @@ public List<ObservationEntity> getObservations() {
public void setObservations(List<ObservationEntity> observations) {
this.observations = observations;
}
public ProgramEntity getProgram() {
return program;
}
public void setProgram(ProgramEntity program) {
this.program = program;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
import org.brapi.test.BrAPITestServer.model.entity.core.CropEntity;
import org.brapi.test.BrAPITestServer.model.entity.core.ProgramEntity;
import org.brapi.test.BrAPITestServer.model.entity.pheno.*;
import org.brapi.test.BrAPITestServer.repository.primaryEntities.core.TraitRepository;
import org.brapi.test.BrAPITestServer.repository.primaryEntities.pheno.MethodRepository;
Expand All @@ -17,6 +18,7 @@
import org.brapi.test.BrAPITestServer.service.SearchQueryBuilder;
import org.brapi.test.BrAPITestServer.service.UpdateUtility;
import org.brapi.test.BrAPITestServer.service.core.CropService;
import org.brapi.test.BrAPITestServer.service.core.ProgramService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -47,11 +49,12 @@ public class ObservationVariableService {
private final MethodService methodService;
private final ScaleService scaleService;
private final TraitService traitService;
private final ProgramService programService;

@Autowired
public ObservationVariableService(ObservationVariableRepository observationVariableRepository,
OntologyService ontologyService, CropService cropService, MethodService methodService,
ScaleService scaleService, TraitService traitService, MethodRepository methodRepository, ScaleRepository scaleRepository, TraitRepository traitRepository) {
OntologyService ontologyService, CropService cropService, MethodService methodService,
ScaleService scaleService, TraitService traitService, MethodRepository methodRepository, ScaleRepository scaleRepository, TraitRepository traitRepository, ProgramService programService) {
this.observationVariableRepository = observationVariableRepository;
this.methodRepository = methodRepository;
this.scaleRepository = scaleRepository;
Expand All @@ -61,6 +64,7 @@ public ObservationVariableService(ObservationVariableRepository observationVaria
this.methodService = methodService;
this.scaleService = scaleService;
this.traitService = traitService;
this.programService = programService;
}

public List<ObservationVariable> findObservationVariables(String observationVariableDbId,
Expand Down Expand Up @@ -124,7 +128,8 @@ public List<ObservationVariable> findObservationVariables(ObservationVariableSea
.leftJoinFetch("method", "varMethod")
.leftJoinFetch("ontology", "varOntology")
.leftJoinFetch("scale", "varScale")
.leftJoinFetch("trait", "varTrait");
.leftJoinFetch("trait", "varTrait")
.leftJoinFetch("program", "varProgram");
if (request.getStudyDbId() != null) {
searchQuery = searchQuery.join("observations", "observation").appendList(request.getStudyDbId(),
"*observation.observationUnit.study.id");
Expand All @@ -136,7 +141,10 @@ public List<ObservationVariable> findObservationVariables(ObservationVariableSea
.appendList(request.getOntologyDbIds(), "ontology.id").appendList(request.getScaleDbIds(), "scale.id")
.appendList(request.getTraitClasses(), "trait.traitClass")
.appendList(request.getTraitDbIds(), "trait.id")
.appendEnumList(request.getDataTypes(), "scale.dataType");
.appendList(request.getTraitNames(), "trait.name")
.appendEnumList(request.getDataTypes(), "scale.dataType")
.appendList(request.getProgramDbIds(), "program.id")
.appendList(request.getProgramNames(), "program.name");

log.debug("Starting variable search");
Page<ObservationVariableEntity> page = observationVariableRepository.findAllBySearchAndPaginate(searchQuery, pageReq);
Expand Down Expand Up @@ -201,6 +209,11 @@ private ObservationVariable convertFromEntity(ObservationVariableEntity entity)
var.setObservationVariableName(entity.getName());
var.setObservationVariableDbId(entity.getId().toString());

if (entity.getProgram() != null) {
var.setProgramDbId(entity.getProgram().getId().toString());
var.setProgramName(entity.getProgram().getName());
}

return var;
}

Expand Down Expand Up @@ -240,6 +253,11 @@ private void updateEntity(ObservationVariableEntity entity, ObservationVariableN
throws BrAPIServerException {
updateBaseEntity(entity, request);
entity.setName(UpdateUtility.replaceField(request.getObservationVariableName(), entity.getName()));

if (request.getProgramDbId() != null) {
ProgramEntity programEntity = programService.getProgramEntity(request.getProgramDbId());
entity.setProgram(programEntity);
}
}

public void updateBaseEntity(VariableBaseEntity entity, VariableBaseClass request) throws BrAPIServerException {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
ALTER TABLE observation_variable
ADD COLUMN program_id UUID;
Comment thread
humsika marked this conversation as resolved.
Resolved

ALTER TABLE observation_variable
ADD CONSTRAINT observation_variable_program_fk
FOREIGN KEY (program_id)
REFERENCES public.program(id);

CREATE INDEX observation_var_program_idx ON observation_variable (program_id, id);

UPDATE observation_variable set program_id = pquery.program_id
FROM (
SELECT ov.id AS obs_var_id, p.id AS program_id
FROM observation_variable ov
JOIN variable_base_entity_external_references ovex ON ov.id = ovex.variable_base_entity_id
JOIN external_reference ex ON ex.id = ovex.external_references_id
JOIN external_reference ex2 ON ex2.external_reference_id = ex.external_reference_id
JOIN program_external_references pex ON pex.external_references_id = ex2.id
JOIN program p ON p.id = pex.program_entity_id
WHERE ex.external_reference_source = 'breedinginsight.org/programs' AND ex2.external_reference_source = 'breedinginsight.org') pquery
WHERE id = pquery.obs_var_id;

-- Assertion to ensure all observation variables are now associated with a program
DO $$
DECLARE
obs_vars_without_program_count integer;

BEGIN
SELECT COUNT(*)
INTO obs_vars_without_program_count
FROM observation_variable ov
WHERE ov.program_id IS NULL;

IF obs_vars_without_program_count <> 0 THEN
Comment thread
humsika marked this conversation as resolved.
Resolved
RAISE EXCEPTION
'V006.005 After migration, expected all observation_variable rows to have program_id set, but there are % rows with program_id not set',
obs_vars_without_program_count;
END IF;
END
$$;
Loading