'This function is responsible for validating \'num_input_datasets\' rules.
@type return_bool: bool
@param return_bool: True when we are only interested in the result of the
validation, and not the validated rule itself.
@type original_rule: dict
@param original_rule: contains the original received rule
@type counter: int
@param counter: this counter is used to identify what rule # is currently being
validated. Necessary for log output.
@type tool: str
@param tool: the name of the current tool. Necessary for log output.
@rtype: bool, dict (depending on return_bool)
@return: validated rule or result of validation (depending on return_bool)'

@classmethod
def __validate_num_input_datasets_rule(cls, return_bool, original_rule, counter, tool):

    rule = copy.deepcopy(original_rule)
    valid_rule = True
    if (rule is not None):
        (valid_rule, rule) = cls.__validate_users(valid_rule, return_bool, rule, tool, counter)
    if (rule is not None):
        (valid_rule, rule) = cls.__validate_nice_value(valid_rule, return_bool, rule, tool, counter)
    if (rule is not None):
        (valid_rule, rule) = cls.__validate_destination(valid_rule, return_bool, rule, tool, counter)
    if (rule is not None):
        (valid_rule, rule) = cls.__validate_bounds(valid_rule, return_bool, rule, tool, counter)
    if return_bool:
        return valid_rule
    else:
        return rule
