Browse Source

Marriage Validation

Andrew Grant 4 months ago
parent
commit
b1e0a8f746

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

@@ -20,6 +20,11 @@ public class ValidationConstants {
     public static final String BIRTH_YEAR_AND_AGE_CANNOT_COEXIST = "Birth Year and Age cannot coexist.";
     public static final String BOUNDARY_TYPE_IS_NULL = "The boundary type cannot be null.";
     public static final String BRIDE_IS_NULL = "The bride cannot be null.";
+    public static final String BRIDE_AGE_IS_NULL = "The bride age cannot be null.";
+    public static final String BRIDE_RANK_IS_NULL = "The bride rank cannot be null.";
+    public static final String BRIDE_CONDITION_IS_NULL = "The bride condition cannot be null.";
+    public static final String BRIDE_FATHER_AND_UNTRACKED_FATHER = "One and only one bride father and untracked bride father may be specified.";
+    public static final String BRIDE_USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE = "One and only one bride residence and untracked groom residence may be specified.";
     public static final String CENSUS_IS_NULL = "The census should be specified";
     public static final String CAUSE_OF_DEATH_IS_NULL = "The cause of death should be specified.";
     public static final String CENSUS_NAME_IS_NOT_NULL = "Both Person and Untracked Person cannot be given";
@@ -39,6 +44,11 @@ public class ValidationConstants {
     public static final String FIELD_NOT_NEGATIVE_INTEGER = "Not a non negative integer.";
     public static final String FIRST_PARTY_IS_NULL = "The first party cannot be null.";
     public static final String GROOM_IS_NULL = "The groom cannot be null.";
+    public static final String GROOM_AGE_IS_NULL = "The groom age cannot be null.";
+    public static final String GROOM_RANK_IS_NULL = "The groom rank cannot be null.";
+    public static final String GROOM_CONDITION_IS_NULL = "The groom condition cannot be null.";
+    public static final String GROOM_FATHER_AND_UNTRACKED_FATHER = "One and only one groom father and untracked groom father may be specified.";
+    public static final String GROOM_USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE = "One and only one groom residence and untracked groom residence may be specified.";
     public static final String INFORMANT_QUALIFICATION_IS_NULL = "The informant qualification cannot be null.";
     public static final String INFORMANT_AND_UNTRACKED_INFORMANT = "One and only one informant and untracked informant may be specified.";
     public static final String MOTHER_AND_UNTRACKED_MOTHER = "One and only one mother and untracked mother may be specified.";
@@ -64,6 +74,7 @@ public class ValidationConstants {
     public static final String USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE = "Only one usual residence and untracked usual residence may be specified.";
     public static final String WHEN_BORN_INCORRECT_FORMAT = "The format should be dd/MM/yyyy hh:mm.";
     public static final String WHEN_BORN_IS_NULL = "When born cannot be null.";
+    public static final String WHEN_MARRIED_IS_NULL = "When married cannot be null.";
     public static final String WHEN_DIED_IS_NULL = "When died cannot be null.";
     public static final String WHEN_REGISTERED_DATE_IN_FUTURE = "Date should not be in the future.";
     public static final String WHEN_REGISTERED_DATE_IS_INVALID = "When registered date is invalid.";
@@ -71,5 +82,8 @@ public class ValidationConstants {
     public static final String WHERE_BORN_AND_UNTRACKED_WHERE_BORN = "One and only one where born and untracked where born must be specified.";
     public static final String WHERE_BORN_IS_NULL = "Where born cannot be null.";
     public static final String WHERE_DIED_AND_UNTRACKED_WHERE_DIED = "One and only one where died and untracked where died must be specified.";
+    public static final String WHERE_MARRIED_AND_UNTRACKED_WHERE_MARRIED = "One and only one where married and untracked where married must be specified.";
+    public static final String WITNESS_AND_UNTRACKED_FIRST_WITNESS = "One and only one first witness and untracked first witness may be specified.";
+    public static final String WITNESS_AND_UNTRACKED_SECOND_WITNESS = "One and only one second witness and untracked second witness may be specified.";
 
 }

+ 19 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateBaseFieldsValidator.java

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.marriagecertificates.MarriageCertificateCommand;
+
+@Component
+public interface MarriageCertificateBaseFieldsValidator  {
+
+    @SuppressWarnings("unused")
+    void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+
+}

+ 83 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateBaseFieldsValidatorImpl.java

@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+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.marriagecertificates.MarriageCertificateCommand;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateDateTypes;
+import scot.carricksoftware.grants.validators.helpers.ValidateTypesImpl;
+
+@Component
+public class MarriageCertificateBaseFieldsValidatorImpl implements MarriageCertificateBaseFieldsValidator {
+
+    private static final Logger logger = LogManager.getLogger(MarriageCertificateBaseFieldsValidatorImpl.class);
+
+    private final ValidateTypesImpl validateTypes;
+    private final ValidateDateTypes validateDateTypes;
+
+    public MarriageCertificateBaseFieldsValidatorImpl(ValidateTypesImpl validateTypes, ValidateDateTypes validateDateTypes) {
+        this.validateTypes = validateTypes;
+        this.validateDateTypes = validateDateTypes;
+    }
+
+    @Override
+    public void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        validateCertificateNumber(marriageCertificateCommand, bindingResult);
+        validateCertificateType(marriageCertificateCommand, bindingResult);
+        validateCertificateDate(marriageCertificateCommand, bindingResult);
+        validateCertificateSource(marriageCertificateCommand, bindingResult);
+        validateRegistrationAuthority(marriageCertificateCommand, bindingResult);
+        validateVolume(marriageCertificateCommand, bindingResult);
+        validateNumber(marriageCertificateCommand, bindingResult);
+    }
+
+
+    private void validateCertificateNumber(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateCertificateNumber");
+        validateTypes.validateNullOrEmptyString(marriageCertificateCommand.getCertificateNumber(), "certificateNumber",ValidationConstants.CERTIFICATE_NUMBER_IS_NULL, bindingResult);
+    }
+
+    private void validateVolume(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateVolume");
+        validateTypes.validateNullOrEmptyString(marriageCertificateCommand.getVolume(), "volume",ValidationConstants.REGISTRATION_VOLUME_IS_NULL, bindingResult);
+    }
+
+    private void validateNumber(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateNumber");
+        validateTypes.validateNullOrEmptyString(marriageCertificateCommand.getNumber(), "number",ValidationConstants.NUMBER_IS_NULL, bindingResult);
+    }
+    
+    private void validateCertificateSource(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateCertificateSource");
+        validateTypes.validateOrganisation(marriageCertificateCommand.getCertificateSource(), "certificateSource", ValidationConstants.CERTIFICATE_SOURCE_IS_NULL, bindingResult);
+    }
+
+    private void validateRegistrationAuthority(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateRegistrationAuthority");
+        validateTypes.validateOrganisation(marriageCertificateCommand.getRegistrationAuthority(), "registrationAuthority",ValidationConstants.REGISTRATION_AUTHORITY_IS_NULL, bindingResult);
+    }
+
+    private void validateCertificateType(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateCertificateType");
+        validateTypes.validateCertificateType(marriageCertificateCommand.getCertificateType(), "certificateType",ValidationConstants.CERTIFICATE_TYPE_IS_NULL, bindingResult);
+    }
+
+    private void validateCertificateDate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateBaseFieldsValidator::validateCertificateDate");
+        validateDateTypes.validatePastDate(marriageCertificateCommand.getCertificateDate(),
+                "certificateDate",
+                ValidationConstants.CERTIFICATE_DATE_IS_NULL,
+                ValidationConstants.DATE_IS_INVALID,
+                ValidationConstants.DATE_IN_FUTURE,
+                bindingResult);
+    }
+
+
+}

+ 2 - 44
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateCommandValidator.java

@@ -5,56 +5,14 @@
 
 package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
 
-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.marriagecertificates.MarriageCertificateCommand;
-import scot.carricksoftware.grants.constants.ApplicationConstants;
-import scot.carricksoftware.grants.constants.ValidationConstants;
 
 
 @Component
-public class MarriageCertificateCommandValidator {
-    private static final Logger logger = LogManager.getLogger(MarriageCertificateCommandValidator.class);
-
-    @SuppressWarnings("unused")
-    public void validate(@SuppressWarnings("unused") MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
-        logger.debug("Validating death certificate command");
-        validateBrideAndGroomInIsolation(marriageCertificateCommand, bindingResult);
-
-
-        if (marriageCertificateCommand.getGroom() != null) {
-            if (marriageCertificateCommand.getBride() != null) {
-                validateBrideAndGroomTogether(marriageCertificateCommand, bindingResult);
-            }
-        }
-    }
-
-    private void validateBrideAndGroomInIsolation(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
-        if (marriageCertificateCommand.getBride() == null) {
-            bindingResult.rejectValue("bride", ApplicationConstants.EMPTY_STRING,
-                    null,
-                    ValidationConstants.BRIDE_IS_NULL);
-        }
-        if (marriageCertificateCommand.getGroom() == null) {
-            bindingResult.rejectValue("groom", ApplicationConstants.EMPTY_STRING,
-                    null,
-                    ValidationConstants.GROOM_IS_NULL);
-        }
-    }
-
-    private void validateBrideAndGroomTogether(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
-        if (marriageCertificateCommand.getBride().equals(marriageCertificateCommand.getGroom())) {
-            bindingResult.rejectValue("groom", ApplicationConstants.EMPTY_STRING,
-                    null,
-                    ValidationConstants.SAME_BRIDE_AND_GROOM);
-            bindingResult.rejectValue("bride", ApplicationConstants.EMPTY_STRING,
-                    null,
-                    ValidationConstants.SAME_BRIDE_AND_GROOM);
-        }
-    }
-
+public interface MarriageCertificateCommandValidator {
 
+    void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
 }
 

+ 41 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateCommandValidatorImpl.java

@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.marriagecertificates.MarriageCertificateCommand;
+
+
+@Component
+public class MarriageCertificateCommandValidatorImpl implements MarriageCertificateCommandValidator {
+
+    final MarriageCertificateNullFieldsValidator marriageCertificateNullFieldsValidator;
+
+    @SuppressWarnings("unused")
+    final MarriageCertificateBaseFieldsValidator marriageCertificateBaseFieldsValidator;
+
+    final MarriageCertificateUntrackedFieldsValidator marriageCertificateUntrackedFieldsValidator;
+
+
+    public MarriageCertificateCommandValidatorImpl(MarriageCertificateNullFieldsValidator marriageCertificateNullFieldsValidator,
+                                                   MarriageCertificateBaseFieldsValidator marriageCertificateBaseFieldsValidator,
+                                                   MarriageCertificateUntrackedFieldsValidator marriageCertificateUntrackedFieldsValidator) {
+        this.marriageCertificateNullFieldsValidator = marriageCertificateNullFieldsValidator;
+        this.marriageCertificateBaseFieldsValidator = marriageCertificateBaseFieldsValidator;
+        this.marriageCertificateUntrackedFieldsValidator = marriageCertificateUntrackedFieldsValidator;
+    }
+
+
+    @Override
+    public void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        marriageCertificateNullFieldsValidator.validate(marriageCertificateCommand, bindingResult);
+        marriageCertificateUntrackedFieldsValidator.validate(marriageCertificateCommand, bindingResult);
+    }
+
+
+}
+

+ 17 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateNullFieldsValidator.java

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

+ 88 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateNullFieldsValidatorImpl.java

@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+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.marriagecertificates.MarriageCertificateCommand;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateTypesImpl;
+
+@Component
+public class MarriageCertificateNullFieldsValidatorImpl implements MarriageCertificateNullFieldsValidator {
+
+    private static final Logger logger = LogManager.getLogger(MarriageCertificateNullFieldsValidatorImpl.class);
+
+    private final ValidateTypesImpl validateTypes;
+
+    public MarriageCertificateNullFieldsValidatorImpl(ValidateTypesImpl validateTypes) {
+        this.validateTypes = validateTypes;
+    }
+
+    @Override
+    public void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        validateGroom(marriageCertificateCommand, bindingResult);
+        validateBride(marriageCertificateCommand, bindingResult);
+        validateGroomAge(marriageCertificateCommand, bindingResult);
+        validateBrideAge(marriageCertificateCommand, bindingResult);
+        validateGroomRank(marriageCertificateCommand, bindingResult);
+        validateBrideRank(marriageCertificateCommand, bindingResult);
+        validateGroomCondition(marriageCertificateCommand, bindingResult);
+        validateBrideCondition(marriageCertificateCommand, bindingResult);
+        validateWhenMarried(marriageCertificateCommand, bindingResult);
+    }
+
+    private void validateWhenMarried(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateWhenDied");
+        validateTypes.validateNullOrEmptyString(marriageCertificateCommand.getWhenMarried(), "whenDied", ValidationConstants.WHEN_MARRIED_IS_NULL, bindingResult);
+    }
+
+    private void validateGroom(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateGroom");
+        validateTypes.validatePerson(marriageCertificateCommand.getGroom(), "groom", ValidationConstants.GROOM_IS_NULL, bindingResult);
+    }
+
+    private void validateBride(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateBride");
+        validateTypes.validatePerson(marriageCertificateCommand.getGroom(), "bride", ValidationConstants.BRIDE_IS_NULL, bindingResult);
+    }
+
+
+    private void validateGroomAge(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateGroomAge");
+        validateTypes.validatePerson(marriageCertificateCommand.getGroom(), "groomAge", ValidationConstants.GROOM_AGE_IS_NULL, bindingResult);
+    }
+
+    private void validateGroomRank(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateGroomRank");
+        validateTypes.validatePerson(marriageCertificateCommand.getGroom(), "groomRank", ValidationConstants.GROOM_RANK_IS_NULL, bindingResult);
+    }
+
+    private void validateGroomCondition(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateGroomCondition");
+        validateTypes.validatePerson(marriageCertificateCommand.getGroom(), "groomCondition", ValidationConstants.GROOM_CONDITION_IS_NULL, bindingResult);
+    }
+
+    private void validateBrideAge(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateBrideAge");
+        validateTypes.validatePerson(marriageCertificateCommand.getBride(), "brideAge", ValidationConstants.BRIDE_AGE_IS_NULL, bindingResult);
+    }
+
+    private void validateBrideRank(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateBrideRank");
+        validateTypes.validatePerson(marriageCertificateCommand.getBride(), "brideRank", ValidationConstants.BRIDE_RANK_IS_NULL, bindingResult);
+    }
+
+    private void validateBrideCondition(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateNullFieldsValidator::validateBrideCondition");
+        validateTypes.validatePerson(marriageCertificateCommand.getBride(), "brideCondition", ValidationConstants.BRIDE_CONDITION_IS_NULL, bindingResult);
+    }
+
+
+
+}

+ 38 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateUntrackedFieldsValidator.java

@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.marriagecertificates.MarriageCertificateCommand;
+
+public interface MarriageCertificateUntrackedFieldsValidator {
+
+    @SuppressWarnings("unused")
+    void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateUntrackedWhereMarried(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateGroomUntrackedResidence(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateBrideUntrackedResidence(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateGroomUntrackedFather(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateBrideUntrackedFather(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateUntrackedFirstWitness(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+
+    @SuppressWarnings("unused")
+    void validateUntrackedSecondWitness(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult);
+}
+

+ 115 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/marriagecertificate/MarriageCertificateUntrackedFieldsValidatorImpl.java

@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.marriagecertificate;
+
+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.marriagecertificates.MarriageCertificateCommand;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateTwoFieldTypes;
+
+@Component
+public class MarriageCertificateUntrackedFieldsValidatorImpl implements MarriageCertificateUntrackedFieldsValidator {
+
+    private static final Logger logger = LogManager.getLogger(MarriageCertificateUntrackedFieldsValidatorImpl.class);
+
+    private final ValidateTwoFieldTypes validateTwoFieldTypes;
+
+    public MarriageCertificateUntrackedFieldsValidatorImpl(ValidateTwoFieldTypes validateTwoFieldTypes) {
+        this.validateTwoFieldTypes = validateTwoFieldTypes;
+    }
+
+    @Override
+    public void validate(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validate");
+        validateUntrackedWhereMarried(marriageCertificateCommand, bindingResult);
+        validateGroomUntrackedResidence(marriageCertificateCommand, bindingResult);
+        validateBrideUntrackedResidence(marriageCertificateCommand, bindingResult);
+        validateGroomUntrackedFather(marriageCertificateCommand, bindingResult);
+        validateBrideUntrackedFather(marriageCertificateCommand, bindingResult);
+        validateUntrackedFirstWitness(marriageCertificateCommand, bindingResult);
+        validateUntrackedSecondWitness(marriageCertificateCommand, bindingResult);
+    }
+
+    @Override
+    public void validateUntrackedWhereMarried(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateUntrackedWhereMarried");
+        validateTwoFieldTypes.validatePlaceAndUntrackedPlace(marriageCertificateCommand.getWhereMarried(),
+                marriageCertificateCommand.getUntrackedWhereMarried(),
+                "whereMarried",
+                "untrackedWhereMarried",
+                ValidationConstants.WHERE_MARRIED_AND_UNTRACKED_WHERE_MARRIED,
+                bindingResult);
+    }
+
+    @Override
+    public void validateGroomUntrackedResidence(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateGroomUntrackedResidence");
+        validateTwoFieldTypes.validatePlaceAndUntrackedPlace(marriageCertificateCommand.getGroomUsualResidence(),
+                marriageCertificateCommand.getGroomUntrackedResidence(),
+                "groomUsualResidence",
+                "untrackedGroomResidence",
+                ValidationConstants.GROOM_USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE,
+                bindingResult);
+    }
+
+    @Override
+    public void validateBrideUntrackedResidence(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateBrideUntrackedResidence");
+        validateTwoFieldTypes.validatePlaceAndUntrackedPlace(marriageCertificateCommand.getBrideUsualResidence(),
+                marriageCertificateCommand.getBrideUntrackedResidence(),
+                "groomUsualResidence",
+                "untrackedGroomResidence",
+                ValidationConstants.BRIDE_USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE,
+                bindingResult);
+    }
+
+    @Override
+    public void validateGroomUntrackedFather(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateGroomUntrackedFather");
+        validateTwoFieldTypes.validatePersonAndUntrackedPerson(marriageCertificateCommand.getGroomFather(),
+                marriageCertificateCommand.getGroomUntrackedFather(),
+                "groomFather",
+                "groomUntrackedFather",
+                ValidationConstants.GROOM_FATHER_AND_UNTRACKED_FATHER,
+                bindingResult);
+    }
+
+    @Override
+    public void validateBrideUntrackedFather(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateBrideUntrackedFather");
+        validateTwoFieldTypes.validatePersonAndUntrackedPerson(marriageCertificateCommand.getBrideFather(),
+                marriageCertificateCommand.getBrideUntrackedFather(),
+                "brideFather",
+                "brideUntrackedFather",
+                ValidationConstants.BRIDE_FATHER_AND_UNTRACKED_FATHER,
+                bindingResult);
+    }
+
+    @Override
+    public void validateUntrackedFirstWitness(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateUntrackedFirstWitness");
+        validateTwoFieldTypes.validatePersonAndUntrackedPerson(marriageCertificateCommand.getFirstWitness(),
+                marriageCertificateCommand.getUntrackedFirstWitness(),
+                "firstWitness",
+                "untrackedFirstWitness",
+                ValidationConstants.WITNESS_AND_UNTRACKED_FIRST_WITNESS,
+                bindingResult);
+    }
+
+    @Override
+    public void validateUntrackedSecondWitness(MarriageCertificateCommand marriageCertificateCommand, BindingResult bindingResult) {
+        logger.debug("MarriageCertificateUntrackedFieldsValidatorImp::validateUntrackedSecondWitness");
+        validateTwoFieldTypes.validatePersonAndUntrackedPerson(marriageCertificateCommand.getSecondWitness(),
+                marriageCertificateCommand.getUntrackedSecondWitness(),
+                "firstWitness",
+                "untrackedFirstWitness",
+                ValidationConstants.WITNESS_AND_UNTRACKED_SECOND_WITNESS,
+                bindingResult);
+    }
+}