From ac8d84497eb8dde5eee7c504684346973cfd9953 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Tue, 28 Nov 2023 14:28:27 -0500 Subject: [PATCH 1/2] add check for multiple exp titles in import --- .../importer/services/processors/ExperimentProcessor.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 426c78293..a19cae999 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 @@ -85,6 +85,7 @@ public class ExperimentProcessor implements Processor { "If you’re trying to add these units to the experiment, please create a new environment" + " with all appropriate experiment units (NOTE: this will generate new Observation Unit Ids " + "for each experiment unit)."; + private static final String MULTIPLE_EXP_TITLES = "File contains more than one Experiment Title"; private static final String MIDNIGHT = "T00:00:00-00:00"; private static final String TIMESTAMP_PREFIX = "TS:"; private static final String TIMESTAMP_REGEX = "^"+TIMESTAMP_PREFIX+"\\s*"; @@ -552,7 +553,6 @@ private ValidationErrors validateFields(List importRows, Validation for (int rowNum = 0; rowNum < importRows.size(); rowNum++) { ExperimentObservation importRow = (ExperimentObservation) importRows.get(rowNum); PendingImport mappedImportRow = mappedBrAPIImport.get(rowNum); - if (StringUtils.isNotBlank(importRow.getGid())) { // if GID is blank, don't bother to check if it is valid. validateGermplasm(importRow, validationErrors, rowNum, mappedImportRow.getGermplasm()); } @@ -981,10 +981,12 @@ private PendingImportObject fetchOrCreateLocationPIO(Experiment return pio; } - private PendingImportObject fetchOrCreateTrialPIO(Program program, User user, boolean commit, ExperimentObservation importRow, Supplier expNextVal) { + private PendingImportObject fetchOrCreateTrialPIO(Program program, User user, boolean commit, ExperimentObservation importRow, Supplier expNextVal) throws UnprocessableEntityException { PendingImportObject pio; if (trialByNameNoScope.containsKey(importRow.getExpTitle())) { pio = trialByNameNoScope.get(importRow.getExpTitle()); + } else if (!trialByNameNoScope.isEmpty()) { + throw new UnprocessableEntityException(MULTIPLE_EXP_TITLES); } else { UUID id = UUID.randomUUID(); String expSeqValue = null; From a433556d37f6eb4ad6875f31a5a3e8c8d585d7f8 Mon Sep 17 00:00:00 2001 From: dmeidlin <14339308+dmeidlin@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:36:51 -0500 Subject: [PATCH 2/2] handle exception in exp processor public method --- .../importer/services/processors/ExperimentProcessor.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 a19cae999..e5ec4a5c5 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 @@ -59,6 +59,7 @@ import org.breedinginsight.services.ProgramLocationService; import org.breedinginsight.services.exceptions.DoesNotExistException; import org.breedinginsight.services.exceptions.MissingRequiredInfoException; +import org.breedinginsight.services.exceptions.UnprocessableEntityException; import org.breedinginsight.services.exceptions.ValidatorException; import org.breedinginsight.utilities.Utilities; import org.jooq.DSLContext; @@ -477,7 +478,12 @@ private void initNewBrapiData(List importRows, List> phen for (int rowNum = 0; rowNum < importRows.size(); rowNum++) { ExperimentObservation importRow = (ExperimentObservation) importRows.get(rowNum); - PendingImportObject trialPIO = fetchOrCreateTrialPIO(program, user, commit, importRow, expNextVal); + PendingImportObject trialPIO = null; + try { + trialPIO = fetchOrCreateTrialPIO(program, user, commit, importRow, expNextVal); + } catch (UnprocessableEntityException e) { + throw new HttpStatusException(HttpStatus.UNPROCESSABLE_ENTITY, e.getMessage()); + } String expSeqValue = null; if (commit) {