Performs validation
        :param input: object to validate
        :param is_substitute: will be used for what-if in the future
        :return: validation result if violated or None

def validate(self, input, is_substitute): # ToDo: apply 'no substitute' for initial load validations
        """
        Performs validation
        :param input: object to validate
        :param is_substitute: will be used for what-if in the future
        :return: validation result if violated or None
        """
        constraint = self.__get_constraint(input)
        to_validate = self.__get_to_validate(input)
        return self.__compare(to_validate, constraint)