/**
   * Search a rule in a set of rules
   *
   * @param rule
   * @param set
   * @return
   */
  private static boolean searchRule(
      final Rule rule, final Collection<Rule> set, final PrintStream out) {
    boolean found = false;

    for (final Iterator<Rule> i = set.iterator(); i.hasNext() && !found; ) {
      final Rule r = i.next();
      if (r.getClass().getName().equals(rule.getClass().getName())) {
        found =
            r.getName().equals(rule.getName())
                && propertiesMatchFor(r, rule)
                && r.getPriority() == rule.getPriority();
        if (!found && r.getName().equals(rule.getName())) {
          out.println("Rules " + r.getName() + " are different because:");
          out.println("Priorities are different: " + (r.getPriority() != rule.getPriority()));
          out.println("Properties are different: " + !propertiesMatchFor(r, rule));
          out.println();
          out.println("Rule to search");
          dumpRule(rule, out);
          out.println();
          out.println("Rule from set");
          dumpRule(r, out);
          out.println();
        }
      }
    }

    return found;
  }