public void setPattern(String expression) {
    int x = expression.indexOf(":");
    int i = expression.indexOf('=');

    if (i == -1) {
      throw new IllegalArgumentException(
          "Pattern is malformed - it should be a key value pair, i.e. property=value: "
              + expression);
    }

    if (x > -1 && x < i) {
      setScope(expression.substring(0, x));
      expression = expression.substring(x + 1);
      i = expression.indexOf('=');
    }

    if (expression.charAt(i - 1) == '!') {
      not = true;
      propertyName = expression.substring(0, i - 1).trim();
    } else {
      propertyName = expression.substring(0, i).trim();
    }
    propertyValue = expression.substring(i + 1).trim();

    wildcardFilter = new WildcardFilter(propertyValue);
    wildcardFilter.setCaseSensitive(isCaseSensitive());
  }
  protected boolean compare(String value1, String value2) {
    if (value1 == null && value2 != null && !"null".equals(value2) && not) {
      return true;
    }

    if (value1 == null) {
      value1 = "null";
    }

    boolean result;

    result = wildcardFilter.accept(value1);

    return (not ? !result : result);
  }
 public void setCaseSensitive(boolean caseSensitive) {
   this.caseSensitive = caseSensitive;
   if (wildcardFilter != null) {
     wildcardFilter.setCaseSensitive(caseSensitive);
   }
 }