From e7e46b70afc2f6a6b0acdee36ad8e0bc4e01299f Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Mon, 13 May 2024 15:12:37 -0400 Subject: [PATCH 1/4] [BI-2127] return Lat, Long, Elevation, and RTK --- .../brapi/v2/services/BrAPITrialService.java | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index caab88879..e669e46df 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -1,5 +1,9 @@ package org.breedinginsight.brapi.v2.services; +import com.github.filosganga.geogson.model.Coordinates; +import com.github.filosganga.geogson.model.Point; +import com.github.filosganga.geogson.model.positions.SinglePosition; +import com.google.gson.JsonObject; import io.micronaut.context.annotation.Property; import io.micronaut.http.MediaType; import io.micronaut.http.server.exceptions.InternalServerException; @@ -465,10 +469,19 @@ private Map createExportRow( row.put(ExperimentObservation.Columns.EXP_TYPE, experiment.getAdditionalInfo().getAsJsonObject().get(BrAPIAdditionalInfoFields.EXPERIMENT_TYPE).getAsString()); row.put(ExperimentObservation.Columns.ENV, Utilities.removeProgramKeyAndUnknownAdditionalData(study.getStudyName(), program.getKey())); row.put(ExperimentObservation.Columns.ENV_LOCATION, Utilities.removeProgramKey(study.getLocationName(), program.getKey())); + + Coordinates coordinates = extractCoordinates(ou); + row.put( ExperimentObservation.Columns.LAT, coordinates==null? null : String.valueOf(coordinates.getLat()) ); + row.put( ExperimentObservation.Columns.LONG, coordinates==null? null : String.valueOf(coordinates.getLon()) ); + row.put( ExperimentObservation.Columns.ELEVATION, coordinates==null? null : String.valueOf(coordinates.getAlt()) ); + BrAPISeason season = seasonDAO.getSeasonById(study.getSeasons().get(0), program.getId()); row.put(ExperimentObservation.Columns.ENV_YEAR, season.getYear()); row.put(ExperimentObservation.Columns.EXP_UNIT_ID, Utilities.removeProgramKeyAndUnknownAdditionalData(ou.getObservationUnitName(), program.getKey())); + JsonObject additionalInfo = ou.getAdditionalInfo(); + row.put(ExperimentObservation.Columns.RTK, additionalInfo.get(BrAPIAdditionalInfoFields.RTK).getAsString()); + // get replicate number Optional repLevel = ou.getObservationUnitPosition() .getObservationLevelRelationships().stream() @@ -484,9 +497,12 @@ private Map createExportRow( .findFirst(); blockLevel.ifPresent(brAPIObservationUnitLevelRelationship -> row.put(ExperimentObservation.Columns.BLOCK_NUM, Integer.parseInt(brAPIObservationUnitLevelRelationship.getLevelCode()))); - if (ou.getObservationUnitPosition() != null && ou.getObservationUnitPosition().getPositionCoordinateX() != null && - ou.getObservationUnitPosition().getPositionCoordinateY() != null) { + if (ou.getObservationUnitPosition() != null && ou.getObservationUnitPosition().getPositionCoordinateX() != null + ) { row.put(ExperimentObservation.Columns.ROW, ou.getObservationUnitPosition().getPositionCoordinateX()); + } + if (ou.getObservationUnitPosition() != null && + ou.getObservationUnitPosition().getPositionCoordinateY() != null) { row.put(ExperimentObservation.Columns.COLUMN, ou.getObservationUnitPosition().getPositionCoordinateY()); } if (ou.getTreatments() != null && !ou.getTreatments().isEmpty()) { @@ -499,7 +515,22 @@ private Map createExportRow( return row; } - + private Coordinates extractCoordinates(BrAPIObservationUnit ou){ + Coordinates coordinates = null; + if ( ou.getObservationUnitPosition()!=null + && ou.getObservationUnitPosition().getGeoCoordinates()!=null + && ou.getObservationUnitPosition().getGeoCoordinates().getGeometry()!=null + && ou.getObservationUnitPosition().getGeoCoordinates().getGeometry().positions()!=null + ) + { + Object o = ou.getObservationUnitPosition().getGeoCoordinates().getGeometry().positions(); + if (o instanceof SinglePosition){ + SinglePosition sp = (SinglePosition)o; + coordinates= sp.coordinates(); + } + } + return coordinates; + } private void addObsVarColumns( List columns, From 1a909b6131f6de47b60e177da515e4336d33b904 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Mon, 13 May 2024 16:03:10 -0400 Subject: [PATCH 2/4] [BI-2127] protect against nulls --- .../brapi/v2/services/BrAPITrialService.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index e669e46df..381514182 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -1,7 +1,6 @@ package org.breedinginsight.brapi.v2.services; import com.github.filosganga.geogson.model.Coordinates; -import com.github.filosganga.geogson.model.Point; import com.github.filosganga.geogson.model.positions.SinglePosition; import com.google.gson.JsonObject; import io.micronaut.context.annotation.Property; @@ -470,18 +469,23 @@ private Map createExportRow( row.put(ExperimentObservation.Columns.ENV, Utilities.removeProgramKeyAndUnknownAdditionalData(study.getStudyName(), program.getKey())); row.put(ExperimentObservation.Columns.ENV_LOCATION, Utilities.removeProgramKey(study.getLocationName(), program.getKey())); + // Lat, Long, Elevation Coordinates coordinates = extractCoordinates(ou); row.put( ExperimentObservation.Columns.LAT, coordinates==null? null : String.valueOf(coordinates.getLat()) ); row.put( ExperimentObservation.Columns.LONG, coordinates==null? null : String.valueOf(coordinates.getLon()) ); row.put( ExperimentObservation.Columns.ELEVATION, coordinates==null? null : String.valueOf(coordinates.getAlt()) ); + // RTK + JsonObject additionalInfo = ou.getAdditionalInfo(); + String rtk = ( additionalInfo==null || additionalInfo.get(BrAPIAdditionalInfoFields.RTK) ==null ) + ? null + : additionalInfo.get(BrAPIAdditionalInfoFields.RTK).getAsString(); + row.put(ExperimentObservation.Columns.RTK, rtk); + BrAPISeason season = seasonDAO.getSeasonById(study.getSeasons().get(0), program.getId()); row.put(ExperimentObservation.Columns.ENV_YEAR, season.getYear()); row.put(ExperimentObservation.Columns.EXP_UNIT_ID, Utilities.removeProgramKeyAndUnknownAdditionalData(ou.getObservationUnitName(), program.getKey())); - JsonObject additionalInfo = ou.getAdditionalInfo(); - row.put(ExperimentObservation.Columns.RTK, additionalInfo.get(BrAPIAdditionalInfoFields.RTK).getAsString()); - // get replicate number Optional repLevel = ou.getObservationUnitPosition() .getObservationLevelRelationships().stream() @@ -497,14 +501,13 @@ private Map createExportRow( .findFirst(); blockLevel.ifPresent(brAPIObservationUnitLevelRelationship -> row.put(ExperimentObservation.Columns.BLOCK_NUM, Integer.parseInt(brAPIObservationUnitLevelRelationship.getLevelCode()))); - if (ou.getObservationUnitPosition() != null && ou.getObservationUnitPosition().getPositionCoordinateX() != null - ) { + + //Row and Column + if ( ou.getObservationUnitPosition() != null ) { row.put(ExperimentObservation.Columns.ROW, ou.getObservationUnitPosition().getPositionCoordinateX()); - } - if (ou.getObservationUnitPosition() != null && - ou.getObservationUnitPosition().getPositionCoordinateY() != null) { row.put(ExperimentObservation.Columns.COLUMN, ou.getObservationUnitPosition().getPositionCoordinateY()); } + if (ou.getTreatments() != null && !ou.getTreatments().isEmpty()) { row.put(ExperimentObservation.Columns.TREATMENT_FACTORS, ou.getTreatments().get(0).getFactor()); } else { From 5a2100cbe6272636597fe67e7e175b8bf342113d Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Tue, 14 May 2024 10:24:28 -0400 Subject: [PATCH 3/4] [BI-2127] protect against a double beign NaN (not yet set) before converting to a string --- .../brapi/v2/services/BrAPITrialService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 381514182..7c18824e7 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -471,9 +471,9 @@ private Map createExportRow( // Lat, Long, Elevation Coordinates coordinates = extractCoordinates(ou); - row.put( ExperimentObservation.Columns.LAT, coordinates==null? null : String.valueOf(coordinates.getLat()) ); - row.put( ExperimentObservation.Columns.LONG, coordinates==null? null : String.valueOf(coordinates.getLon()) ); - row.put( ExperimentObservation.Columns.ELEVATION, coordinates==null? null : String.valueOf(coordinates.getAlt()) ); + row.put( ExperimentObservation.Columns.LAT, coordinates==null? null : doubleToString(coordinates.getLat()) ); + row.put( ExperimentObservation.Columns.LONG, coordinates==null? null : doubleToString(coordinates.getLon()) ); + row.put( ExperimentObservation.Columns.ELEVATION, coordinates==null? null : doubleToString(coordinates.getAlt()) ); // RTK JsonObject additionalInfo = ou.getAdditionalInfo(); @@ -518,6 +518,9 @@ private Map createExportRow( return row; } + private String doubleToString(double val){ + return Double.isNaN(val) ? null : String.valueOf( val ); + } private Coordinates extractCoordinates(BrAPIObservationUnit ou){ Coordinates coordinates = null; if ( ou.getObservationUnitPosition()!=null From 2e41d4c75b49e7988a660d51495e21a02cd5fd81 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Fri, 17 May 2024 16:26:40 -0400 Subject: [PATCH 4/4] [BI-2127] made code more readable --- .../brapi/v2/services/BrAPITrialService.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java index 7c18824e7..dd9bde018 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -471,9 +471,15 @@ private Map createExportRow( // Lat, Long, Elevation Coordinates coordinates = extractCoordinates(ou); - row.put( ExperimentObservation.Columns.LAT, coordinates==null? null : doubleToString(coordinates.getLat()) ); - row.put( ExperimentObservation.Columns.LONG, coordinates==null? null : doubleToString(coordinates.getLon()) ); - row.put( ExperimentObservation.Columns.ELEVATION, coordinates==null? null : doubleToString(coordinates.getAlt()) ); + Optional.ofNullable(coordinates) + .map(c -> doubleToString(c.getLat())) + .ifPresent(lat -> row.put(ExperimentObservation.Columns.LAT, lat)); + Optional.ofNullable(coordinates) + .map(c -> doubleToString(c.getLon())) + .ifPresent(lon -> row.put(ExperimentObservation.Columns.LONG, lon)); + Optional.ofNullable(coordinates) + .map(c -> doubleToString(c.getAlt())) + .ifPresent(elevation -> row.put(ExperimentObservation.Columns.ELEVATION, elevation)); // RTK JsonObject additionalInfo = ou.getAdditionalInfo();