From 063118f392447fedd831da7c84c15d982b0da8dc Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 7 Jun 2020 11:37:53 +0200 Subject: [PATCH] #338 - prevent creation of a template with already existing name --- .../templates/TemplateController.java | 7 ++----- .../budgetmaster/templates/TemplateService.java | 7 +++++++ .../templates/TemplateValidator.java | 17 +++++++++++++++++ .../deadlocker8/budgetmaster/utils/Strings.java | 1 + 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java index f07261a57..4edf2e672 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java @@ -65,10 +65,7 @@ public class TemplateController extends BaseController @GetMapping("/templates/fromTransactionModal") public String fromTransactionModal(Model model) { - final List<String> templateNames = templateService.getRepository().findAll().stream() - .map(Template::getTemplateName) - .collect(Collectors.toList()); - model.addAttribute("existingTemplateNames", GSON.toJson(templateNames)); + model.addAttribute("existingTemplateNames", GSON.toJson(templateService.getExistingTemplateNames())); return "templates/createFromTransactionModal"; } @@ -158,7 +155,7 @@ public class TemplateController extends BaseController @RequestParam(value = "isPayment", required = false) boolean isPayment) { - TemplateValidator templateValidator = new TemplateValidator(); + TemplateValidator templateValidator = new TemplateValidator(templateService.getExistingTemplateNames()); templateValidator.validate(template, bindingResult); transactionService.handleAmount(template, isPayment); diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java index 45c614903..d4b4768ea 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java @@ -99,4 +99,11 @@ public class TemplateService implements Resetable model.addAttribute("isPayment", isPayment); model.addAttribute("suggestionsJSON", GSON.toJson(new ArrayList<String>())); } + + public List<String> getExistingTemplateNames() + { + return getRepository().findAll().stream() + .map(Template::getTemplateName) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java index 39e12581c..be1effcdc 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateValidator.java @@ -6,9 +6,18 @@ import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; +import java.util.List; + public class TemplateValidator implements Validator { + private List<String> existingTemplateNames; + + public TemplateValidator(List<String> existingTemplateNames) + { + this.existingTemplateNames = existingTemplateNames; + } + public boolean supports(Class clazz) { return Transaction.class.equals(clazz); @@ -17,5 +26,13 @@ public class TemplateValidator implements Validator public void validate(Object obj, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "templateName", Strings.WARNING_EMPTY_TRANSACTION_NAME); + + Template template = (Template)obj; + + boolean isNameAlreadyUsed = this.existingTemplateNames.stream().anyMatch(template.getTemplateName()::equalsIgnoreCase); + if(isNameAlreadyUsed) + { + errors.rejectValue("templateName", Strings.WARNING_DUPLICATE_TEMPLATE_NAME); + } } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java index 2fc6204d2..0cd2a8311 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java @@ -28,6 +28,7 @@ public class Strings public static final String WARNING_EMPTY_CHART_SCRIPT = "warning.empty.chart.script"; public static final String WARNING_EMPTY_NUMBER = "warning.empty.number"; public static final String WARNING_EMPTY_NUMBER_ZERO_ALLOWED = "warning.empty.number.zero.allowed"; + public static final String WARNING_DUPLICATE_TEMPLATE_NAME = "warning.duplicate.template.name"; //REPORT public static final String REPORT_FOOTER_LEFT = "report.footer.left"; -- GitLab