From f3ccb5019a568a4aef9e546164568d2f75defc81 Mon Sep 17 00:00:00 2001 From: Nick Palladino Date: Tue, 29 Mar 2022 16:41:07 -0400 Subject: [PATCH 1/3] Add program keys for creation --- src/main/java/org/breedinginsight/daos/TraitDAO.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/breedinginsight/daos/TraitDAO.java b/src/main/java/org/breedinginsight/daos/TraitDAO.java index fd73a4f88..0ed21b680 100644 --- a/src/main/java/org/breedinginsight/daos/TraitDAO.java +++ b/src/main/java/org/breedinginsight/daos/TraitDAO.java @@ -264,7 +264,7 @@ public List createTraitsBrAPI(List traits, User actingUser, Progra .referenceID(trait.getMethod().getId().toString()) .referenceSource(referenceSource); BrAPIMethod brApiMethod = new BrAPIMethod() - .methodName(String.format("%s %s", trait.getMethod().getDescription(), trait.getMethod().getMethodClass())) + .methodName(String.format("%s %s [%s]", trait.getMethod().getDescription(), trait.getMethod().getMethodClass(), program.getKey())) .externalReferences(List.of(methodReference)) .methodClass(trait.getMethod().getMethodClass()) .description(trait.getMethod().getDescription()) @@ -280,7 +280,7 @@ public List createTraitsBrAPI(List traits, User actingUser, Progra .max(trait.getScale().getValidValueMax()) .min(trait.getScale().getValidValueMin()); BrAPIScale brApiScale = new BrAPIScale() - .scaleName(trait.getScale().getScaleName()) + .scaleName(String.format("%s [%s]", trait.getScale().getScaleName(), program.getKey())) .externalReferences(List.of(scaleReference)) .dataType(brApiTraitDataType) .decimalPlaces(trait.getScale().getDecimalPlaces()) @@ -291,7 +291,7 @@ public List createTraitsBrAPI(List traits, User actingUser, Progra .referenceID(trait.getId().toString()) .referenceSource(referenceSource); BrAPITrait brApiTrait = new BrAPITrait() - .traitName(String.format("%s %s", trait.getEntity(), trait.getAttribute())) + .traitName(String.format("%s %s [%s]", trait.getEntity(), trait.getAttribute(), program.getKey())) .traitDescription(trait.getTraitDescription()) .synonyms(trait.getSynonyms()) .status("active") @@ -309,7 +309,7 @@ public List createTraitsBrAPI(List traits, User actingUser, Progra .scale(brApiScale) .trait(brApiTrait) .externalReferences(List.of(variableReference)) - .observationVariableName(trait.getObservationVariableName()) + .observationVariableName(String.format("%s [%s]", trait.getObservationVariableName(), program.getKey())) .status("active") .language("english") .scientist(actingUser.getName()) From 523d7f1d74829560fd243a28fd9214e6968653d0 Mon Sep 17 00:00:00 2001 From: Nick Palladino Date: Tue, 29 Mar 2022 16:57:52 -0400 Subject: [PATCH 2/3] Add program keys for update --- src/main/java/org/breedinginsight/daos/TraitDAO.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/breedinginsight/daos/TraitDAO.java b/src/main/java/org/breedinginsight/daos/TraitDAO.java index 0ed21b680..d7fdc2a8e 100644 --- a/src/main/java/org/breedinginsight/daos/TraitDAO.java +++ b/src/main/java/org/breedinginsight/daos/TraitDAO.java @@ -384,14 +384,14 @@ public Trait updateTraitBrAPI(Trait trait, Program program) { BrAPIObservationVariable existingVariable = getBrAPIVariable(variablesAPI, trait.getId()); // Change method - existingVariable.getMethod().setMethodName(String.format("%s %s", trait.getMethod().getDescription(), trait.getMethod().getMethodClass())); + existingVariable.getMethod().setMethodName(String.format("%s %s [%s]", trait.getMethod().getDescription(), trait.getMethod().getMethodClass(), program.getKey())); existingVariable.getMethod().setMethodClass(trait.getMethod().getMethodClass()); existingVariable.getMethod().setDescription(trait.getMethod().getDescription()); existingVariable.getMethod().setFormula(trait.getMethod().getFormula()); // Change scale BrAPITraitDataType brApiTraitDataType = BrAPITraitDataType.valueOf(trait.getScale().getDataType().toString()); - existingVariable.getScale().setScaleName(trait.getScale().getScaleName()); + existingVariable.getScale().setScaleName(String.format("%s [%s]", trait.getScale().getScaleName(), program.getKey())); existingVariable.getScale().setDataType(brApiTraitDataType); existingVariable.getScale().setDecimalPlaces(trait.getScale().getDecimalPlaces()); BrAPIScaleValidValues brApiScaleValidValues = new BrAPIScaleValidValues() @@ -401,7 +401,7 @@ public Trait updateTraitBrAPI(Trait trait, Program program) { existingVariable.getScale().setValidValues(brApiScaleValidValues); // Change trait - existingVariable.getTrait().setTraitName(String.format("%s %s", trait.getEntity(), trait.getAttribute())); + existingVariable.getTrait().setTraitName(String.format("%s %s [%s]", trait.getEntity(), trait.getAttribute(), program.getKey())); existingVariable.getTrait().setTraitDescription(trait.getTraitDescription()); existingVariable.getTrait().setSynonyms(trait.getSynonyms()); existingVariable.getTrait().setEntity(trait.getProgramObservationLevel().getName()); @@ -410,7 +410,7 @@ public Trait updateTraitBrAPI(Trait trait, Program program) { existingVariable.getTrait().setAttribute(trait.getAttribute()); // Change variable - existingVariable.setObservationVariableName(trait.getObservationVariableName()); + existingVariable.setObservationVariableName(String.format("%s [%s]", trait.getObservationVariableName(), program.getKey())); existingVariable.setDefaultValue(trait.getDefaultValue()); existingVariable.setSynonyms(trait.getSynonyms()); if (trait.getActive() == null || trait.getActive()){ From 921ddb022df2b21d3bdf7f7afa3edc37f77b1bab Mon Sep 17 00:00:00 2001 From: Nick Palladino Date: Mon, 11 Apr 2022 15:11:05 -0400 Subject: [PATCH 3/3] Added test for brapi values --- .../TraitControllerIntegrationTest.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java index 34ff17616..300a5eee1 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java @@ -32,6 +32,7 @@ import lombok.SneakyThrows; import org.brapi.client.v2.ApiResponse; import org.brapi.client.v2.BrAPIClient; +import org.brapi.client.v2.model.exceptions.ApiException; import org.brapi.client.v2.model.queryParams.phenotype.VariableQueryParams; import org.brapi.client.v2.modules.phenotype.ObservationVariablesApi; import org.brapi.client.v2.modules.phenotype.ObservationsApi; @@ -41,6 +42,7 @@ import org.brapi.v2.model.pheno.response.BrAPIObservationLevelListResponse; import org.brapi.v2.model.pheno.response.BrAPIObservationListResponse; import org.brapi.v2.model.pheno.response.BrAPIObservationVariableListResponse; +import org.brapi.v2.model.pheno.response.BrAPIObservationVariableListResponseResult; import org.breedinginsight.BrAPITest; import org.breedinginsight.TestUtils; import org.breedinginsight.api.model.v1.request.ProgramRequest; @@ -360,6 +362,116 @@ public void postTraitsMultiple() { validTraits = traits; } + @Test + @SneakyThrows + @Order(4) + public void checkBrapiValues() { + + Trait trait1 = new Trait(); + trait1.setTraitDescription("trait 1 description"); + trait1.setEntity("entity1"); + trait1.setObservationVariableName("Test Brapi"); + trait1.setProgramObservationLevel(ProgramObservationLevel.builder().name("Plant").build()); + Scale scale1 = new Scale(); + scale1.setScaleName("Test Scale"); + scale1.setDataType(DataType.TEXT); + Method method1 = new Method(); + trait1.setScale(scale1); + trait1.setMethod(method1); + + // Set the brapi properties + setBrAPIProperties(trait1); + + // set the synonyms + trait1.setSynonyms(List.of("Test Trait", "test1", "test2")); + + // Set the tags + trait1.setTags(List.of("leaf trait")); + + List traits = List.of(trait1); + + // Call endpoint + Flowable> call = client.exchange( + POST("/programs/" + validProgram.getId() + "/traits", traits) + .contentType(MediaType.APPLICATION_JSON) + .cookie(new NettyCookie("phylo-token", "test-registered-user")), String.class + ); + HttpResponse res = call.blockingFirst(); + assertEquals(HttpStatus.OK, res.getStatus()); + + JsonObject result = JsonParser.parseString(res.getBody().get()).getAsJsonObject().getAsJsonObject("result"); + JsonArray data = result.getAsJsonArray("data"); + + for (JsonElement traitJson: data) { + JsonObject trait = (JsonObject) traitJson; + String traitName = trait.get("observationVariableName").getAsString(); + if (traitName.equals(trait1.getObservationVariableName())) { + trait1.setId(UUID.fromString(trait.get("id").getAsString())); + } + } + + String validProgramKey = validProgram.getKey(); + BrAPIObservationVariable variable = getBrapiVariable(trait1.getObservationVariableName(), "Test Program"); + + assertEquals(String.format("%s [%s]", trait1.getObservationVariableName(), validProgramKey), + variable.getObservationVariableName(), "Unexpected observation variable name"); + String methodName = String.format("%s %s", trait1.getMethod().getDescription(), trait1.getMethod().getMethodClass()); + assertEquals(String.format("%s [%s]", methodName, validProgramKey), + variable.getMethod().getMethodName(), "Unexpected method name"); + assertEquals(String.format("%s [%s]", trait1.getScale().getScaleName(), validProgramKey), + variable.getScale().getScaleName(), "Unexpected scale name"); + String traitName = String.format("%s %s", trait1.getEntity(), trait1.getAttribute()); + assertEquals(String.format("%s [%s]", traitName, validProgramKey), + variable.getTrait().getTraitName(), "Unexpected trait name"); + + // update + trait1.getMethod().setMethodClass("Observation"); + trait1.getMethod().setDescription("Updated description"); + trait1.setEntity("Updated entity"); + trait1.setAttribute("Updated attribute"); + trait1.setObservationVariableName("Updated name"); + trait1.getScale().setScaleName("Updated Scale"); + + Flowable> call2 = client.exchange( + PUT("/programs/" + validProgram.getId() + "/traits", traits) + .contentType(MediaType.APPLICATION_JSON) + .cookie(new NettyCookie("phylo-token", "test-registered-user")), String.class + ); + HttpResponse response2 = call2.blockingFirst(); + assertEquals(HttpStatus.OK, response2.getStatus()); + + variable = getBrapiVariable(trait1.getObservationVariableName(), "Test Program"); + + assertEquals(String.format("%s [%s]", trait1.getObservationVariableName(), validProgramKey), + variable.getObservationVariableName(), "Unexpected observation variable name"); + methodName = String.format("%s %s", trait1.getMethod().getDescription(), trait1.getMethod().getMethodClass()); + assertEquals(String.format("%s [%s]", methodName, validProgramKey), + variable.getMethod().getMethodName(), "Unexpected method name"); + assertEquals(String.format("%s [%s]", trait1.getScale().getScaleName(), validProgramKey), + variable.getScale().getScaleName(), "Unexpected scale name"); + traitName = String.format("%s %s", trait1.getEntity(), trait1.getAttribute()); + assertEquals(String.format("%s [%s]", traitName, validProgramKey), + variable.getTrait().getTraitName(), "Unexpected trait name"); + + } + + private BrAPIObservationVariable getBrapiVariable(String variableName, String programName) throws ApiException { + BrAPIClient client2 = new BrAPIClient(getProperties().get("brapi.server.pheno-url")); + ObservationVariablesApi variablesApi = new ObservationVariablesApi(client2); + VariableQueryParams queryParams = new VariableQueryParams(); + ApiResponse response = variablesApi.variablesGet(queryParams); + + BrAPIObservationVariableListResponse variableResponse = response.getBody(); + BrAPIObservationVariableListResponseResult result = variableResponse.getResult(); + List variables = result.getData(); + + Optional searchResult = variables.stream().filter( + variable -> variable.getObservationVariableName().contains(variableName) + && variable.getInstitution().equals(programName)).findFirst(); + + return searchResult.orElseThrow(); + } + @Test @SneakyThrows @Order(4)