9191import de .symeda .sormas .backend .common .ConfigFacadeEjb .ConfigFacadeEjbLocal ;
9292import de .symeda .sormas .backend .feature .FeatureConfigurationFacadeEjb .FeatureConfigurationFacadeEjbLocal ;
9393
94+ import static de .symeda .sormas .api .caze .CaseDataDto .*;
95+
9496@ Stateless (name = "ImportFacade" )
9597public class ImportFacadeEjb implements ImportFacade {
9698
@@ -120,10 +122,12 @@ public void generateCaseImportTemplateFile() throws IOException {
120122
121123 createExportDirectoryIfNecessary ();
122124
125+ char separator = configFacade .getCsvSeparator ();
126+
123127 List <ImportColumn > importColumns = new ArrayList <>();
124- appendListOfFields (importColumns , CaseDataDto .class , "" );
125- appendListOfFields (importColumns , SampleDto .class , "" );
126- appendListOfFields (importColumns , PathogenTestDto .class , "" );
128+ appendListOfFields (importColumns , CaseDataDto .class , "" , separator );
129+ appendListOfFields (importColumns , SampleDto .class , "" , separator );
130+ appendListOfFields (importColumns , PathogenTestDto .class , "" , separator );
127131
128132 writeTemplate (Paths .get (getCaseImportTemplateFilePath ()), importColumns , true );
129133 }
@@ -133,8 +137,10 @@ public void generateCaseContactImportTemplateFile() throws IOException {
133137
134138 createExportDirectoryIfNecessary ();
135139
140+ char separator = configFacade .getCsvSeparator ();
141+
136142 List <ImportColumn > importColumns = new ArrayList <>();
137- appendListOfFields (importColumns , ContactDto .class , "" );
143+ appendListOfFields (importColumns , ContactDto .class , "" , separator );
138144
139145 List <String > columnsToRemove = Arrays .asList (ContactDto .CAZE ,
140146 ContactDto .DISEASE ,
@@ -152,8 +158,10 @@ public void generateContactImportTemplateFile() throws IOException {
152158
153159 createExportDirectoryIfNecessary ();
154160
161+ char separator = configFacade .getCsvSeparator ();
162+
155163 List <ImportColumn > importColumns = new ArrayList <>();
156- appendListOfFields (importColumns , ContactDto .class , "" );
164+ appendListOfFields (importColumns , ContactDto .class , "" , separator );
157165 List <String > columnsToRemove = Arrays .asList (ContactDto .CAZE , ContactDto .RESULTING_CASE );
158166 importColumns = importColumns .stream ().filter (column -> !columnsToRemove .contains (column .getColumnName ())).collect (Collectors .toList ());
159167
@@ -165,30 +173,32 @@ public void generateCaseLineListingImportTemplateFile() throws IOException {
165173
166174 createExportDirectoryIfNecessary ();
167175
176+ char separator = configFacade .getCsvSeparator ();
177+
168178 List <ImportColumn > importColumns = new ArrayList <>();
169- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . DISEASE , Disease .class ));
170- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . DISEASE_DETAILS , String .class ));
171- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . PLAGUE_TYPE , PlagueType .class ));
172- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . DENGUE_FEVER_TYPE , DengueFeverType .class ));
173- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . RABIES_TYPE , RabiesType .class ));
174- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .FIRST_NAME , String .class ));
175- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .LAST_NAME , String .class ));
176- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .SEX , Sex .class ));
177- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .BIRTH_DATE_DD , Integer .class ));
178- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .BIRTH_DATE_MM , Integer .class ));
179- importColumns .add (ImportColumn .from (PersonDto .class , CaseDataDto . PERSON + "." + PersonDto .BIRTH_DATE_YYYY , Integer .class ));
180- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . EPID_NUMBER , String .class ));
181- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . REPORT_DATE , Date .class ));
182- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . CASE_ORIGIN , CaseOrigin .class ));
183- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . REGION , RegionReferenceDto .class ));
184- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . DISTRICT , DistrictReferenceDto .class ));
185- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . COMMUNITY , CommunityReferenceDto .class ));
186- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . FACILITY_TYPE , FacilityType .class ));
187- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . HEALTH_FACILITY , FacilityReferenceDto .class ));
188- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . HEALTH_FACILITY_DETAILS , String .class ));
189- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . POINT_OF_ENTRY , PointOfEntryReferenceDto .class ));
190- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . POINT_OF_ENTRY_DETAILS , String .class ));
191- importColumns .add (ImportColumn .from (CaseDataDto .class , CaseDataDto . SYMPTOMS + "." + SymptomsDto .ONSET_DATE , Date .class ));
179+ importColumns .add (ImportColumn .from (CaseDataDto .class , DISEASE , Disease .class , separator ));
180+ importColumns .add (ImportColumn .from (CaseDataDto .class , DISEASE_DETAILS , String .class , separator ));
181+ importColumns .add (ImportColumn .from (CaseDataDto .class , PLAGUE_TYPE , PlagueType .class , separator ));
182+ importColumns .add (ImportColumn .from (CaseDataDto .class , DENGUE_FEVER_TYPE , DengueFeverType .class , separator ));
183+ importColumns .add (ImportColumn .from (CaseDataDto .class , RABIES_TYPE , RabiesType .class , separator ));
184+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .FIRST_NAME , String .class , separator ));
185+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .LAST_NAME , String .class , separator ));
186+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .SEX , Sex .class , separator ));
187+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .BIRTH_DATE_DD , Integer .class , separator ));
188+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .BIRTH_DATE_MM , Integer .class , separator ));
189+ importColumns .add (ImportColumn .from (PersonDto .class , PERSON + "." + PersonDto .BIRTH_DATE_YYYY , Integer .class , separator ));
190+ importColumns .add (ImportColumn .from (CaseDataDto .class , EPID_NUMBER , String .class , separator ));
191+ importColumns .add (ImportColumn .from (CaseDataDto .class , REPORT_DATE , Date .class , separator ));
192+ importColumns .add (ImportColumn .from (CaseDataDto .class , CASE_ORIGIN , CaseOrigin .class , separator ));
193+ importColumns .add (ImportColumn .from (CaseDataDto .class , REGION , RegionReferenceDto .class , separator ));
194+ importColumns .add (ImportColumn .from (CaseDataDto .class , DISTRICT , DistrictReferenceDto .class , separator ));
195+ importColumns .add (ImportColumn .from (CaseDataDto .class , COMMUNITY , CommunityReferenceDto .class , separator ));
196+ importColumns .add (ImportColumn .from (CaseDataDto .class , FACILITY_TYPE , FacilityType .class , separator ));
197+ importColumns .add (ImportColumn .from (CaseDataDto .class , HEALTH_FACILITY , FacilityReferenceDto .class , separator ));
198+ importColumns .add (ImportColumn .from (CaseDataDto .class , HEALTH_FACILITY_DETAILS , String .class , separator ));
199+ importColumns .add (ImportColumn .from (CaseDataDto .class , POINT_OF_ENTRY , PointOfEntryReferenceDto .class , separator ));
200+ importColumns .add (ImportColumn .from (CaseDataDto .class , POINT_OF_ENTRY_DETAILS , String .class , separator ));
201+ importColumns .add (ImportColumn .from (CaseDataDto .class , SYMPTOMS + "." + SymptomsDto .ONSET_DATE , Date .class , separator ));
192202
193203 writeTemplate (Paths .get (getCaseLineListingImportTemplateFilePath ()), importColumns , false );
194204 }
@@ -203,19 +213,21 @@ public void generatePopulationDataImportTemplateFile() throws IOException {
203213
204214 createExportDirectoryIfNecessary ();
205215
216+ char separator = configFacade .getCsvSeparator ();
217+
206218 List <ImportColumn > importColumns = new ArrayList <>();
207- importColumns .add (ImportColumn .from (PopulationDataDto .class , PopulationDataDto .REGION , RegionReferenceDto .class ));
208- importColumns .add (ImportColumn .from (PopulationDataDto .class , PopulationDataDto .DISTRICT , DistrictReferenceDto .class ));
209- importColumns .add (ImportColumn .from (RegionDto .class , RegionDto .GROWTH_RATE , Float .class ));
210- importColumns .add (ImportColumn .from (PopulationDataDto .class , "TOTAL" , Integer .class ));
211- importColumns .add (ImportColumn .from (PopulationDataDto .class , "MALE_TOTAL" , Integer .class ));
212- importColumns .add (ImportColumn .from (PopulationDataDto .class , "FEMALE_TOTAL" , Integer .class ));
213- importColumns .add (ImportColumn .from (PopulationDataDto .class , "OTHER_TOTAL" , Integer .class ));
219+ importColumns .add (ImportColumn .from (PopulationDataDto .class , PopulationDataDto .REGION , RegionReferenceDto .class , separator ));
220+ importColumns .add (ImportColumn .from (PopulationDataDto .class , PopulationDataDto .DISTRICT , DistrictReferenceDto .class , separator ));
221+ importColumns .add (ImportColumn .from (RegionDto .class , RegionDto .GROWTH_RATE , Float .class , separator ));
222+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "TOTAL" , Integer .class , separator ));
223+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "MALE_TOTAL" , Integer .class , separator ));
224+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "FEMALE_TOTAL" , Integer .class , separator ));
225+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "OTHER_TOTAL" , Integer .class , separator ));
214226 for (AgeGroup ageGroup : AgeGroup .values ()) {
215- importColumns .add (ImportColumn .from (PopulationDataDto .class , "TOTAL_" + ageGroup .name (), Integer .class ));
216- importColumns .add (ImportColumn .from (PopulationDataDto .class , "MALE_" + ageGroup .name (), Integer .class ));
217- importColumns .add (ImportColumn .from (PopulationDataDto .class , "FEMALE_" + ageGroup .name (), Integer .class ));
218- importColumns .add (ImportColumn .from (PopulationDataDto .class , "OTHER_" + ageGroup .name (), Integer .class ));
227+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "TOTAL_" + ageGroup .name (), Integer .class , separator ));
228+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "MALE_" + ageGroup .name (), Integer .class , separator ));
229+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "FEMALE_" + ageGroup .name (), Integer .class , separator ));
230+ importColumns .add (ImportColumn .from (PopulationDataDto .class , "OTHER_" + ageGroup .name (), Integer .class , separator ));
219231 }
220232
221233 writeTemplate (Paths .get (getPopulationDataImportTemplateFilePath ()), importColumns , false );
@@ -260,8 +272,10 @@ private <T extends EntityDto> void generateImportTemplateFile(Class<T> clazz, Pa
260272
261273 createExportDirectoryIfNecessary ();
262274
275+ char separator = configFacade .getCsvSeparator ();
276+
263277 List <ImportColumn > importColumns = new ArrayList <>();
264- appendListOfFields (importColumns , clazz , "" );
278+ appendListOfFields (importColumns , clazz , "" , separator );
265279
266280 writeTemplate (filePath , importColumns , false );
267281 }
@@ -360,7 +374,7 @@ public String getContactImportTemplateFilePath() {
360374 * fields in the order of declaration (which is what we need here), but that could change
361375 * in the future.
362376 */
363- private void appendListOfFields (List <ImportColumn > importColumns , Class <?> clazz , String prefix ) {
377+ private void appendListOfFields (List <ImportColumn > importColumns , Class <?> clazz , String prefix , char separator ) {
364378
365379 for (Field field : clazz .getDeclaredFields ()) {
366380 if (Modifier .isStatic (field .getModifiers ())) {
@@ -406,13 +420,15 @@ private void appendListOfFields(List<ImportColumn> importColumns, Class<?> clazz
406420 if (EntityDto .class .isAssignableFrom (field .getType ()) && !isInfrastructureClass (field .getType ())) {
407421 appendListOfFields (importColumns ,
408422 field .getType (),
409- prefix == null || prefix .isEmpty () ? field .getName () + "." : prefix + field .getName () + "." );
423+ prefix == null || prefix .isEmpty () ? field .getName () + "." : prefix + field .getName () + "." ,
424+ separator );
410425 } else if (PersonReferenceDto .class .isAssignableFrom (field .getType ()) && !isInfrastructureClass (field .getType ())) {
411426 appendListOfFields (importColumns ,
412427 PersonDto .class ,
413- prefix == null || prefix .isEmpty () ? field .getName () + "." : prefix + field .getName () + "." );
428+ prefix == null || prefix .isEmpty () ? field .getName () + "." : prefix + field .getName () + "." ,
429+ separator );
414430 } else {
415- importColumns .add (ImportColumn .from (clazz , prefix + field .getName (), field .getType ()));
431+ importColumns .add (ImportColumn .from (clazz , prefix + field .getName (), field .getType (), separator ));
416432 }
417433 }
418434 }
@@ -430,7 +446,7 @@ private boolean isInfrastructureClass(Class<?> clazz) {
430446 private void writeCommentLine (CSVWriter csvWriter , String [] line ) {
431447 String [] commentedLine = Arrays .copyOf (line , line .length );
432448 commentedLine [0 ] = CSVCommentLineValidator .DEFAULT_COMMENT_LINE_PREFIX + commentedLine [0 ];
433- csvWriter .writeNext (commentedLine );
449+ csvWriter .writeNext (commentedLine , false );
434450 }
435451
436452 /**
@@ -476,7 +492,7 @@ private String resolvePlaceholders(String content) {
476492 Map <String , Provider <String >> placeholderResolvers = new HashMap <>();
477493 placeholderResolvers .put (ImportFacade .ACTIVE_DISEASES_PLACEHOLDER ,
478494 () -> StringUtils .join (diseaseConfigurationFacade .getAllActiveDiseases ().stream ().map (Disease ::getName ).collect (Collectors .toList ()),
479- configFacade .getCsvSeparator ()));
495+ ImportExportUtils . getCSVSeparatorDifferentFromCurrent ( configFacade .getCsvSeparator () )));
480496
481497 for (Map .Entry <String , Provider <String >> placeholderResolver : placeholderResolvers .entrySet ()) {
482498 content = content .replace (placeholderResolver .getKey (), placeholderResolver .getValue ().get ());
0 commit comments