X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2Fmatcher%2FMatcher.java;h=07925094479b1eda2f8676f62d2d6784e93a3013;hb=537da9c65518c52985308b67c499fe6a60a607ce;hp=a213a17a96ba71aebd54382d8de33fc81b184acb;hpb=61854b0061f5c35c770d9ca1dcf837261e811d99;p=jalview.git diff --git a/src/jalview/util/matcher/Matcher.java b/src/jalview/util/matcher/Matcher.java index a213a17..0792509 100644 --- a/src/jalview/util/matcher/Matcher.java +++ b/src/jalview/util/matcher/Matcher.java @@ -14,12 +14,17 @@ public class Matcher implements MatcherI Condition condition; /* - * the string value (upper-cased), or the regex, to compare to + * the string pattern as entered, or the regex, to compare to * also holds the string form of float value if a numeric condition */ String pattern; /* + * the pattern in upper case, for non-case-sensitive matching + */ + String uppercasePattern; + + /* * the compiled regex if using a pattern match condition * (reserved for possible future enhancement) */ @@ -38,22 +43,27 @@ public class Matcher implements MatcherI * @return * @throws NumberFormatException * if a numerical condition is specified with a non-numeric - * comparision value + * comparison value * @throws NullPointerException * if a null condition or comparison string is specified */ public Matcher(Condition cond, String compareTo) { + Objects.requireNonNull(cond); condition = cond; if (cond.isNumeric()) { value = Float.valueOf(compareTo); pattern = String.valueOf(value); + uppercasePattern = pattern; } else { - // pattern matches will be non-case-sensitive - pattern = compareTo.toUpperCase(); + pattern = compareTo; + if (pattern != null) + { + uppercasePattern = pattern.toUpperCase(); + } } // if we add regex conditions (e.g. matchesPattern), then @@ -71,10 +81,7 @@ public class Matcher implements MatcherI */ public Matcher(Condition cond, float compareTo) { - Objects.requireNonNull(cond); - condition = cond; - value = compareTo; - pattern = String.valueOf(compareTo).toUpperCase(); + this(cond, String.valueOf(compareTo)); } /** @@ -105,23 +112,29 @@ public class Matcher implements MatcherI if (val == null) { return condition == Condition.NotContains - || condition == Condition.NotMatches; + || condition == Condition.NotMatches + || condition == Condition.NotPresent; } String upper = val.toUpperCase().trim(); boolean matched = false; switch(condition) { case Matches: - matched = upper.equals(pattern); + matched = upper.equals(uppercasePattern); break; case NotMatches: - matched = !upper.equals(pattern); + matched = !upper.equals(uppercasePattern); break; case Contains: - matched = upper.indexOf(pattern) > -1; + matched = upper.indexOf(uppercasePattern) > -1; break; case NotContains: - matched = upper.indexOf(pattern) == -1; + matched = upper.indexOf(uppercasePattern) == -1; + break; + case Present: + matched = true; + break; + default: break; } return matched; @@ -161,6 +174,8 @@ public class Matcher implements MatcherI case GE: matched = f >= value; break; + default: + break; } return matched; @@ -178,7 +193,7 @@ public class Matcher implements MatcherI /** * equals is overridden so that we can safely remove Matcher objects from - * collections (e.g. delete an attribut match condition for a feature colour) + * collections (e.g. delete an attribute match condition for a feature colour) */ @Override public boolean equals(Object obj) @@ -188,8 +203,15 @@ public class Matcher implements MatcherI return false; } Matcher m = (Matcher) obj; - return condition == m.condition && value == m.value - && pattern.equals(m.pattern); + if (condition != m.condition || value != m.value) + { + return false; + } + if (pattern == null) + { + return m.pattern == null; + } + return uppercasePattern.equals(m.uppercasePattern); } @Override @@ -214,7 +236,7 @@ public class Matcher implements MatcherI public String toString() { StringBuilder sb = new StringBuilder(); - sb.append(condition.name()).append(" "); + sb.append(condition.toString()).append(" "); if (condition.isNumeric()) { sb.append(pattern);