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

Commit 28abd02

Browse files
committed
Updated Open CSV dependency and ignore lines that start with ## at start trough line validators
1 parent c021b9f commit 28abd02

20 files changed

Lines changed: 216 additions & 28 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* SORMAS® - Surveillance Outbreak Response Management & Analysis System
3+
* Copyright © 2016-2020 Helmholtz-Zentrum für Infektionsforschung GmbH (HZI)
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
19+
package de.symeda.sormas.api.utils;
20+
21+
import com.opencsv.exceptions.CsvValidationException;
22+
import com.opencsv.validators.LineValidator;
23+
import org.apache.commons.lang3.StringUtils;
24+
25+
/**
26+
* @author Alex Vidrean
27+
* @since 14-Sep-20
28+
*/
29+
public class CSVCommentLineValidator implements LineValidator {
30+
31+
private final String DEFAULT_COMMENT_LINE_PREFIX = "##";
32+
33+
public static final String ERROR_MESSAGE = "comment";
34+
35+
@Override
36+
public boolean isValid(String line) {
37+
return StringUtils.isBlank(line) || !StringUtils.startsWith(line, DEFAULT_COMMENT_LINE_PREFIX);
38+
}
39+
40+
@Override
41+
public void validate(String line) throws CsvValidationException {
42+
if (!isValid(line)) {
43+
throw new CsvValidationException(ERROR_MESSAGE);
44+
}
45+
}
46+
}

sormas-api/src/main/java/de/symeda/sormas/api/utils/CSVUtils.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,27 @@
2424
import com.opencsv.CSVReader;
2525
import com.opencsv.CSVReaderBuilder;
2626
import com.opencsv.CSVWriter;
27+
import com.opencsv.validators.LineValidator;
28+
import org.apache.commons.lang3.ArrayUtils;
2729

2830
public final class CSVUtils {
2931

3032
private CSVUtils() {
3133
// Hide Utility Class Constructor
3234
}
3335

34-
public static CSVReader createCSVReader(Reader reader, char separator) {
35-
return new CSVReaderBuilder(reader).withCSVParser(new CSVParserBuilder().withSeparator(separator).build()).build();
36+
public static CSVReader createCSVReader(Reader reader, char separator, LineValidator ...lineValidators) {
37+
final CSVReaderBuilder builder = new CSVReaderBuilder(reader).withCSVParser(new CSVParserBuilder().withSeparator(separator).build());
38+
if (ArrayUtils.isNotEmpty(lineValidators)) {
39+
for(LineValidator lineValidator: lineValidators) {
40+
builder.withLineValidator(lineValidator);
41+
}
42+
}
43+
return builder.build();
3644
}
3745

3846
public static CSVWriter createCSVWriter(Writer writer, char separator) {
3947
return new CSVWriter(writer, separator, CSVWriter.DEFAULT_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
4048
}
49+
4150
}

sormas-backend/src/main/java/de/symeda/sormas/backend/sormas2sormas/ServerAccessDataFacadeEjb.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
import com.opencsv.CSVReader;
3838

39+
import com.opencsv.exceptions.CsvException;
3940
import de.symeda.sormas.api.Sormas2SormasConfig;
4041
import de.symeda.sormas.api.sormas2sormas.ServerAccessDataDto;
4142
import de.symeda.sormas.api.sormas2sormas.ServerAccessDataFacade;
@@ -58,7 +59,7 @@ public List<ServerAccessDataDto> getServerAccessDataList() {
5859
return csvReader.readAll().stream()
5960
.map(this::getServerAccessDataDto)
6061
.collect(Collectors.toList());
61-
} catch (IOException e) {
62+
} catch (IOException | CsvException e) {
6263
return Collections.emptyList();
6364
}
6465
}

sormas-base/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@
330330
<dependency>
331331
<groupId>com.opencsv</groupId>
332332
<artifactId>opencsv</artifactId>
333-
<version>4.1</version>
333+
<version>5.2</version>
334334
</dependency>
335335

336336
<dependency>

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/importer/CaseImportLayout.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.IOException;
2222
import java.util.function.Consumer;
2323

24+
import com.opencsv.exceptions.CsvValidationException;
2425
import com.vaadin.server.ClassResource;
2526
import com.vaadin.server.Page;
2627
import com.vaadin.server.StreamResource;
@@ -60,7 +61,7 @@ public void accept(StreamResource resource) {
6061
extendDownloadErrorReportButton(resource);
6162
}
6263
}, currentUI, true);
63-
} catch (IOException e) {
64+
} catch (IOException | CsvValidationException e) {
6465
new Notification(
6566
I18nProperties.getString(Strings.headingImportFailed),
6667
I18nProperties.getString(Strings.messageImportFailed),

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/importer/CaseImporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.List;
2323
import java.util.function.Consumer;
2424

25+
import com.opencsv.exceptions.CsvValidationException;
2526
import org.slf4j.Logger;
2627
import org.slf4j.LoggerFactory;
2728

@@ -91,7 +92,8 @@ public CaseImporter(File inputFile, boolean hasEntityClassRow, UserReferenceDto
9192
}
9293

9394
@Override
94-
public void startImport(Consumer<StreamResource> addErrorReportToLayoutCallback, UI currentUI, boolean duplicatesPossible) throws IOException {
95+
public void startImport(Consumer<StreamResource> addErrorReportToLayoutCallback, UI currentUI, boolean duplicatesPossible)
96+
throws IOException, CsvValidationException {
9597

9698
this.currentUI = currentUI;
9799
super.startImport(addErrorReportToLayoutCallback, currentUI, duplicatesPossible);

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/importer/LineListingImportLayout.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.IOException;
55
import java.util.function.Consumer;
66

7+
import com.opencsv.exceptions.CsvValidationException;
78
import com.vaadin.server.ClassResource;
89
import com.vaadin.server.Page;
910
import com.vaadin.server.StreamResource;
@@ -47,7 +48,7 @@ public void accept(StreamResource resource) {
4748
extendDownloadErrorReportButton(resource);
4849
}
4950
}, currentUI, true);
50-
} catch (IOException e) {
51+
} catch (IOException | CsvValidationException e) {
5152
new Notification(
5253
I18nProperties.getString(Strings.headingImportFailed),
5354
I18nProperties.getString(Strings.messageImportFailed),

sormas-ui/src/main/java/de/symeda/sormas/ui/configuration/infrastructure/InfrastructureImportLayout.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.IOException;
55
import java.util.function.Consumer;
66

7+
import com.opencsv.exceptions.CsvValidationException;
78
import com.vaadin.server.ClassResource;
89
import com.vaadin.server.Page;
910
import com.vaadin.server.StreamResource;
@@ -130,7 +131,7 @@ public void accept(StreamResource resource) {
130131
extendDownloadErrorReportButton(resource);
131132
}
132133
}, currentUI, true);
133-
} catch (IOException e) {
134+
} catch (IOException | CsvValidationException e) {
134135
new Notification(
135136
I18nProperties.getString(Strings.headingImportFailed),
136137
I18nProperties.getString(Strings.messageImportFailed),

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/importer/CaseContactsImportLayout.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.IOException;
55
import java.util.function.Consumer;
66

7+
import com.opencsv.exceptions.CsvValidationException;
78
import com.vaadin.server.ClassResource;
89
import com.vaadin.server.Page;
910
import com.vaadin.ui.Notification;
@@ -40,7 +41,7 @@ public void accept(File file) {
4041
try {
4142
ContactImporter importer = new ContactImporter(file, false, currentUser, caze);
4243
importer.startImport(resource -> extendDownloadErrorReportButton(resource), currentUI, false);
43-
} catch (IOException e) {
44+
} catch (IOException | CsvValidationException e) {
4445
new Notification(
4546
I18nProperties.getString(Strings.headingImportFailed),
4647
I18nProperties.getString(Strings.messageImportFailed),

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/importer/ContactImporter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.function.Consumer;
1111
import java.util.function.Function;
1212

13+
import com.opencsv.exceptions.CsvValidationException;
1314
import org.apache.commons.lang3.StringUtils;
1415

1516
import com.vaadin.server.Sizeable.Unit;
@@ -69,7 +70,8 @@ public ContactImporter(File inputFile, boolean hasEntityClassRow, UserReferenceD
6970
}
7071

7172
@Override
72-
public void startImport(Consumer<StreamResource> addErrorReportToLayoutCallback, UI currentUI, boolean duplicatesPossible) throws IOException {
73+
public void startImport(Consumer<StreamResource> addErrorReportToLayoutCallback, UI currentUI, boolean duplicatesPossible)
74+
throws IOException, CsvValidationException {
7375

7476
this.currentUI = currentUI;
7577
super.startImport(addErrorReportToLayoutCallback, currentUI, duplicatesPossible);

0 commit comments

Comments
 (0)