diff --git a/pom.xml b/pom.xml index acf4e3071..1bfde3251 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ 4.1.2 1.6.2 4.3.1 - 0.42.0 + 1.0.0-SNAPSHOT 1.4.1 1.10.3 @@ -160,6 +160,13 @@ false + + github-tablesaw + Tablesaw github repository + https://maven.pkg.github.com/Breeding-Insight/tablesaw + true + true + diff --git a/settings.xml b/settings.xml index c3867921d..b5281bb65 100644 --- a/settings.xml +++ b/settings.xml @@ -56,6 +56,13 @@ true true + + github-tablesaw + Tablesaw github repository + https://maven.pkg.github.com/Breeding-Insight/tablesaw + true + true + @@ -71,5 +78,10 @@ ${GITHUB_ACTOR} ${GITHUB_TOKEN} + + github-tablesaw + ${GITHUB_ACTOR} + ${GITHUB_TOKEN} + 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 98c07a23e..caab88879 100644 --- a/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java +++ b/src/main/java/org/breedinginsight/brapi/v2/services/BrAPITrialService.java @@ -390,8 +390,8 @@ private void addObsVarDataToRow( Trait var, Program program) { String varName = Utilities.removeProgramKey(obs.getObservationVariableName(), program.getKey()); - if (var.getScale().getDataType().equals(DataType.NUMERICAL) || - var.getScale().getDataType().equals(DataType.DURATION)) { + if (!(obs.getValue().equalsIgnoreCase("NA")) && (var.getScale().getDataType().equals(DataType.NUMERICAL) || + var.getScale().getDataType().equals(DataType.DURATION))) { row.put(varName, Double.parseDouble(obs.getValue())); } else { row.put(varName, obs.getValue()); 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 c68932453..1b6ee44ed 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 @@ -1773,6 +1773,10 @@ private void validateTimeStampValue(String value, } + private boolean isNAObservation(String value){ + return value.equalsIgnoreCase("NA"); + } + private void validateObservationValue(Trait variable, String value, String columnHeader, ValidationErrors validationErrors, int row) { if (StringUtils.isBlank(value)) { @@ -1780,6 +1784,11 @@ private void validateObservationValue(Trait variable, String value, return; } + if (isNAObservation(value)) { + log.debug(String.format("skipping validation of observation because it is NA.\n\tvariable: %s\n\trow: %d", variable.getObservationVariableName(), row)); + return; + } + switch (variable.getScale().getDataType()) { case NUMERICAL: Optional number = validNumericValue(value); diff --git a/src/main/java/org/breedinginsight/services/writers/ExcelWriter.java b/src/main/java/org/breedinginsight/services/writers/ExcelWriter.java index 3651281f5..5b56455f2 100644 --- a/src/main/java/org/breedinginsight/services/writers/ExcelWriter.java +++ b/src/main/java/org/breedinginsight/services/writers/ExcelWriter.java @@ -54,7 +54,8 @@ public static Workbook writeToWorkbook(String sheetName, List columns, L } else { //Data values if (data.get(i-1).get(column.getValue()) != null) { - if (column.getDataType() == Column.ColumnDataType.STRING) { + //If String or NA value, accept as is + if (column.getDataType() == Column.ColumnDataType.STRING || data.get(i-1).get(column.getValue()).toString().equalsIgnoreCase("NA")) { row.createCell(cellCount).setCellValue((String) data.get(i - 1).get(column.getValue())); } else if (column.getDataType() == Column.ColumnDataType.INTEGER) { row.createCell(cellCount).setCellValue((Integer) data.get(i - 1).get(column.getValue())); diff --git a/src/main/java/org/breedinginsight/utilities/FileUtil.java b/src/main/java/org/breedinginsight/utilities/FileUtil.java index e5703d9e8..87fec8b46 100644 --- a/src/main/java/org/breedinginsight/utilities/FileUtil.java +++ b/src/main/java/org/breedinginsight/utilities/FileUtil.java @@ -192,17 +192,12 @@ public static Table parseTableFromCsv(InputStream inputStream) throws ParsingExc } public static Table parseTableFromJson(String jsonString) throws ParsingException { - try { return Table.read() .usingOptions( JsonReadOptions .builderFromString(jsonString) .columnTypesToDetect(List.of(ColumnType.STRING)) ); - } catch (IOException e) { - throw new ParsingException(ParsingExceptionType.ERROR_READING_FILE); - } - } public static Table removeNullRows(Table table) { diff --git a/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java index a73cc1ac8..fd221e810 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/SampleSubmissionControllerIntegrationTest.java @@ -17,7 +17,6 @@ package org.breedinginsight.api.v1.controller; -import com.eclipsesource.json.Json; import com.google.gson.*; import com.google.gson.reflect.TypeToken; import io.kowalski.fannypack.FannyPack; @@ -41,10 +40,8 @@ import org.breedinginsight.brapi.v2.dao.BrAPIGermplasmDAO; import org.breedinginsight.brapps.importer.ImportTestUtils; import org.breedinginsight.brapps.importer.model.imports.experimentObservation.ExperimentObservation; -import org.breedinginsight.brapps.importer.model.imports.sample.SampleSubmissionImport; import org.breedinginsight.brapps.importer.model.imports.sample.SampleSubmissionImport.Columns; import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; -import org.breedinginsight.dao.db.tables.pojos.ProgramBreedingMethodEntity; import org.breedinginsight.dao.db.tables.pojos.SpeciesEntity; import org.breedinginsight.daos.SpeciesDAO; import org.breedinginsight.daos.UserDAO; @@ -58,12 +55,10 @@ import org.jetbrains.annotations.NotNull; import org.jooq.DSLContext; import org.junit.jupiter.api.*; -import org.testcontainers.containers.localstack.LocalStackContainer; import tech.tablesaw.api.Table; import javax.inject.Inject; import java.io.*; -import java.time.OffsetDateTime; import java.util.*; import static io.micronaut.http.HttpRequest.*; @@ -76,15 +71,8 @@ public class SampleSubmissionControllerIntegrationTest extends BrAPITest { private Program program; - private ImportTestUtils importTestUtils; - private String experimentId; - private List envIds = new ArrayList<>(); - private final List> rows = new ArrayList<>(); - private final List columns = ExperimentFileColumns.getOrderedColumns(); - private List traits; - @Property(name = "brapi.server.reference-source") private String BRAPI_REFERENCE_SOURCE; @Inject