فهرست منبع

Split Validate Types

Andrew Grant 5 ماه پیش
والد
کامیت
c0bef7b17a

+ 7 - 4
src/main/java/scot/carricksoftware/grants/validators/certificates/birthcertificate/BirthCertificateCommandPartThreeValidatorImpl.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.validation.BindingResult;
 import scot.carricksoftware.grants.commands.certificates.birthcertificates.BirthCertificateCommand;
 import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateTwoFieldTypes;
 import scot.carricksoftware.grants.validators.helpers.ValidateTypes;
 
 
@@ -20,9 +21,11 @@ public class BirthCertificateCommandPartThreeValidatorImpl implements BirthCerti
     private static final Logger logger = LogManager.getLogger(BirthCertificateCommandPartThreeValidatorImpl.class);
 
     private final ValidateTypes validateTypes;
+    private final ValidateTwoFieldTypes validateTwoFieldTypes;
 
-    public BirthCertificateCommandPartThreeValidatorImpl(ValidateTypes validateTypes) {
+    public BirthCertificateCommandPartThreeValidatorImpl(ValidateTypes validateTypes, ValidateTwoFieldTypes validateTwoFieldTypes) {
         this.validateTypes = validateTypes;
+        this.validateTwoFieldTypes = validateTwoFieldTypes;
     }
 
     @Override
@@ -55,18 +58,18 @@ public class BirthCertificateCommandPartThreeValidatorImpl implements BirthCerti
 
     private void validateFatherAndUntrackedFather(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
         logger.debug("Validating father and untracked father");
-        validateTypes.validatePersonAndUntrackedPerson(birthCertificateCommand.getFather(), birthCertificateCommand.getUntrackedFather(), "father", "untrackedFather", ValidationConstants.FATHER_AND_UNTRACKED_FATHER,bindingResult);
+        validateTwoFieldTypes.validatePersonAndUntrackedPerson(birthCertificateCommand.getFather(), birthCertificateCommand.getUntrackedFather(), "father", "untrackedFather", ValidationConstants.FATHER_AND_UNTRACKED_FATHER,bindingResult);
     }
 
     private void validateWhereBornAndUntrackedWhereBorn(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
         logger.debug("Validating where born and untracked where born");
-        validateTypes.validatePlaceAndUntrackedPlace(birthCertificateCommand.getWhereBorn(), birthCertificateCommand.getUntrackedWhereBorn(),
+        validateTwoFieldTypes.validatePlaceAndUntrackedPlace(birthCertificateCommand.getWhereBorn(), birthCertificateCommand.getUntrackedWhereBorn(),
                 "whereBorn", "untrackedWhereBorn", ValidationConstants.WHERE_BORN_AND_UNTRACKED_WHERE_BORN,bindingResult);
     }
 
     private void validateUsualResidences(BirthCertificateCommand birthCertificateCommand, BindingResult bindingResult) {
         logger.debug("Validating where Usual Residence and untracked usual residence");
-        validateTypes.validateOptionalPlaceAndUntrackedPlace(birthCertificateCommand.getFatherUsualResidence(), birthCertificateCommand.getUntrackedFatherUsualResidence(),
+        validateTwoFieldTypes.validateOptionalPlaceAndUntrackedPlace(birthCertificateCommand.getFatherUsualResidence(), birthCertificateCommand.getUntrackedFatherUsualResidence(),
                 "fatherUsualResidence", "untrackedFatherUsualResidence", ValidationConstants.FATHER_USUAL_RESIDENCE_AND_UNTRACKED_FATHER_USUAL_RESIDENCE,bindingResult);
     }
 

+ 19 - 0
src/main/java/scot/carricksoftware/grants/validators/helpers/ValidateTwoFieldTypes.java

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.helpers;
+
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.domains.people.Person;
+import scot.carricksoftware.grants.domains.places.Place;
+
+public interface ValidateTwoFieldTypes {
+
+    void validatePersonAndUntrackedPerson(Person person, String untrackedPerson, String personFieldName, String untrackedFieldName, String message,  BindingResult bindingResult);
+
+    void validatePlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult);
+
+    void validateOptionalPlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult);
+}

+ 52 - 0
src/main/java/scot/carricksoftware/grants/validators/helpers/ValidateTwoFieldTypesImpl.java

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.helpers;
+
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.constants.ApplicationConstants;
+import scot.carricksoftware.grants.domains.people.Person;
+import scot.carricksoftware.grants.domains.places.Place;
+
+@Component
+public class ValidateTwoFieldTypesImpl implements ValidateTwoFieldTypes {
+
+
+    @SuppressWarnings("DuplicatedCode")
+    @Override
+    public void validatePersonAndUntrackedPerson(Person person, String untrackedPerson, String personFieldName, String untrackedFieldName, String message, BindingResult bindingResult) {
+       boolean error = person == null && (untrackedPerson == null || untrackedPerson.trim().isEmpty());
+        if (!(person == null) && untrackedPerson != null &&  !(untrackedPerson.trim().isEmpty())) {
+            error = true;
+        }
+        if (error) {
+            bindingResult.rejectValue(personFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+            bindingResult.rejectValue(untrackedFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+        }
+    }
+
+    @SuppressWarnings("DuplicatedCode")
+    @Override
+    public void validatePlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult) {
+        boolean error = place == null && (untrackedPlace == null || untrackedPlace.trim().isEmpty());
+        if (!(place == null) && untrackedPlace != null &&  !(untrackedPlace.trim().isEmpty())) {
+            error = true;
+        }
+        if (error) {
+            bindingResult.rejectValue(placeFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+            bindingResult.rejectValue(untrackedFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+        }
+    }
+
+    @Override
+    public void validateOptionalPlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult) {
+        if (!(place == null) && untrackedPlace != null &&  !(untrackedPlace.trim().isEmpty())) {
+            bindingResult.rejectValue(placeFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+            bindingResult.rejectValue(untrackedFieldName, ApplicationConstants.EMPTY_STRING, null, message);
+        }
+    }
+
+}

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

@@ -39,5 +39,6 @@ public interface ValidateTypes {
     @SuppressWarnings("EmptyMethod")
     void validatePlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult);
 
+    @SuppressWarnings("unused")
     void validateOptionalPlaceAndUntrackedPlace(Place place, String untrackedPlace, String placeFieldName, String untrackedFieldName, String message, BindingResult bindingResult);
 }

+ 5 - 1
src/test/java/scot/carricksoftware/grants/validators/certificates/birthcertificate/BirthCertificateCommandPartThreeValidatorTest.java

@@ -16,6 +16,7 @@ import scot.carricksoftware.grants.domains.people.Person;
 import scot.carricksoftware.grants.domains.places.Place;
 import scot.carricksoftware.grants.enums.general.Sex;
 import scot.carricksoftware.grants.validators.helpers.ValidateTypes;
+import scot.carricksoftware.grants.validators.helpers.ValidateTwoFieldTypes;
 
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -31,6 +32,9 @@ class BirthCertificateCommandPartThreeValidatorTest {
     @Mock
     private ValidateTypes validateTypesMock;
 
+    @Mock
+    private ValidateTwoFieldTypes validateTwoFieldsTypesMock;
+
     @Mock()
     BirthCertificateCommand birthCertificateCommandMock;
 
@@ -39,7 +43,7 @@ class BirthCertificateCommandPartThreeValidatorTest {
 
     @BeforeEach
     void setUp() {
-        validator = new BirthCertificateCommandPartThreeValidatorImpl(validateTypesMock);
+        validator = new BirthCertificateCommandPartThreeValidatorImpl(validateTypesMock, validateTwoFieldsTypesMock);
     }
 
     @Test