class SslConfigValidator implements ConstraintValidator<ValidSsl, SslConfig> {

    @Override
    public boolean isValid(SslConfig sslConfig, ConstraintValidatorContext context) {

        context.disableDefaultConstraintViolation();

        if (Objects.isNull(sslConfig)) {
            return true;
        }

        if (sslConfig.getTls() == SslAuthenticationMode.STRICT) {

            if (!sslConfig.isGenerateKeyStoreIfNotExisted()) {

                if (!isServerKeyStoreConfigValid(sslConfig, context)
                        || !isClientKeyStoreConfigValid(sslConfig, context)) {
                    return false;
                }
            }

            if (!isTrustModeConfigValid(sslConfig, context)) {
                return false;
            }

            if (!isServerConfigValidForWhiteListMode(sslConfig, context)) {
                return false;
            }

            if (!isServerConfigValidForCAMode(sslConfig, context)) {
                return false;
            }

            if (!isClientConfigValidForWhiteListMode(sslConfig, context)) {
                return false;
            }

            if (!isClientConfigValidForCAMode(sslConfig, context)) {
                return false;
            }
        }

        return true;
    }

}