示例#1
0
  /**
   * Create new instance.
   *
   * @param field field
   * @param value value
   */
  private EqualsRule(final String field, final String value) {
    super();
    if (!RESOLVER.isField(field)) {
      throw new IllegalArgumentException(
          "Invalid EQUALS rule - " + field + " is not a supported field");
    }

    this.field = field;
    this.value = value;
  }
示例#2
0
  /** {@inheritDoc} */
  @SuppressWarnings({"rawtypes", "unchecked"})
  public boolean evaluate(final LogData event, Map matches) {
    Object p2 = RESOLVER.getValue(field, event);

    boolean result = (p2 != null) && p2.toString().equalsIgnoreCase(value);
    if (result && matches != null) {
      Set entries = (Set) matches.get(field.toUpperCase());
      if (entries == null) {
        entries = new HashSet();
        matches.put(field.toUpperCase(), entries);
      }
      entries.add(value);
    }
    return result;
  }
示例#3
0
/**
 * A Rule class which returns the result of performing equals against two strings.
 *
 * @author Scott Deboy ([email protected])
 * @author Krzysztof Otrebski
 */
public class EqualsRule extends AbstractRule {

  /** Serialization ID. */
  static final long serialVersionUID = 1712851553477517245L;
  /** Resolver. */
  private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
  /** Value. */
  private final String value;
  /** Field. */
  private final String field;

  /**
   * Create new instance.
   *
   * @param field field
   * @param value value
   */
  private EqualsRule(final String field, final String value) {
    super();
    if (!RESOLVER.isField(field)) {
      throw new IllegalArgumentException(
          "Invalid EQUALS rule - " + field + " is not a supported field");
    }

    this.field = field;
    this.value = value;
  }

  /**
   * Create new instance from top two elements of stack.
   *
   * @param stack stack
   * @return new instance
   */
  public static Rule getRule(final Stack<Object> stack) {
    if (stack.size() < 2) {
      throw new IllegalArgumentException(
          "Invalid EQUALS rule - expected two parameters but received " + stack.size());
    }

    String p2 = stack.pop().toString();
    String p1 = stack.pop().toString();

    return getRule(p1, p2);
  }

  /**
   * Create new instance.
   *
   * @param p1 field, special treatment for level and timestamp.
   * @param p2 value
   * @return new instance
   */
  public static Rule getRule(final String p1, final String p2) {
    if (p1.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
      return LevelEqualsRule.getRule(p2);
    } else if (p1.equalsIgnoreCase(LoggingEventFieldResolver.TIMESTAMP_FIELD)
        || p1.equalsIgnoreCase(LoggingEventFieldResolver.DATE_FIELD)) {
      return TimestampEqualsRule.getRule(p2);
    } else if (p1.equalsIgnoreCase(LoggingEventFieldResolver.MARK_FIELD)) {
      return MarkEqualsRule.getRule(p2, false);
    } else {
      return new EqualsRule(p1, p2);
    }
  }

  /** {@inheritDoc} */
  @SuppressWarnings({"rawtypes", "unchecked"})
  public boolean evaluate(final LogData event, Map matches) {
    Object p2 = RESOLVER.getValue(field, event);

    boolean result = (p2 != null) && p2.toString().equalsIgnoreCase(value);
    if (result && matches != null) {
      Set entries = (Set) matches.get(field.toUpperCase());
      if (entries == null) {
        entries = new HashSet();
        matches.put(field.toUpperCase(), entries);
      }
      entries.add(value);
    }
    return result;
  }
}