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

Commit 20bd619

Browse files
lgallgal
authored andcommitted
SORMAS-Foundation#3136 sormas2sormas - use ValidationErrors instead of map to cleanup code + cleanup code for checking case and contact edit rights
1 parent 8840a0c commit 20bd619

8 files changed

Lines changed: 53 additions & 59 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/SormasToSormasErrorResponse.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,24 @@
1616
package de.symeda.sormas.api.sormastosormas;
1717

1818
import java.io.Serializable;
19-
import java.util.List;
2019
import java.util.Map;
2120

2221
public class SormasToSormasErrorResponse implements Serializable {
2322

24-
private Map<String, Map<String, List<String>>> errors;
23+
private Map<String, ValidationErrors> errors;
2524

2625
public SormasToSormasErrorResponse() {
2726
}
2827

29-
public SormasToSormasErrorResponse(Map<String, Map<String, List<String>>> errors) {
28+
public SormasToSormasErrorResponse(Map<String, ValidationErrors> errors) {
3029
this.errors = errors;
3130
}
3231

33-
public Map<String, Map<String, List<String>>> getErrors() {
32+
public Map<String, ValidationErrors> getErrors() {
3433
return errors;
3534
}
3635

37-
public void setErrors(Map<String, Map<String, List<String>>> errors) {
36+
public void setErrors(Map<String, ValidationErrors> errors) {
3837
this.errors = errors;
3938
}
4039
}

sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/SormasToSormasException.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,26 @@
1515

1616
package de.symeda.sormas.api.sormastosormas;
1717

18-
import java.util.List;
1918
import java.util.Map;
2019

2120
public class SormasToSormasException extends Exception {
2221

23-
private Map<String, Map<String, List<String>>> errors;
22+
private Map<String, ValidationErrors> errors;
2423

2524
public SormasToSormasException(String message) {
2625
super(message);
2726
}
2827

29-
public SormasToSormasException(String message, Map<String, Map<String, List<String>>> errors) {
28+
public SormasToSormasException(String message, Map<String, ValidationErrors> errors) {
3029
super(message);
3130
this.errors = errors;
3231
}
3332

34-
public Map<String, Map<String, List<String>>> getErrors() {
33+
public Map<String, ValidationErrors> getErrors() {
3534
return errors;
3635
}
3736

38-
public void setErrors(Map<String, Map<String, List<String>>> errors) {
37+
public void setErrors(Map<String, ValidationErrors> errors) {
3938
this.errors = errors;
4039
}
4140
}

sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/SormasToSormasValidationException.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,17 @@
1515

1616
package de.symeda.sormas.api.sormastosormas;
1717

18-
import java.util.List;
1918
import java.util.Map;
2019

2120
public class SormasToSormasValidationException extends Exception {
2221

23-
private final Map<String, Map<String, List<String>>> errors;
22+
private final Map<String, ValidationErrors> errors;
2423

25-
public SormasToSormasValidationException(Map<String, Map<String, List<String>>> errors) {
24+
public SormasToSormasValidationException(Map<String, ValidationErrors> errors) {
2625
this.errors = errors;
2726
}
2827

29-
public Map<String, Map<String, List<String>>> getErrors() {
28+
public Map<String, ValidationErrors> getErrors() {
3029
return errors;
3130
}
3231
}

sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/ValidationErrors.java renamed to sormas-api/src/main/java/de/symeda/sormas/api/sormastosormas/ValidationErrors.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,19 @@
1313
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1414
*/
1515

16-
package de.symeda.sormas.backend.sormastosormas;
16+
package de.symeda.sormas.api.sormastosormas;
1717

18+
import java.io.Serializable;
1819
import java.util.ArrayList;
1920
import java.util.HashMap;
2021
import java.util.List;
2122
import java.util.Map;
2223

23-
public class ValidationErrors {
24+
public class ValidationErrors implements Serializable {
2425

25-
private Map<String, List<String>> errors;
26+
private static final long serialVersionUID = 1635651082132555214L;
27+
28+
private final Map<String, List<String>> errors;
2629

2730
public ValidationErrors() {
2831
errors = new HashMap<>();
@@ -42,9 +45,11 @@ public void add(String group, String message) {
4245
}
4346

4447
public void addAll(ValidationErrors errors) {
45-
errors.errors.forEach((group, messages) -> {
46-
messages.forEach(message -> add(group, message));
47-
});
48+
for (Map.Entry<String, List<String>> error : errors.errors.entrySet()) {
49+
for (String message : error.getValue()) {
50+
add(error.getKey(), message);
51+
}
52+
}
4853
}
4954

5055
public Map<String, List<String>> getErrors() {

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,6 @@ public boolean isCaseEditAllowed(Case caze) {
11471147
return caze.getSormasToSormasOriginInfo().isOwnershipHandedOver();
11481148
}
11491149

1150-
return caseJurisdictionChecker.isInJurisdictionOrOwned(caze) && !sormasToSormasShareInfoService.isCaseOwnershipHandedOver(caze);
1150+
return caseJurisdictionChecker.isInJurisdictionOrOwned(caze);
11511151
}
11521152
}

sormas-backend/src/main/java/de/symeda/sormas/backend/contact/ContactService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,6 @@ public boolean isContactEditAllowed(Contact contact) {
12161216
return contact.getSormasToSormasOriginInfo().isOwnershipHandedOver();
12171217
}
12181218

1219-
return contactJurisdictionChecker.isInJurisdictionOrOwned(contact) && !sormasToSormasShareInfoService.isContactOwnershipHandedOver(contact);
1219+
return contactJurisdictionChecker.isInJurisdictionOrOwned(contact);
12201220
}
12211221
}

sormas-backend/src/main/java/de/symeda/sormas/backend/sormastosormas/SormasToSormasFacadeEjb.java

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import de.symeda.sormas.api.sormastosormas.SormasToSormasShareInfoCriteria;
9494
import de.symeda.sormas.api.sormastosormas.SormasToSormasShareInfoDto;
9595
import de.symeda.sormas.api.sormastosormas.SormasToSormasValidationException;
96+
import de.symeda.sormas.api.sormastosormas.ValidationErrors;
9697
import de.symeda.sormas.api.user.UserReferenceDto;
9798
import de.symeda.sormas.api.user.UserRight;
9899
import de.symeda.sormas.api.utils.DataHelper;
@@ -175,7 +176,7 @@ public SormasToSormasFacadeEjb() {
175176
public void saveSharedCases(SormasToSormasEncryptedDataDto encryptedData) throws SormasToSormasException, SormasToSormasValidationException {
176177
SormasToSormasCaseDto[] sharedCases = decryptSharedData(encryptedData, SormasToSormasCaseDto[].class);
177178

178-
Map<String, Map<String, List<String>>> validationErrors = new HashMap<>();
179+
Map<String, ValidationErrors> validationErrors = new HashMap<>();
179180
List<ProcessedCaseData> casesToSave = new ArrayList<>(sharedCases.length);
180181

181182
for (SormasToSormasCaseDto sharedCase : sharedCases) {
@@ -188,7 +189,7 @@ public void saveSharedCases(SormasToSormasEncryptedDataDto encryptedData) throws
188189

189190
ValidationErrors caseErrors = validateCase(caze);
190191
if (caseErrors.hasError()) {
191-
validationErrors.put(buildCaseValidationGroupName(caze), caseErrors.getErrors());
192+
validationErrors.put(buildCaseValidationGroupName(caze), caseErrors);
192193

193194
continue;
194195
}
@@ -200,11 +201,11 @@ public void saveSharedCases(SormasToSormasEncryptedDataDto encryptedData) throws
200201
caseValidationErrors.addAll(caseDataErrors);
201202

202203
if (caseValidationErrors.hasError()) {
203-
validationErrors.put(buildCaseValidationGroupName(caze), caseValidationErrors.getErrors());
204+
validationErrors.put(buildCaseValidationGroupName(caze), caseValidationErrors);
204205
}
205206

206207
if (associatedContacts != null) {
207-
Map<String, Map<String, List<String>>> contactValidationErrors = processAssociatedContacts(associatedContacts, originInfo);
208+
Map<String, ValidationErrors> contactValidationErrors = processAssociatedContacts(associatedContacts, originInfo);
208209
validationErrors.putAll(contactValidationErrors);
209210
}
210211

@@ -243,7 +244,7 @@ public void saveSharedCases(SormasToSormasEncryptedDataDto encryptedData) throws
243244
public void saveSharedContacts(SormasToSormasEncryptedDataDto sharedData) throws SormasToSormasException, SormasToSormasValidationException {
244245
SormasToSormasContactDto[] sharedContacts = decryptSharedData(sharedData, SormasToSormasContactDto[].class);
245246

246-
Map<String, Map<String, List<String>>> validationErrors = new HashMap<>();
247+
Map<String, ValidationErrors> validationErrors = new HashMap<>();
247248
List<ProcessedContactData> contactsToSave = new ArrayList<>(sharedContacts.length);
248249

249250
for (SormasToSormasContactDto sharedContact : sharedContacts) {
@@ -252,21 +253,19 @@ public void saveSharedContacts(SormasToSormasEncryptedDataDto sharedData) throws
252253

253254
ValidationErrors contactErrors = validateContact(contact);
254255
if (contactErrors.hasError()) {
255-
validationErrors.put(buildContactValidationGroupName(contact), contactErrors.getErrors());
256+
validationErrors.put(buildContactValidationGroupName(contact), contactErrors);
256257

257258
continue;
258259
}
259260

260-
ValidationErrors contactErrorsErrors = new ValidationErrors();
261-
262261
ValidationErrors originInfoErrors = processOriginInfo(contact.getSormasToSormasOriginInfo());
263-
contactErrorsErrors.addAll(originInfoErrors);
262+
contactErrors.addAll(originInfoErrors);
264263

265264
ValidationErrors contactDataErrors = processContactData(contact, person);
266265
contactErrors.addAll(contactDataErrors);
267266

268267
if (contactErrors.hasError()) {
269-
validationErrors.put(buildContactValidationGroupName(contact), contactErrors.getErrors());
268+
validationErrors.put(buildContactValidationGroupName(contact), contactErrors);
270269
}
271270

272271
contactsToSave.add(ProcessedContactData.create(person, contact));
@@ -384,15 +383,13 @@ public ServerAccessDataReferenceDto getOrganizationRef(String id) {
384383
}
385384

386385
private void validateCasesBeforeSend(List<Case> cases) throws SormasToSormasException {
387-
Map<String, Map<String, List<String>>> validationErrors = new HashMap<>();
386+
Map<String, ValidationErrors> validationErrors = new HashMap<>();
388387
for (Case caze : cases) {
389388
if (!caseService.isCaseEditAllowed(caze)) {
390-
Map<String, List<String>> error = new HashMap<>(1);
391-
error.put(
392-
I18nProperties.getCaption(Captions.CaseData),
393-
Collections.singletonList(I18nProperties.getString(Strings.errorSormasToSormasNotEditable)));
394-
395-
validationErrors.put(buildCaseValidationGroupName(caze), error);
389+
validationErrors.put(
390+
buildCaseValidationGroupName(caze),
391+
ValidationErrors
392+
.create(I18nProperties.getCaption(Captions.CaseData), I18nProperties.getString(Strings.errorSormasToSormasNotEditable)));
396393
}
397394
}
398395

@@ -402,15 +399,13 @@ private void validateCasesBeforeSend(List<Case> cases) throws SormasToSormasExce
402399
}
403400

404401
private void validateContactsBeforeSend(List<Contact> contacts) throws SormasToSormasException {
405-
Map<String, Map<String, List<String>>> validationErrors = new HashMap<>();
402+
Map<String, ValidationErrors> validationErrors = new HashMap<>();
406403
for (Contact contact : contacts) {
407404
if (!contactService.isContactEditAllowed(contact)) {
408-
Map<String, List<String>> error = new HashMap<>(1);
409-
error.put(
410-
I18nProperties.getCaption(Captions.Contact),
411-
Collections.singletonList(I18nProperties.getString(Strings.errorSormasToSormasNotEditable)));
412-
413-
validationErrors.put(buildCaseValidationGroupName(contact), error);
405+
validationErrors.put(
406+
buildCaseValidationGroupName(contact),
407+
ValidationErrors
408+
.create(I18nProperties.getCaption(Captions.Contact), I18nProperties.getString(Strings.errorSormasToSormasNotEditable)));
414409
}
415410
}
416411

@@ -500,10 +495,10 @@ private ValidationErrors processCaseData(
500495
return caseValidationErrors;
501496
}
502497

503-
private Map<String, Map<String, List<String>>> processAssociatedContacts(
498+
private Map<String, ValidationErrors> processAssociatedContacts(
504499
List<SormasToSormasCaseDto.AssociatedContactDto> associatedContacts,
505500
SormasToSormasOriginInfoDto originInfo) {
506-
Map<String, Map<String, List<String>>> validationErrors = new HashMap<>();
501+
Map<String, ValidationErrors> validationErrors = new HashMap<>();
507502

508503
associatedContacts.forEach(associatedContact -> {
509504
ContactDto contact = associatedContact.getContact();
@@ -512,7 +507,7 @@ private Map<String, Map<String, List<String>>> processAssociatedContacts(
512507
ValidationErrors contactErrors = processContactData(contact, associatedContact.getPerson());
513508

514509
if (contactErrors.hasError()) {
515-
validationErrors.put(buildContactValidationGroupName(contact), contactErrors.getErrors());
510+
validationErrors.put(buildContactValidationGroupName(contact), contactErrors);
516511
}
517512
});
518513

@@ -754,11 +749,9 @@ private <T> T handleValidationError(Supplier<T> saveOperation, String validation
754749
try {
755750
return saveOperation.get();
756751
} catch (ValidationRuntimeException exception) {
757-
Map<String, List<String>> validationError = new HashMap<>(1);
758-
validationError.put(I18nProperties.getCaption(validationGroupCaption), Collections.singletonList(exception.getMessage()));
759-
760-
Map<String, Map<String, List<String>>> parentError = new HashMap<>(1);
761-
parentError.put(parentValidationGroup, validationError);
752+
Map<String, ValidationErrors> parentError = new HashMap<>(1);
753+
parentError
754+
.put(parentValidationGroup, ValidationErrors.create(I18nProperties.getCaption(validationGroupCaption), exception.getMessage()));
762755

763756
throw new SormasToSormasValidationException(parentError);
764757
}
@@ -903,7 +896,7 @@ private void sendEntityToSormas(List<?> entities, String endpoint, SormasToSorma
903896
int statusCode = response.getStatus();
904897
if (statusCode != HttpStatus.SC_NO_CONTENT) {
905898
String errorMessage = response.readEntity(String.class);
906-
Map<String, Map<String, List<String>>> errors = null;
899+
Map<String, ValidationErrors> errors = null;
907900

908901
try {
909902
SormasToSormasErrorResponse errorResponse = objectMapper.readValue(errorMessage, SormasToSormasErrorResponse.class);

sormas-ui/src/main/java/de/symeda/sormas/ui/sormastosormas/SormasToSormasController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
import java.util.Collection;
1919
import java.util.Collections;
20-
import java.util.List;
21-
import java.util.Map;
2220
import java.util.stream.Collectors;
2321

2422
import com.vaadin.server.Sizeable;
@@ -38,6 +36,7 @@
3836
import de.symeda.sormas.api.i18n.I18nProperties;
3937
import de.symeda.sormas.api.sormastosormas.SormasToSormasException;
4038
import de.symeda.sormas.api.sormastosormas.SormasToSormasOptionsDto;
39+
import de.symeda.sormas.api.sormastosormas.ValidationErrors;
4140
import de.symeda.sormas.ui.SormasUI;
4241
import de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent;
4342
import de.symeda.sormas.ui.utils.CssStyles;
@@ -153,8 +152,8 @@ private Component buildShareErrorMessage(SormasToSormasException ex) {
153152
return errorsLayout;
154153
}
155154

156-
private Component[] formatGroupErrors(Map<String, List<String>> errors) {
157-
return errors.entrySet().stream().map(e -> {
155+
private Component[] formatGroupErrors(ValidationErrors errors) {
156+
return errors.getErrors().entrySet().stream().map(e -> {
158157
Label groupLabel = new Label(e.getKey() + ":");
159158
groupLabel.addStyleName(CssStyles.LABEL_BOLD);
160159
HorizontalLayout layout = new HorizontalLayout(groupLabel, new Label(String.join(", ", e.getValue())));

0 commit comments

Comments
 (0)