From e2ba623300d76c463dcebdf3bd1c5eed3b75d931 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Wed, 23 Oct 2024 11:28:21 -0400 Subject: [PATCH 1/4] [BI-2328] prevent NullPointer Exeption when timestamp is blank --- .../factory/data/OverwrittenData.java | 3 ++- .../middleware/process/ImportTableProcess.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/factory/data/OverwrittenData.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/factory/data/OverwrittenData.java index 35fceddb3..54a1afe06 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/factory/data/OverwrittenData.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/factory/data/OverwrittenData.java @@ -24,6 +24,7 @@ import com.google.gson.JsonObject; import io.micronaut.context.annotation.Prototype; import io.micronaut.http.HttpStatus; +import org.apache.commons.lang3.StringUtils; import org.brapi.v2.model.pheno.BrAPIObservation; import org.breedinginsight.api.model.v1.response.ValidationError; import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields; @@ -181,7 +182,7 @@ private boolean isValueMatched() { } private boolean isTimestampMatched() { - if (timestamp == null) { + if (StringUtils.isBlank(timestamp)) { return observation.getObservationTimeStamp() == null; } else { return observationService.parseDateTime(timestamp).equals(observation.getObservationTimeStamp()); diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java index 0013f0458..20d6d8f9d 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java @@ -62,6 +62,7 @@ import tech.tablesaw.columns.Column; import javax.inject.Inject; +import java.time.OffsetDateTime; import java.util.*; import java.util.stream.Collectors; @@ -265,7 +266,9 @@ public AppendOverwriteMiddlewareContext process(AppendOverwriteMiddlewareContext BrAPIObservation observation = gson.fromJson(gson.toJson(observationByObsHash.get(observationHash)), BrAPIObservation.class); // Is there a change to the prior data? - if ((!cellData.isBlank() && !cellData.equals(observation.getValue())) || (cell.timestamp != null && !observationService.parseDateTime(cell.timestamp).equals(observation.getObservationTimeStamp()))) { + if ( + isChanged(cellData, observation, cell.timestamp) + ) { // Is prior data protected? /** @@ -380,4 +383,14 @@ public AppendOverwriteMiddlewareContext process(AppendOverwriteMiddlewareContext return this.compensate(context); } } + + private boolean isChanged(String cellData, BrAPIObservation observation, String newTimestamp) { + if (!cellData.isBlank() && !cellData.equals(observation.getValue())){ + return true; + } + if (StringUtils.isBlank(newTimestamp)) { + return (observation.getObservationTimeStamp()!=null); + } + return !observationService.parseDateTime(newTimestamp).equals(observation.getObservationTimeStamp()); + } } From 7630c0203f9aa445ba1080e4cd08fd0868e4e495 Mon Sep 17 00:00:00 2001 From: David Randolph Phillips Date: Wed, 23 Oct 2024 16:08:28 -0400 Subject: [PATCH 2/4] [BI-2359] removed unneeded import statement --- .../appendoverwrite/middleware/process/ImportTableProcess.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java index 20d6d8f9d..6863cd561 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/appendoverwrite/middleware/process/ImportTableProcess.java @@ -62,7 +62,6 @@ import tech.tablesaw.columns.Column; import javax.inject.Inject; -import java.time.OffsetDateTime; import java.util.*; import java.util.stream.Collectors; From bd9f50d29935f4d536510d403578e66c13b6c175 Mon Sep 17 00:00:00 2001 From: rob-ouser-bi Date: Tue, 29 Oct 2024 14:40:05 +0000 Subject: [PATCH 3/4] [autocommit] bumping build number --- src/main/resources/version.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/version.properties b/src/main/resources/version.properties index 3171510dc..f2a42027e 100644 --- a/src/main/resources/version.properties +++ b/src/main/resources/version.properties @@ -14,5 +14,5 @@ # limitations under the License. # -version=v1.0.0+848 -versionInfo=https://github.com/Breeding-Insight/bi-api/commit/b42343e4a345bace6ae4bc62623a43e015a176f4 +version=v1.0.0+850 +versionInfo=https://github.com/Breeding-Insight/bi-api/commit/bae27e0403f883a499db0fc1d57740830e3ca594 From 3ed7b03ce1666f5bf9ca502a2e749f9292d05a34 Mon Sep 17 00:00:00 2001 From: mlm483 <128052931+mlm483@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:36:39 -0400 Subject: [PATCH 4/4] [BI-2354] - fixed case sensitivity bug --- .../services/processors/ExperimentProcessor.java | 2 +- .../experiment/services/ExperimentValidateService.java | 3 ++- .../java/org/breedinginsight/utilities/Utilities.java | 9 +++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java index a5fedaf84..34030b795 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/ExperimentProcessor.java @@ -525,7 +525,7 @@ private List verifyTraits(UUID programId, List> phenotypeCols, .map(TraitEntity::getObservationVariableName) .collect(Collectors.toSet()); List differences = varNames.stream() - .filter(var -> !returnedVarNames.contains(var)) + .filter(var -> !Utilities.containsCaseInsensitive(var, returnedVarNames)) .collect(Collectors.toList()); //TODO convert this to a ValidationError throw new HttpStatusException(HttpStatus.UNPROCESSABLE_ENTITY, diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/services/ExperimentValidateService.java b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/services/ExperimentValidateService.java index d12ff2509..af143863b 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/services/ExperimentValidateService.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/processors/experiment/services/ExperimentValidateService.java @@ -27,6 +27,7 @@ import org.breedinginsight.model.Trait; import org.breedinginsight.services.OntologyService; import org.breedinginsight.services.exceptions.DoesNotExistException; +import org.breedinginsight.utilities.Utilities; import tech.tablesaw.columns.Column; import javax.inject.Inject; @@ -78,7 +79,7 @@ public List verifyTraits(UUID programId, DynamicColumnParseResult cols) { .map(TraitEntity::getObservationVariableName) .collect(Collectors.toSet()); List differences = varNames.stream() - .filter(var -> !returnedVarNames.contains(var)) + .filter(var -> !Utilities.containsCaseInsensitive(var, returnedVarNames)) .collect(Collectors.toList()); //TODO convert this to a ValidationError throw new HttpStatusException(HttpStatus.UNPROCESSABLE_ENTITY, diff --git a/src/main/java/org/breedinginsight/utilities/Utilities.java b/src/main/java/org/breedinginsight/utilities/Utilities.java index 92b46623e..20f3254d6 100644 --- a/src/main/java/org/breedinginsight/utilities/Utilities.java +++ b/src/main/java/org/breedinginsight/utilities/Utilities.java @@ -27,10 +27,7 @@ import java.lang.reflect.Field; import java.sql.ResultSet; import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.function.Function; import java.util.regex.Pattern; @@ -48,10 +45,10 @@ public static Optional findInList(List checkList, T objectToCheck, Fun * Case insensitive search for string in string list * * @param target - string to search for - * @param list - list of strings to search in + * @param list - collection of strings to search in * @return true if case insensitive match, false otherwise */ - public static boolean containsCaseInsensitive(String target, List list){ + public static boolean containsCaseInsensitive(String target, Collection list){ return list.stream().anyMatch(x -> x.equalsIgnoreCase(target)); }