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