diff --git a/src/main/java/org/breedinginsight/daos/impl/TraitDAOImpl.java b/src/main/java/org/breedinginsight/daos/impl/TraitDAOImpl.java index c61702622..983c739c2 100644 --- a/src/main/java/org/breedinginsight/daos/impl/TraitDAOImpl.java +++ b/src/main/java/org/breedinginsight/daos/impl/TraitDAOImpl.java @@ -380,6 +380,7 @@ public List createTraitsBrAPI(List traits, User actingUser, Progra .min(trait.getScale().getValidValueMin()); BrAPIScale brApiScale = new BrAPIScale() .scaleName(String.format("%s [%s]", trait.getScale().getScaleName(), program.getKey())) + .units(trait.getScale().getUnits()) .externalReferences(List.of(scaleReference)) .dataType(brApiTraitDataType) .decimalPlaces(trait.getScale().getDecimalPlaces()) diff --git a/src/main/java/org/breedinginsight/model/Scale.java b/src/main/java/org/breedinginsight/model/Scale.java index f1c3ebf8f..b2458e80b 100644 --- a/src/main/java/org/breedinginsight/model/Scale.java +++ b/src/main/java/org/breedinginsight/model/Scale.java @@ -58,6 +58,7 @@ public class Scale extends ScaleEntity { public Scale(ScaleEntity scaleEntity){ this.setId(scaleEntity.getId()); this.setScaleName(scaleEntity.getScaleName()); + this.setUnits(scaleEntity.getUnits()); this.setProgramOntologyId(scaleEntity.getProgramOntologyId()); this.setDataType(scaleEntity.getDataType()); this.setCreatedAt(scaleEntity.getCreatedAt()); @@ -70,6 +71,7 @@ public static Scale parseSqlRecord(Record record) { return Scale.builder() .id(record.getValue(SCALE.ID)) .scaleName(record.getValue(SCALE.SCALE_NAME)) + .units(record.getValue(SCALE.UNITS)) .programOntologyId(record.getValue(SCALE.PROGRAM_ONTOLOGY_ID)) .dataType(record.getValue(SCALE.DATA_TYPE)) .createdAt(record.getValue(SCALE.CREATED_AT)) diff --git a/src/main/java/org/breedinginsight/services/OntologyService.java b/src/main/java/org/breedinginsight/services/OntologyService.java index 90de17ec8..a2a711535 100644 --- a/src/main/java/org/breedinginsight/services/OntologyService.java +++ b/src/main/java/org/breedinginsight/services/OntologyService.java @@ -505,7 +505,7 @@ public List> processData(List traits) { if(scale!=null) { row.put(TraitFileColumns.SCALE_CLASS.toString(), DataTypeTranslator.getDisplayNameFromType(scale.getDataType())); - row.put(TraitFileColumns.SCALE_NAME.toString(), scale.getScaleName()); + row.put(TraitFileColumns.UNITS.toString(), scale.getUnits()); row.put(TraitFileColumns.SCALE_DECIMAL_PLACES.toString(), scale.getDecimalPlaces()); row.put(TraitFileColumns.SCALE_LOWER_LIMIT.toString(), scale.getValidValueMin()); row.put(TraitFileColumns.SCALE_UPPER_LIMIT.toString(), scale.getValidValueMax()); diff --git a/src/main/java/org/breedinginsight/services/TraitService.java b/src/main/java/org/breedinginsight/services/TraitService.java index 5f240e025..c36296122 100644 --- a/src/main/java/org/breedinginsight/services/TraitService.java +++ b/src/main/java/org/breedinginsight/services/TraitService.java @@ -22,19 +22,10 @@ import io.micronaut.http.server.exceptions.HttpServerException; import io.micronaut.http.server.exceptions.InternalServerException; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.text.WordUtils; -import org.brapi.client.v2.model.exceptions.ApiException; -import org.brapi.v2.model.BrAPIOntologyReference; -import org.brapi.v2.model.core.BrAPIStudy; -import org.brapi.v2.model.core.BrAPITrial; -import org.brapi.v2.model.pheno.*; +import org.brapi.v2.model.pheno.BrAPIObservation; import org.breedinginsight.api.auth.AuthenticatedUser; import org.breedinginsight.api.model.v1.response.ValidationErrors; -import org.breedinginsight.brapi.v2.constants.BrAPIAdditionalInfoFields; -import org.breedinginsight.brapi.v2.services.BrAPITrialService; -import org.breedinginsight.brapps.importer.services.ExternalReferenceSource; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.dao.db.tables.pojos.MethodEntity; import org.breedinginsight.dao.db.tables.pojos.ProgramSharedOntologyEntity; @@ -46,8 +37,6 @@ import org.breedinginsight.services.exceptions.ValidatorException; import org.breedinginsight.services.validators.TraitValidatorError; import org.breedinginsight.services.validators.TraitValidatorService; -import org.breedinginsight.utilities.Utilities; -import org.jetbrains.annotations.NotNull; import org.jooq.DSLContext; import javax.inject.Inject; @@ -203,6 +192,7 @@ public List createTraits(UUID programId, List traits, Authenticate // Create scale ScaleEntity jooqScale = ScaleEntity.builder() .scaleName(trait.getScale().getScaleName()) + .units(trait.getScale().getUnits()) .dataType(trait.getScale().getDataType()) .programOntologyId(programOntology.getId()) .createdBy(actingUser.getId()) @@ -419,6 +409,7 @@ public List updateTraits(UUID programId, List traits, Authenticate // Jump to scale ScaleEntity existingScaleEntity = scaleDAO.fetchOneById(existingTraitEntity.getScaleId()); existingScaleEntity.setScaleName(updatedTrait.getScale().getScaleName()); + existingScaleEntity.setUnits(updatedTrait.getScale().getUnits()); existingScaleEntity.setDataType(updatedTrait.getScale().getDataType()); existingScaleEntity.setUpdatedBy(user.getId()); scaleDAO.update(existingScaleEntity); diff --git a/src/main/java/org/breedinginsight/services/parsers/ParsingExceptionType.java b/src/main/java/org/breedinginsight/services/parsers/ParsingExceptionType.java index 31e7356d2..56ce72e69 100644 --- a/src/main/java/org/breedinginsight/services/parsers/ParsingExceptionType.java +++ b/src/main/java/org/breedinginsight/services/parsers/ParsingExceptionType.java @@ -36,7 +36,8 @@ public enum ParsingExceptionType { INVALID_SCALE_LOWER_LIMIT("Invalid scale lower limit value. Value must be numeric and be a whole number."), INVALID_SCALE_UPPER_LIMIT("Invalid scale upper limit value. Value must be numeric and be a whole number."), INVALID_SCALE_CATEGORIES("Invalid scale categories format"), - INVALID_TERM_TYPE("Invalid term type"); + INVALID_TERM_TYPE("Invalid term type"), + SCALE_UNIT_NOT_ALLOWED("Units identified for non-numeric scale class"); private String value; diff --git a/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileColumns.java b/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileColumns.java index f3782adf7..303671c76 100644 --- a/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileColumns.java +++ b/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileColumns.java @@ -38,7 +38,7 @@ public enum TraitFileColumns { METHOD_CLASS("Method class", Column.ColumnDataType.STRING), METHOD_FORMULA("Method formula", Column.ColumnDataType.STRING), SCALE_CLASS("Scale class", Column.ColumnDataType.STRING), - SCALE_NAME("Units", Column.ColumnDataType.STRING), + UNITS("Units", Column.ColumnDataType.STRING), SCALE_DECIMAL_PLACES("Scale decimal places", Column.ColumnDataType.INTEGER), SCALE_LOWER_LIMIT("Scale lower limit", Column.ColumnDataType.INTEGER), SCALE_UPPER_LIMIT("Scale upper limit", Column.ColumnDataType.INTEGER), diff --git a/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileParser.java b/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileParser.java index 66c7134f6..2dc710483 100644 --- a/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileParser.java +++ b/src/main/java/org/breedinginsight/services/parsers/trait/TraitFileParser.java @@ -242,8 +242,18 @@ private List excelRecordsToTraits(List records) throws Valid } } + String units = parseExcelValueAsString(record, TraitFileColumns.UNITS); + // Note: if method class is "Computation", scale class will be overwritten to "Numerical", so treat accordingly. + if (dataType != DataType.NUMERICAL && (method.getMethodClass() == null || !method.getMethodClass().equalsIgnoreCase(Method.COMPUTATION_TYPE))) { + if (units != null && !units.isEmpty()) { + ValidationError error = new ValidationError(TraitFileColumns.UNITS.toString(), + ParsingExceptionType.SCALE_UNIT_NOT_ALLOWED.toString(), HttpStatus.UNPROCESSABLE_ENTITY); + validationErrors.addError(traitValidatorError.getRowNumber(i), error); + } + } Scale scale = Scale.builder() - .scaleName(parseExcelValueAsString(record, TraitFileColumns.SCALE_NAME)) + .scaleName(units == null ? parseExcelValueAsString(record, TraitFileColumns.SCALE_CLASS) : units) + .units(units) .dataType(dataType) .decimalPlaces(decimalPlaces) .validValueMin(validValueMin) diff --git a/src/main/java/org/breedinginsight/services/validators/TraitFileValidatorError.java b/src/main/java/org/breedinginsight/services/validators/TraitFileValidatorError.java index 0eab0ad37..4ba0f99d7 100644 --- a/src/main/java/org/breedinginsight/services/validators/TraitFileValidatorError.java +++ b/src/main/java/org/breedinginsight/services/validators/TraitFileValidatorError.java @@ -56,7 +56,7 @@ public ValidationError getMissingScaleMsg() { } @Override - public ValidationError getMissingScaleNameMsg() { + public ValidationError getMissingScaleUnitMsg() { return new ValidationError("Unit", "Missing unit", HttpStatus.UNPROCESSABLE_ENTITY); } diff --git a/src/main/java/org/breedinginsight/services/validators/TraitValidatorError.java b/src/main/java/org/breedinginsight/services/validators/TraitValidatorError.java index 107f5e28f..b2db156f6 100644 --- a/src/main/java/org/breedinginsight/services/validators/TraitValidatorError.java +++ b/src/main/java/org/breedinginsight/services/validators/TraitValidatorError.java @@ -56,8 +56,8 @@ public ValidationError getMissingScaleMsg() { } @Override - public ValidationError getMissingScaleNameMsg() { - return new ValidationError("scale.scaleName", "Missing scale name", HttpStatus.BAD_REQUEST); + public ValidationError getMissingScaleUnitMsg() { + return new ValidationError("scale.units", "Missing units", HttpStatus.BAD_REQUEST); } @Override diff --git a/src/main/java/org/breedinginsight/services/validators/TraitValidatorErrorInterface.java b/src/main/java/org/breedinginsight/services/validators/TraitValidatorErrorInterface.java index a6bb314f4..49ef88da5 100644 --- a/src/main/java/org/breedinginsight/services/validators/TraitValidatorErrorInterface.java +++ b/src/main/java/org/breedinginsight/services/validators/TraitValidatorErrorInterface.java @@ -28,7 +28,7 @@ public interface TraitValidatorErrorInterface { ValidationError getMissingMethodMsg(); ValidationError getMissingMethodClassMsg(); ValidationError getMissingScaleMsg(); - ValidationError getMissingScaleNameMsg(); + ValidationError getMissingScaleUnitMsg(); ValidationError getMissingScaleDataTypeMsg(); ValidationError getMissingObsVarNameMsg(); ValidationError getMissingTraitEntityMsg(); diff --git a/src/main/java/org/breedinginsight/services/validators/TraitValidatorService.java b/src/main/java/org/breedinginsight/services/validators/TraitValidatorService.java index 1b893c8bc..20d811125 100644 --- a/src/main/java/org/breedinginsight/services/validators/TraitValidatorService.java +++ b/src/main/java/org/breedinginsight/services/validators/TraitValidatorService.java @@ -18,7 +18,6 @@ import org.breedinginsight.api.model.v1.response.ValidationError; import org.breedinginsight.api.model.v1.response.ValidationErrors; -import org.breedinginsight.brapi.v1.model.TraitDataType; import org.breedinginsight.dao.db.enums.DataType; import org.breedinginsight.daos.TraitDAO; import org.breedinginsight.model.Method; @@ -65,8 +64,8 @@ public ValidationErrors checkRequiredTraitFields(List traits, TraitValida errors.addError(traitValidatorErrors.getRowNumber(i), error); } else { if (scale.getDataType() != null & scale.getDataType() == DataType.NUMERICAL && - (isBlank(scale.getScaleName()) || scale.getScaleName() == null )) { - ValidationError error = traitValidatorErrors.getMissingScaleNameMsg(); + (isBlank(scale.getUnits()))) { + ValidationError error = traitValidatorErrors.getMissingScaleUnitMsg(); errors.addError(traitValidatorErrors.getRowNumber(i), error); } if (scale.getDataType() == null || scale.getDataType() == null) { diff --git a/src/main/resources/db/migration/V1.18.0__alter_scale_table.sql b/src/main/resources/db/migration/V1.18.0__alter_scale_table.sql new file mode 100644 index 000000000..e27cfef5a --- /dev/null +++ b/src/main/resources/db/migration/V1.18.0__alter_scale_table.sql @@ -0,0 +1,23 @@ +/* + * See the NOTICE file distributed with this work for additional information + * regarding copyright ownership. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +-- Add units to scale table, units is an optional BrAPI field. +ALTER TABLE scale ADD COLUMN units text; +-- Update existing scale records. +UPDATE scale +SET units = scale_name +WHERE data_type = 'NUMERICAL'; \ No newline at end of file diff --git a/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java index 9f43c37b8..71f471f1b 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/TraitControllerIntegrationTest.java @@ -1367,6 +1367,8 @@ public void postTraitComputation() { // Set scale class to computation trait1.getMethod().setMethodClass("Computation"); + // Since method class of "Computation" will change scale class to "Numerical", units is reauired. + trait1.getScale().setUnits("test unit"); List traits = List.of(trait1); diff --git a/src/test/java/org/breedinginsight/api/v1/controller/TraitUploadControllerIntegrationTest.java b/src/test/java/org/breedinginsight/api/v1/controller/TraitUploadControllerIntegrationTest.java index 4763b7af8..01a478bdf 100644 --- a/src/test/java/org/breedinginsight/api/v1/controller/TraitUploadControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/api/v1/controller/TraitUploadControllerIntegrationTest.java @@ -581,7 +581,7 @@ private void checkValidTraitUpload(JsonObject traitUpload) { assertEquals("a^2 + b^2 = c^2", method.get("formula").getAsString(), "wrong method formula"); JsonObject scale = trait.get("scale").getAsJsonObject(); - assertEquals("1-4 Parlier field response score", scale.get("scaleName").getAsString(), "wrong scale name"); + assertEquals("Ordinal", scale.get("scaleName").getAsString(), "wrong scale name"); assertEquals(DataType.ORDINAL.getLiteral(), scale.get("dataType").getAsString(), "wrong scale dataType"); assertEquals(2, scale.get("decimalPlaces").getAsInt(), "wrong scale decimal places"); assertEquals(2, scale.get("validValueMin").getAsInt(), "wrong scale min value"); @@ -811,6 +811,27 @@ void putNominalCategoryLabelPresentError() { assertEquals("Scale label cannot be populated for Nominal scale type", labelError.get("errorMessage").getAsString()); } + @Test + void putNonNumericalClassWithUnitError() { + + File file = new File("src/test/resources/files/ontology/non_numerical_with_unit.xlsx"); + + HttpClientResponseException e = Assertions.assertThrows(HttpClientResponseException.class, () -> { + HttpResponse response = uploadFile(validProgram.getId().toString(), file, "test-registered-user"); + }); + assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, e.getStatus()); + + JsonArray rowErrors = JsonParser.parseString((String) e.getResponse().getBody().get()).getAsJsonObject().getAsJsonArray("rowErrors"); + assertTrue(rowErrors.size() == 1, "Wrong number of row errors returned"); + + JsonObject rowError1 = rowErrors.get(0).getAsJsonObject(); + JsonArray errors = rowError1.getAsJsonArray("errors"); + assertTrue(errors.size() == 1, "Not enough errors were returned"); + JsonObject error = errors.get(0).getAsJsonObject(); + assertEquals(422, error.get("httpStatusCode").getAsInt(), "Incorrect http status code"); + assertEquals("Units identified for non-numeric scale class", error.get("errorMessage").getAsString(), "Incorrect http status code"); + } + @Test void putOrdinalMissingCategories() { diff --git a/src/test/java/org/breedinginsight/brapi/v1/controller/BrapiV1ObservationVariablesControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v1/controller/BrapiV1ObservationVariablesControllerIntegrationTest.java index 300fcd928..038a691ec 100644 --- a/src/test/java/org/breedinginsight/brapi/v1/controller/BrapiV1ObservationVariablesControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v1/controller/BrapiV1ObservationVariablesControllerIntegrationTest.java @@ -163,6 +163,7 @@ Trait buildTestTrait(String name, String traitClass, String description, Scale scale = Scale.builder() .scaleName(name + " scale") + .units("test unit") .dataType(DataType.NUMERICAL) .build(); diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java index 0e57050ca..85f6c6773 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationLevelsControllerIntegrationTest.java @@ -290,6 +290,7 @@ private List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java index a45dbb6f6..3a3d8ffa3 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationUnitControllerIntegrationTest.java @@ -422,6 +422,7 @@ private List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java index 4a0a78526..16d7261fb 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIObservationsControllerIntegrationTest.java @@ -378,6 +378,7 @@ private List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIStudiesControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIStudiesControllerIntegrationTest.java index 955c6e619..ac276003c 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIStudiesControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIStudiesControllerIntegrationTest.java @@ -376,6 +376,7 @@ private List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java index d54aaafc1..58c20194f 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/BrAPIV2ObservationVariableControllerIntegrationTest.java @@ -386,6 +386,7 @@ private List createTraits(int numToCreate) { .scale(Scale.builder() .scaleName("test scale") .dataType(DataType.NUMERICAL) + .units("test unit") .validValueMin(0) .validValueMax(100) .build()) diff --git a/src/test/java/org/breedinginsight/brapi/v2/ExperimentControllerIntegrationTest.java b/src/test/java/org/breedinginsight/brapi/v2/ExperimentControllerIntegrationTest.java index c3496ba41..de17556aa 100644 --- a/src/test/java/org/breedinginsight/brapi/v2/ExperimentControllerIntegrationTest.java +++ b/src/test/java/org/breedinginsight/brapi/v2/ExperimentControllerIntegrationTest.java @@ -314,6 +314,7 @@ private List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/brapps/importer/ImportTestUtils.java b/src/test/java/org/breedinginsight/brapps/importer/ImportTestUtils.java index 3a521aa55..445542e6c 100644 --- a/src/test/java/org/breedinginsight/brapps/importer/ImportTestUtils.java +++ b/src/test/java/org/breedinginsight/brapps/importer/ImportTestUtils.java @@ -182,6 +182,7 @@ public List createTraits(int numToCreate) { .programObservationLevel(ProgramObservationLevel.builder().name("Plot").build()) .scale(Scale.builder() .scaleName("test scale") + .units("test unit") .dataType(DataType.NUMERICAL) .validValueMin(0) .validValueMax(100) diff --git a/src/test/java/org/breedinginsight/services/parsers/TraitFileParserUnitTest.java b/src/test/java/org/breedinginsight/services/parsers/TraitFileParserUnitTest.java index af195b790..e99587fd2 100644 --- a/src/test/java/org/breedinginsight/services/parsers/TraitFileParserUnitTest.java +++ b/src/test/java/org/breedinginsight/services/parsers/TraitFileParserUnitTest.java @@ -295,7 +295,7 @@ private void assertTestTraitEquals(Trait trait) { assertEquals("Estimation", method.getMethodClass(), "wrong method class"); assertEquals("a^2 + b^2 = c^2", method.getFormula(), "wrong method formula"); Scale scale = trait.getScale(); - assertEquals("1-4 Parlier field response score", scale.getScaleName(), "wrong scale name"); + assertEquals("Ordinal", scale.getScaleName(), "wrong scale name"); assertEquals(DataType.ORDINAL, scale.getDataType(), "wrong scale dataType"); assertEquals(2, scale.getDecimalPlaces(), "wrong scale decimal places"); assertEquals(2, scale.getValidValueMin(), "wrong scale min value"); diff --git a/src/test/resources/files/data_mismatched_cases.csv b/src/test/resources/files/data_mismatched_cases.csv index 4e31b2eb0..c74ab1152 100644 --- a/src/test/resources/files/data_mismatched_cases.csv +++ b/src/test/resources/files/data_mismatched_cases.csv @@ -1,2 +1,2 @@ name,synoNyms,deScription,Trait entity,Trait attribute,StaTus,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,ScALe Upper limit,Scale CAtegories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,,Germplasm PASSPORT \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,,Germplasm PASSPORT \ No newline at end of file diff --git a/src/test/resources/files/data_multiple_rows.csv b/src/test/resources/files/data_multiple_rows.csv index 636c6e376..7812d6a3b 100644 --- a/src/test/resources/files/data_multiple_rows.csv +++ b/src/test/resources/files/data_multiple_rows.csv @@ -1,4 +1,4 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_leaf,Powdery Mildew Leaf; Powdery Mildew Severity Leaf,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Leaf,Germplasm Attribute -PM_bud,Powdery Mildew Bud; Powdery Mildew Severity Bud,"Powdery mildew (PM) due to Erysiphe necator severity in field, bud only ",bud,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, bud",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Bud, -PM_stem,Powdery Mildew Stem; Powdery Mildew Severity Stem,"Powdery mildew (PM) due to Erysiphe necator severity in field, stem only ",stem,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, stem",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Stem,phenotype \ No newline at end of file +PM_leaf,Powdery Mildew Leaf; Powdery Mildew Severity Leaf,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Leaf,Germplasm Attribute +PM_bud,Powdery Mildew Bud; Powdery Mildew Severity Bud,"Powdery mildew (PM) due to Erysiphe necator severity in field, bud only ",bud,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, bud",Estimation,a^2 + b^2 = c^2,,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Bud, +PM_stem,Powdery Mildew Stem; Powdery Mildew Severity Stem,"Powdery mildew (PM) due to Erysiphe necator severity in field, stem only ",stem,powdery mildew deverity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, stem",Estimation,a^2 + b^2 = c^2,,Ordinal,,,,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity Stem,phenotype \ No newline at end of file diff --git a/src/test/resources/files/data_multiple_rows.xls b/src/test/resources/files/data_multiple_rows.xls index 33e659011..be871c7da 100644 Binary files a/src/test/resources/files/data_multiple_rows.xls and b/src/test/resources/files/data_multiple_rows.xls differ diff --git a/src/test/resources/files/data_multiple_rows.xlsx b/src/test/resources/files/data_multiple_rows.xlsx index c1de09872..d5bed0f8d 100644 Binary files a/src/test/resources/files/data_multiple_rows.xlsx and b/src/test/resources/files/data_multiple_rows.xlsx differ diff --git a/src/test/resources/files/data_one_row.csv b/src/test/resources/files/data_one_row.csv index 53e09c795..39839d30b 100644 --- a/src/test/resources/files/data_one_row.csv +++ b/src/test/resources/files/data_one_row.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity,germplasm passport \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity,germplasm passport \ No newline at end of file diff --git a/src/test/resources/files/data_one_row.xls b/src/test/resources/files/data_one_row.xls index c08d525b4..8567ec081 100644 Binary files a/src/test/resources/files/data_one_row.xls and b/src/test/resources/files/data_one_row.xls differ diff --git a/src/test/resources/files/data_one_row.xlsx b/src/test/resources/files/data_one_row.xlsx index 57a616386..9514a9815 100644 Binary files a/src/test/resources/files/data_one_row.xlsx and b/src/test/resources/files/data_one_row.xlsx differ diff --git a/src/test/resources/files/data_one_row_blank_active_value.csv b/src/test/resources/files/data_one_row_blank_active_value.csv index 5c6021a72..a5060e5c8 100644 --- a/src/test/resources/files/data_one_row_blank_active_value.csv +++ b/src/test/resources/files/data_one_row_blank_active_value.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Tags,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",Leaf,powdery mildew severity,,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",Leaf,powdery mildew severity,,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_blank_scale_class.csv b/src/test/resources/files/data_one_row_blank_scale_class.csv index 10274194b..b2b6c8064 100644 --- a/src/test/resources/files/data_one_row_blank_scale_class.csv +++ b/src/test/resources/files/data_one_row_blank_scale_class.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_computation.csv b/src/test/resources/files/data_one_row_computation.csv index 99d968aed..50eb06167 100644 --- a/src/test/resources/files/data_one_row_computation.csv +++ b/src/test/resources/files/data_one_row_computation.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Computation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Computation,a^2 + b^2 = c^2,test unit,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_empty_active_value.xls b/src/test/resources/files/data_one_row_empty_active_value.xls index a799cd957..a77a8e470 100644 Binary files a/src/test/resources/files/data_one_row_empty_active_value.xls and b/src/test/resources/files/data_one_row_empty_active_value.xls differ diff --git a/src/test/resources/files/data_one_row_empty_formula_headers.xls b/src/test/resources/files/data_one_row_empty_formula_headers.xls index c52f828ad..3def66529 100644 Binary files a/src/test/resources/files/data_one_row_empty_formula_headers.xls and b/src/test/resources/files/data_one_row_empty_formula_headers.xls differ diff --git a/src/test/resources/files/data_one_row_empty_headers.csv b/src/test/resources/files/data_one_row_empty_headers.csv index 212c8db5d..2f1514357 100644 --- a/src/test/resources/files/data_one_row_empty_headers.csv +++ b/src/test/resources/files/data_one_row_empty_headers.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Tags,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_empty_headers.xls b/src/test/resources/files/data_one_row_empty_headers.xls index ec41889c2..f4b24f44a 100644 Binary files a/src/test/resources/files/data_one_row_empty_headers.xls and b/src/test/resources/files/data_one_row_empty_headers.xls differ diff --git a/src/test/resources/files/data_one_row_invalid_active_value.csv b/src/test/resources/files/data_one_row_invalid_active_value.csv index eb181ba35..cc1ebd433 100644 --- a/src/test/resources/files/data_one_row_invalid_active_value.csv +++ b/src/test/resources/files/data_one_row_invalid_active_value.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powder mildew severity,blah,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powder mildew severity,blah,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_invalid_scale_class.csv b/src/test/resources/files/data_one_row_invalid_scale_class.csv index ba37dcf37..942743d9c 100644 --- a/src/test/resources/files/data_one_row_invalid_scale_class.csv +++ b/src/test/resources/files/data_one_row_invalid_scale_class.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,blah,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,blah,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_scale_categories_blank.csv b/src/test/resources/files/data_one_row_scale_categories_blank.csv index b4b0906a8..41c726109 100644 --- a/src/test/resources/files/data_one_row_scale_categories_blank.csv +++ b/src/test/resources/files/data_one_row_scale_categories_blank.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Tags,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,,, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,,, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_scale_decimal_blank.csv b/src/test/resources/files/data_one_row_scale_decimal_blank.csv index 585d81ba2..4fda9344b 100644 --- a/src/test/resources/files/data_one_row_scale_decimal_blank.csv +++ b/src/test/resources/files/data_one_row_scale_decimal_blank.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Tags,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_scale_decimal_invalid.csv b/src/test/resources/files/data_one_row_scale_decimal_invalid.csv index a7d774994..e504fb732 100644 --- a/src/test/resources/files/data_one_row_scale_decimal_invalid.csv +++ b/src/test/resources/files/data_one_row_scale_decimal_invalid.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2t,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2t,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",, \ No newline at end of file diff --git a/src/test/resources/files/data_one_row_trait_level_not_exist.csv b/src/test/resources/files/data_one_row_trait_level_not_exist.csv index edcbb3a3f..a8f8770a1 100644 --- a/src/test/resources/files/data_one_row_trait_level_not_exist.csv +++ b/src/test/resources/files/data_one_row_trait_level_not_exist.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",bud,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity,Phenotype \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",bud,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,Powdery Mildew Severity,Phenotype \ No newline at end of file diff --git a/src/test/resources/files/duplicatesInFile.csv b/src/test/resources/files/duplicatesInFile.csv index 55e7b9605..3f88503f3 100644 --- a/src/test/resources/files/duplicatesInFile.csv +++ b/src/test/resources/files/duplicatesInFile.csv @@ -1,3 +1,3 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinal,2,2,9999,"1=No visible infection; 2=Very few, small colonies; 3=< 50% coverage; 4=>50% coverage",,, \ No newline at end of file diff --git a/src/test/resources/files/missing_category_label_nominal.csv b/src/test/resources/files/missing_category_label_nominal.csv index 7998bf97b..5e67bb65a 100644 --- a/src/test/resources/files/missing_category_label_nominal.csv +++ b/src/test/resources/files/missing_category_label_nominal.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Nominal,2,2,9999,"No visible infection; Very few, small colonies; < 50% coverage; >50% coverage",,, \ No newline at end of file +PM_Leaf,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,active,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Nominal,2,2,9999,"No visible infection; Very few, small colonies; < 50% coverage; >50% coverage",,, \ No newline at end of file diff --git a/src/test/resources/files/missing_scale_unit.xlsx b/src/test/resources/files/missing_scale_unit.xlsx index 466b531c0..ae300d40d 100644 Binary files a/src/test/resources/files/missing_scale_unit.xlsx and b/src/test/resources/files/missing_scale_unit.xlsx differ diff --git a/src/test/resources/files/multiple_rows_parsing_errors.csv b/src/test/resources/files/multiple_rows_parsing_errors.csv index a46e0b3bf..203bb436b 100644 --- a/src/test/resources/files/multiple_rows_parsing_errors.csv +++ b/src/test/resources/files/multiple_rows_parsing_errors.csv @@ -1,4 +1,4 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Tags,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Full Name,Term Type -PM_Leaf,Powdery Mildew Leaf Powdery Mildew Severity Leaf,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,TRUE,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Ordinl,,,,"1->No visible infection; 2->Very few, small colonies; 3->50% coverage; 4->50% coverage",, -PM_Bud,Powdery Mildew Bud: Powdery Mildew Severity Bud,"Powdery mildew (PM) due to Erysiphe necator severity in field, bud only ",bud,powdery mildew severity,FALSE,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, bud",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Txt,,,,"1=No visible infection: 2=Very few, small colonies: 3=< 50% coverage: 4=>50% coverage",, -PM_Stem,Powdery Mildew Stem. Powdery Mildew Severity Stem,"Powdery mildew (PM) due to Erysiphe necator severity in field, stem only ",stem,powdery mildew severity,actv,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, stem",Estimation,a^2 + b^2 = c^2,1-4 Parlier field response score,Nmber,Four,One,Ten,"No visible infection; Very few, small colonies; 50% coverage; 50% coverage",,NotATermType \ No newline at end of file +PM_Leaf,Powdery Mildew Leaf Powdery Mildew Severity Leaf,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powdery mildew severity,TRUE,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, leaf",Estimation,a^2 + b^2 = c^2,,Ordinl,,,,"1->No visible infection; 2->Very few, small colonies; 3->50% coverage; 4->50% coverage",, +PM_Bud,Powdery Mildew Bud: Powdery Mildew Severity Bud,"Powdery mildew (PM) due to Erysiphe necator severity in field, bud only ",bud,powdery mildew severity,FALSE,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, bud",Estimation,a^2 + b^2 = c^2,,Txt,,,,"1=No visible infection: 2=Very few, small colonies: 3=< 50% coverage: 4=>50% coverage",, +PM_Stem,Powdery Mildew Stem. Powdery Mildew Severity Stem,"Powdery mildew (PM) due to Erysiphe necator severity in field, stem only ",stem,powdery mildew severity,actv,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation ","Powdery Mildew severity, stem",Estimation,a^2 + b^2 = c^2,,Nmber,Four,One,Ten,"No visible infection; Very few, small colonies; 50% coverage; 50% coverage",,NotATermType \ No newline at end of file diff --git a/src/test/resources/files/ontology/data_nominal_missing_categories.xlsx b/src/test/resources/files/ontology/data_nominal_missing_categories.xlsx index dee1c7dc2..52de1dd02 100644 Binary files a/src/test/resources/files/ontology/data_nominal_missing_categories.xlsx and b/src/test/resources/files/ontology/data_nominal_missing_categories.xlsx differ diff --git a/src/test/resources/files/ontology/data_ordinal_missing_categories.xlsx b/src/test/resources/files/ontology/data_ordinal_missing_categories.xlsx index 7214e33b9..a6719a8bb 100644 Binary files a/src/test/resources/files/ontology/data_ordinal_missing_categories.xlsx and b/src/test/resources/files/ontology/data_ordinal_missing_categories.xlsx differ diff --git a/src/test/resources/files/ontology/non_numerical_with_unit.xlsx b/src/test/resources/files/ontology/non_numerical_with_unit.xlsx new file mode 100644 index 000000000..f038a57aa Binary files /dev/null and b/src/test/resources/files/ontology/non_numerical_with_unit.xlsx differ diff --git a/src/test/resources/files/parsing_exceptions.csv b/src/test/resources/files/parsing_exceptions.csv index 83f273e30..6590cc858 100644 --- a/src/test/resources/files/parsing_exceptions.csv +++ b/src/test/resources/files/parsing_exceptions.csv @@ -1,2 +1,2 @@ Name,Synonyms,Description,Trait entity,Trait attribute,Status,Trait lists,Method name,Method description,Method class,Method formula,Units,Scale class,Scale decimal places,Scale lower limit,Scale upper limit,Scale categories,Tags,Full Name,Term Type -,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powder mildew severity,inactive,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",bad,a^2 + b^2 = c^2,1-4 Parlier field response score,paragraph,two,one,nine-nine-nine-nine,"1=No visible infection... 2=Very few, small colonies... 3=< 50% coverage... 4=>50% coverage",,, +,Powdery Mildew; Powdery Mildew Severity,"Powdery mildew (PM) due to Erysiphe necator severity in field, leaves only ",leaf,powder mildew severity,inactive,Nursery evaluation; Greenhouse evaluation; Trial evaluation,"Powdery Mildew severity, leaves - Estimation","Powdery Mildew severity, leaf",bad,a^2 + b^2 = c^2,,paragraph,two,one,nine-nine-nine-nine,"1=No visible infection... 2=Very few, small colonies... 3=< 50% coverage... 4=>50% coverage",,, \ No newline at end of file