diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java index f07261a57ebab61f383e003064f60a821bcfec57..4edf2e672b0dfdafd2ef8b90ab12a0694d66e42d 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 45c6149030cca1bca229612fbd608ccc9d177e63..d4b4768ea131fda6855786114e0af9381fd0228a 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 39e12581c6914006a1bdd6bab12c22053ea7d2e8..be1effcdc7763e47a6bbb9f6ebb65b257640f341 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 2fc6204d21563bfe54a75fcecc6e21e12c571350..0cd2a8311a77cae81c0509fff056d3ed00ea3715 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";