浏览代码

Birth Certificate validator

Andrew Grant 6 月之前
父节点
当前提交
16612a15b7

+ 3 - 0
src/main/java/scot/carricksoftware/grants/constants/ValidationConstants.java

@@ -35,6 +35,9 @@ public class ValidationConstants {
     public static final String NUMBER_IS_NULL = "The number cannot be null.";
     public static final String NUMBER_IS_INVALID = "The number must be a non negative integer.";
     public static final String REGISTRATION_VOLUME_IS_NULL = "The volume cannot be null.";
+    public static final String WHERE_BORN_IS_NULL = "Where born cannot be null.";
+    public static final String SEX_IS_NULL = "Sex cannot be null.";
+    public static final String WHEN_BORN_INCORRECT_FORMAT = "The format should be dd/MM/yyyy hh:mm.";
 
     public static final String PLACE_IS_NULL = "The place cannot be null.";
     public static final String COUNTRY_IS_NULL = "The country cannot be null.";

+ 1 - 0
src/main/java/scot/carricksoftware/grants/validators/census/censusentry/CensusEntryCommandValidatorImpl.java

@@ -95,6 +95,7 @@ public class CensusEntryCommandValidatorImpl implements CensusEntryCommandValida
         }
     }
 
+    @SuppressWarnings("DuplicatedCode")
     private void validateInteger(String part, int low, int high, String validationConstant, String field, BindingResult bindingResult) {
         boolean invalid = false;
         try {

+ 102 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/BirthCertificateCommandPartThreeValidator.java

@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 19/03/2025, 09:50. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.birthcertificates.BirthCertificateCommand;
+import scot.carricksoftware.grants.constants.ApplicationConstants;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+
+@Component
+public class BirthCertificateCommandPartThreeValidator {
+
+    private static final Logger logger = LogManager.getLogger(BirthCertificateCommandPartThreeValidator.class);
+
+    public void validate(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
+        logger.debug("Validating birth certificate command (part two)");
+
+        validateSex(birthCertificateCommand, bindingResult);
+        validateWhenBorn(birthCertificateCommand, bindingResult);
+        validateWhereBorn(birthCertificateCommand, bindingResult);
+    }
+
+
+    private void validateWhereBorn(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
+        logger.debug("Validating where born");
+        if (birthCertificateCommand.getWhereBorn() == null || birthCertificateCommand.getWhereBorn().isEmpty()) {
+            bindingResult.rejectValue("whereBorn", ApplicationConstants.EMPTY_STRING,
+                    null,
+                    ValidationConstants.WHERE_BORN_IS_NULL);
+        }
+    }
+
+
+    private void validateSex(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
+        logger.debug("Validating sex");
+        if (birthCertificateCommand.getSex() == null ) {
+            bindingResult.rejectValue("sex", ApplicationConstants.EMPTY_STRING,
+                    null,
+                    ValidationConstants.SEX_IS_NULL);
+        }
+    }
+
+    private void validateWhenBorn(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
+        String[] parts = birthCertificateCommand.getWhenBorn().split("/");
+        if (parts.length != 3) {
+            bindingResult.rejectValue("whenBorn", ApplicationConstants.EMPTY_STRING,
+                    null,
+                    ValidationConstants.WHEN_BORN_INCORRECT_FORMAT);
+        } else {
+            validateInteger(parts[0], 1, 31, ValidationConstants.WHEN_BORN_INCORRECT_FORMAT, "whenBorn", bindingResult);
+            validateInteger(parts[1], 1, 12, ValidationConstants.WHEN_BORN_INCORRECT_FORMAT, "whenBorn", bindingResult);
+            validateYearAndTime(parts[2], bindingResult);
+        }
+    }
+
+
+    @SuppressWarnings("DuplicatedCode")
+    private void validateInteger(String part, int low, int high, String validationConstant, String field, BindingResult bindingResult) {
+        boolean invalid = false;
+        try {
+            int value = Integer.parseInt(part);
+            if (value < low || value > high) {
+                invalid = true;
+            }
+        } catch (RuntimeException e) {
+            invalid = true;
+        }
+        if (invalid) {
+            bindingResult.rejectValue(field, ApplicationConstants.EMPTY_STRING,
+                    null,
+                    validationConstant);
+        }
+    }
+
+    private void validateYearAndTime(String string, BindingResult bindingResult) {
+        String[] parts = string.split(" ");
+        if (parts.length != 2) {
+            bindingResult.rejectValue("whenBorn", ApplicationConstants.EMPTY_STRING,
+                    null,
+                    ValidationConstants.WHEN_BORN_INCORRECT_FORMAT);
+        }
+        else {
+            validateInteger(parts[0], 1600, 2029, ValidationConstants.WHEN_BORN_INCORRECT_FORMAT, "whenBorn", bindingResult);
+            validateTime(parts[1], "whenBorn", bindingResult);
+        }
+    }
+
+    private void validateTime(String time, String whenBorn, BindingResult bindingResult) {
+        String[] parts = time.split(":");
+        validateInteger(parts[0], 0, 24, ValidationConstants.WHEN_BORN_INCORRECT_FORMAT, "whenBorn", bindingResult);
+        validateInteger(parts[1], 0, 59, ValidationConstants.WHEN_BORN_INCORRECT_FORMAT, "whenBorn", bindingResult);
+    }
+
+
+}
+

+ 5 - 1
src/main/java/scot/carricksoftware/grants/validators/certificates/BirthCertificateCommandValidator.java

@@ -17,11 +17,14 @@ public class BirthCertificateCommandValidator {
 
     private final BirthCertificateCommandPartOneValidator partOneValidator;
     private final BirthCertificateCommandPartTwoValidator partTwoValidator;
+    private final BirthCertificateCommandPartThreeValidator partThreeValidator;
 
     public BirthCertificateCommandValidator(BirthCertificateCommandPartOneValidator partOneValidator,
-                                            BirthCertificateCommandPartTwoValidator partTwoValidator) {
+                                            BirthCertificateCommandPartTwoValidator partTwoValidator,
+                                            BirthCertificateCommandPartThreeValidator partThreeValidator) {
         this.partOneValidator = partOneValidator;
         this.partTwoValidator = partTwoValidator;
+        this.partThreeValidator = partThreeValidator;
     }
 
 
@@ -30,6 +33,7 @@ public class BirthCertificateCommandValidator {
 
         partOneValidator.validate(birthCertificateCommand, bindingResult);
         partTwoValidator.validate(birthCertificateCommand, bindingResult);
+        partThreeValidator.validate(birthCertificateCommand, bindingResult);
     }
 
 

+ 1 - 1
src/main/resources/templates/certificates/birthCertificate/form.html

@@ -187,7 +187,7 @@
                     </select>
                     <div th:if="${#fields.hasErrors('sex')}">
                         <ul class="text-danger">
-                            <li th:each="err : ${#fields.errors('newBorn')}" th:text="${err}"/>
+                            <li th:each="err : ${#fields.errors('sex')}" th:text="${err}"/>
                         </ul>
                     </div>
                 </td>