Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 4cd896a

Browse files
committed
SORMAS-Foundation#1999 add more explicit validation message
1 parent adf070f commit 4cd896a

4 files changed

Lines changed: 17 additions & 7 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Validations.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public interface Validations {
6262
String importRegionAlreadyExists = "importRegionAlreadyExists";
6363
String importRegionNotUnique = "importRegionNotUnique";
6464
String importUnexpectedError = "importUnexpectedError";
65+
String importWrongDataTypeError = "importWrongDataTypeError";
6566
String investigationStatusUnclassifiedCase = "investigationStatusUnclassifiedCase";
6667
String noCommunityInDistrict = "noCommunityInDistrict";
6768
String noDistrictInRegion = "noDistrictInRegion";

sormas-api/src/main/resources/validations.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ importCasesPropertyTypeNotAllowed = Property type %s not allowed when importing
2727
importPropertyTypeNotAllowed = Property type %s not allowed
2828
importCasesUnexpectedError = Unexpected error when trying to import this case. Please send your error report file to an administrator and remove this case from your import file.
2929
importUnexpectedError = Unexpected error when trying to import this row. Please send your error report file to an administrator and remove this row from your import file.
30+
importWrongDataTypeError = Value %s in column %s does not match expected data type.
3031
importCommunityNotUnique = Invalid value %s in column %s; Community name is not unique in the chosen district, make sure there is only one community with this name belonging to the chosen district in the database
3132
importDistrictNotUnique = Invalid value %s in column %s; District name is not unique in the chosen region, make sure there is only one district with this name belonging to the chosen region in the database
3233
importEntryDoesNotExist = Invalid value %s in column %s; Entry does not exist in the database or is archived

sormas-backend/src/main/java/de/symeda/sormas/backend/importexport/ImportFacadeEjb.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
import de.symeda.sormas.api.utils.CSVCommentLineValidator;
109109
import de.symeda.sormas.api.utils.CSVUtils;
110110
import de.symeda.sormas.api.utils.DependingOnFeatureType;
111+
import de.symeda.sormas.backend.campaign.form.CampaignFormMetaFacadeEjb;
111112
import de.symeda.sormas.backend.campaign.form.CampaignFormMetaFacadeEjb.CampaignFormMetaFacadeEjbLocal;
112113
import de.symeda.sormas.backend.common.ConfigFacadeEjb.ConfigFacadeEjbLocal;
113114
import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal;

sormas-ui/src/main/java/de/symeda/sormas/ui/campaign/importer/CampaignFormDataImporter.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
import java.lang.reflect.InvocationTargetException;
88
import java.text.ParseException;
99
import java.util.Arrays;
10+
import java.util.Iterator;
11+
import java.util.LinkedHashMap;
1012
import java.util.LinkedList;
1113
import java.util.List;
14+
import java.util.Map;
1215
import java.util.Objects;
1316
import java.util.Optional;
1417
import java.util.function.Consumer;
@@ -84,10 +87,13 @@ protected ImportLineResult importDataFromCsvLine(
8487
CampaignFormMetaDto campaginMetaDto = FacadeProvider.getCampaignFormMetaFacade().getCampaignFormMetaByUuid(campaignFormMetaUUID);
8588
campaignFormData.setCampaign(campaignReferenceDto);
8689
campaignFormData.setCampaignFormMeta(new CampaignFormMetaReferenceDto(campaignFormMetaUUID, campaginMetaDto.getFormName()));
87-
if (validateFormValues(campaginMetaDto, campaignFormData) == false) {
88-
writeImportError(values, I18nProperties.getValidationError(Validations.importUnexpectedError));
90+
Map<String,String> invalidEntries = validateFormValues(campaginMetaDto, campaignFormData);
91+
if (!invalidEntries.isEmpty()) {
92+
for(String e:invalidEntries.keySet()){
93+
writeImportError(values, I18nProperties.getValidationError(Validations.importWrongDataTypeError,invalidEntries.get(e),e));
94+
}
8995
return ImportLineResult.ERROR;
90-
} else {
96+
} else {
9197
FacadeProvider.getCampaignFormDataFacade().saveCampaignFormData(campaignFormData);
9298
}
9399
} catch (ImportErrorException e) {
@@ -97,19 +103,20 @@ protected ImportLineResult importDataFromCsvLine(
97103
return ImportLineResult.SUCCESS;
98104
}
99105

100-
private boolean validateFormValues(CampaignFormMetaDto campaginMetaDto, CampaignFormDataDto campaignFormData) {
101-
boolean isRowValid = true;
106+
private Map<String,String> validateFormValues(CampaignFormMetaDto campaginMetaDto, CampaignFormDataDto campaignFormData) {
107+
Map<String,String> wrongEntries = new LinkedHashMap<>();
102108
List<CampaignFormElement> formElements = campaginMetaDto.getCampaignFormElements();
103109
Optional<CampaignFormElement> formElementOptional;
104110
for (CampaignFormDataEntry formDataEntry : campaignFormData.getFormValues()) {
105111
formElementOptional = formElements.stream().filter(formElement -> formElement.getId().equals(formDataEntry.getId())).findFirst();
106112
if (formElementOptional.isPresent()) {
107113
if (!isEntryValid(formElementOptional.get(), formDataEntry)) {
108-
isRowValid = false;
114+
wrongEntries.put(formElementOptional.get().getId(),formDataEntry.getValue().toString());
115+
109116
}
110117
}
111118
}
112-
return isRowValid;
119+
return wrongEntries;
113120
}
114121

115122
private boolean isEntryValid(CampaignFormElement definition, CampaignFormDataEntry entry) {

0 commit comments

Comments
 (0)