diff --git a/src/main/java/org/breedinginsight/brapps/importer/services/FileMappingUtil.java b/src/main/java/org/breedinginsight/brapps/importer/services/FileMappingUtil.java index e26f375c5..e603a7d21 100644 --- a/src/main/java/org/breedinginsight/brapps/importer/services/FileMappingUtil.java +++ b/src/main/java/org/breedinginsight/brapps/importer/services/FileMappingUtil.java @@ -18,6 +18,7 @@ package org.breedinginsight.brapps.importer.services; import io.reactivex.functions.Function; +import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; import org.breedinginsight.brapps.importer.model.config.MappedImportRelation; @@ -76,7 +77,7 @@ public List> findFileRelationships(Table data, List List sortByField(List sortedFields, List unsortedItems, Function fieldGetter) { - HashMap sortOrder = new HashMap<>(); + CaseInsensitiveMap sortOrder = new CaseInsensitiveMap<>(); for (int i = 0; i < sortedFields.size(); i++) { sortOrder.put(sortedFields.get(i), i); } 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 c9e7f5aa0..66bc7db7e 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 @@ -24,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections4.map.CaseInsensitiveMap; import org.brapi.client.v2.model.exceptions.ApiException; import org.brapi.v2.model.BrAPIExternalReference; import org.brapi.v2.model.core.*; @@ -41,7 +42,6 @@ import org.breedinginsight.brapi.v2.dao.BrAPIGermplasmDAO; import org.breedinginsight.brapps.importer.daos.*; import org.breedinginsight.brapps.importer.model.ImportUpload; -import org.breedinginsight.brapps.importer.model.base.AdditionalInfo; import org.breedinginsight.brapps.importer.model.imports.BrAPIImport; import org.breedinginsight.brapps.importer.model.imports.PendingImport; import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; @@ -70,12 +70,9 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; -import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; -import static org.breedinginsight.brapps.importer.services.FileMappingUtil.EXPERIMENT_TEMPLATE_NAME; - @Slf4j @Prototype public class ExperimentProcessor implements Processor { @@ -444,10 +441,11 @@ private List verifyTraits(UUID programId, List> phenotypeCols, private List fetchFileTraits(UUID programId, Collection varNames) { try { + Collection upperCaseVarNames = varNames.stream().map(String::toUpperCase).collect(Collectors.toList()); List traits = ontologyService.getTraitsByProgramId(programId, true); // filter out just traits specified in file return traits.stream() - .filter(e -> varNames.contains(e.getObservationVariableName())) + .filter(e -> upperCaseVarNames.contains(e.getObservationVariableName().toUpperCase())) .collect(Collectors.toList()); } catch (DoesNotExistException e) { log.error(e.getMessage(), e); @@ -547,8 +545,10 @@ private ValidationErrors validateFields(List importRows, Validation List> phenotypeCols, boolean commit) throws MissingRequiredInfoException, ApiException { //fetching any existing observations for any OUs in the import Map existingObsByObsHash = fetchExistingObservations(referencedTraits, program); - Map colVarMap = referencedTraits.stream().collect(Collectors.toMap(Trait::getObservationVariableName, Function.identity())); - + CaseInsensitiveMap colVarMap = new CaseInsensitiveMap<>(); + for ( Trait trait: referencedTraits) { + colVarMap.put(trait.getObservationVariableName(),trait); + } Set uniqueStudyAndObsUnit = new HashSet<>(); for (int rowNum = 0; rowNum < importRows.size(); rowNum++) { ExperimentObservation importRow = (ExperimentObservation) importRows.get(rowNum); @@ -619,7 +619,7 @@ private Map fetchExistingObservations(List refe .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - private void validateObservations(ValidationErrors validationErrors, int rowNum, ExperimentObservation importRow, List> phenotypeCols, Map colVarMap, Map existingObservations) { + private void validateObservations(ValidationErrors validationErrors, int rowNum, ExperimentObservation importRow, List> phenotypeCols, CaseInsensitiveMap colVarMap, Map existingObservations) { phenotypeCols.forEach(phenoCol -> { var importHash = getImportObservationHash(importRow, phenoCol.name()); if(existingObservations.containsKey(importHash) && StringUtils.isNotBlank(phenoCol.getString(rowNum)) && !existingObservations.get(importHash).getValue().equals(phenoCol.getString(rowNum))) { @@ -969,8 +969,10 @@ private void updateObservationDependencyValues(Program program) { // Update ObservationVariable DbIds List traits = getTraitList(program); - Map traitMap = traits.stream().collect(Collectors.toMap(TraitEntity::getObservationVariableName, Function.identity())); - + CaseInsensitiveMap traitMap = new CaseInsensitiveMap<>(); + for ( Trait trait: traits) { + traitMap.put(trait.getObservationVariableName(),trait); + } for (PendingImportObject observation : this.observationByHash.values()) { String observationVariableName = observation.getBrAPIObject().getObservationVariableName(); if (observationVariableName != null && traitMap.containsKey(observationVariableName)) {