瀏覽代碼

Refactored certificate validators (singles)

Andrew Grant 4 月之前
父節點
當前提交
8b1e819cda

+ 7 - 11
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateCommandValidatorImpl.java

@@ -5,26 +5,22 @@
 
 package scot.carricksoftware.grants.validators.certificates.deathcertificate;
 
-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.deathcertificates.DeathCertificateCommand;
-import scot.carricksoftware.grants.constants.ApplicationConstants;
-import scot.carricksoftware.grants.constants.ValidationConstants;
 
 
 @Component
 public class DeathCertificateCommandValidatorImpl implements DeathCertificateCommandValidator {
-    private static final Logger logger = LogManager.getLogger(DeathCertificateCommandValidatorImpl.class);
+
+    final DeathCertificateNullFieldsValidator deathCertificateNullFieldsValidator;
+
+    public DeathCertificateCommandValidatorImpl(DeathCertificateNullFieldsValidator deathCertificateNullFieldsValidator) {
+        this.deathCertificateNullFieldsValidator = deathCertificateNullFieldsValidator;
+    }
 
     public void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
-        logger.debug("Validating death certificate command");
-        if (deathCertificateCommand.getDeceased() == null) {
-            bindingResult.rejectValue("deceased", ApplicationConstants.EMPTY_STRING,
-                    null,
-                    ValidationConstants.PERSON_IS_NULL);
-        }
+        deathCertificateNullFieldsValidator.validate(deathCertificateCommand, bindingResult);
     }
 
 }

+ 17 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateNullFieldsValidator.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.deathcertificate;
+
+
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.deathcertificates.DeathCertificateCommand;
+
+public interface DeathCertificateNullFieldsValidator {
+
+    @SuppressWarnings("unused")
+    void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult);
+}
+

+ 75 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateNullFieldsValidatorImpl.java

@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.deathcertificate;
+
+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.deathcertificates.DeathCertificateCommand;
+import scot.carricksoftware.grants.validators.helpers.ValidateTypesImpl;
+
+@Component
+public class DeathCertificateNullFieldsValidatorImpl implements DeathCertificateNullFieldsValidator {
+
+    private static final Logger logger = LogManager.getLogger(DeathCertificateNullFieldsValidatorImpl.class);
+
+    private final ValidateTypesImpl validateTypes;
+
+    public DeathCertificateNullFieldsValidatorImpl(ValidateTypesImpl validateTypes) {
+        this.validateTypes = validateTypes;
+    }
+
+    @Override
+    public void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        validateCertificateNumber(deathCertificateCommand, bindingResult);
+        validateVolume(deathCertificateCommand, bindingResult);
+        validateNumber(deathCertificateCommand, bindingResult);
+        validateDeceased(deathCertificateCommand, bindingResult);
+        validateSex(deathCertificateCommand, bindingResult);
+        validateCauseOfDeath(deathCertificateCommand, bindingResult);
+        validateInformantQualification(deathCertificateCommand, bindingResult);
+    }
+
+    private void validateDeceased(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateDeceased");
+        validateTypes.validatePerson(deathCertificateCommand.getDeceased(), "deceased", "Deceased cannot be null", bindingResult);
+    }
+
+    private void validateCertificateNumber(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateCertificateNumber");
+        validateTypes.validateString(deathCertificateCommand.getCertificateNumber(), "certificateNumber","Certificate number must exist", bindingResult);
+    }
+
+    private void validateVolume(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateVolume");
+        validateTypes.validateString(deathCertificateCommand.getVolume(), "volume","Volume must exist", bindingResult);
+    }
+
+    private void validateNumber(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateNumber");
+        validateTypes.validateString(deathCertificateCommand.getNumber(), "number","Number must exist", bindingResult);
+    }
+
+    private void validateCauseOfDeath(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateCauseOfDeath");
+        validateTypes.validateString(deathCertificateCommand.getCauseOfDeath(), "causeOfDeath","Cause of Death must exist", bindingResult);
+    }
+
+    private void validateInformantQualification(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateInformantQualification");
+        validateTypes.validateString(deathCertificateCommand.getInformantQualification(), "informantQualification","Informant Qualification must exist", bindingResult);
+    }
+
+    private void validateSex(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateSex");
+        validateTypes.validateSex(deathCertificateCommand.getSex(), "sex","Sex cannot be null", bindingResult);
+    }
+
+
+
+
+}

+ 4 - 0
src/main/java/scot/carricksoftware/grants/validators/helpers/ValidateTypes.java

@@ -12,6 +12,10 @@ import scot.carricksoftware.grants.enums.general.Sex;
 import scot.carricksoftware.grants.enums.certificates.CertificateType;
 
 public interface ValidateTypes {
+
+    @SuppressWarnings("unused")
+    void validateString(String string, String fieldName, String message, BindingResult bindingResult);
+
     void validatePerson(Person person, String field, String message, BindingResult bindingResult);
 
     void validateOrganisation(Organisation organisation, String field, String message, BindingResult bindingResult);

+ 7 - 0
src/main/java/scot/carricksoftware/grants/validators/helpers/ValidateTypesImpl.java

@@ -16,6 +16,13 @@ import scot.carricksoftware.grants.enums.certificates.CertificateType;
 @Component
 public class ValidateTypesImpl implements ValidateTypes {
 
+    @Override
+    public void validateString(String string, String fieldName, String message, BindingResult bindingResult) {
+        if (string == null  || string.isEmpty()) {
+            bindingResult.rejectValue(fieldName, ApplicationConstants.EMPTY_STRING, null, message);
+        }
+    }
+
     @Override
     public void validatePerson(Person person, String fieldName, String message, BindingResult bindingResult) {
         if (person == null) {

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

@@ -309,7 +309,7 @@
                     <label for="usualResidence">Usual Residence :&nbsp;</label>
                 </td>
                 <td style="text-align: left;">
-                    <select id="usualResidence" name="usualResidence" th:field="*{usualResidence}">
+                    <select id="usualResidence" name="usualResidence" th:field="*{usualResidence}">m
                         <option th:value="${''}" th:text="${''}"></option>
                         <option th:each="place : ${places}"
                                 th:value="${place.id}" th:text="${place.toString()}"></option>
@@ -545,6 +545,11 @@
                         <input class="informantQualification" id="informantQualification"
                                th:field="*{informantQualification}" type="text">
                     </div>
+                <div th:if="${#fields.hasErrors('informantQualification')}">
+                    <ul class="text-danger">
+                        <li th:each="err : ${#fields.errors('informantQualification')}" th:text="${err}"/>
+                    </ul>
+                </div>
                 </td>
             </tr>
             <tr>