From 94b1db85132222c4d4874bacf7bc01e995c7c5d8 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Tue, 20 Feb 2007 11:17:50 +0000 Subject: 2007-02-20 Gary Benson * javax/management/ObjectName.java (domainMatches): New method. (apply): Rearranged to use the above. --- ChangeLog | 6 ++ javax/management/ObjectName.java | 122 +++++++++++++++++++++------------------ 2 files changed, 72 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2fe636813..d145440cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-02-20 Gary Benson + + * javax/management/ObjectName.java + (domainMatches): New method. + (apply): Rearranged to use the above. + 2007-02-19 Mark Wielaard * doc/.cvsignore: Add *.1. diff --git a/javax/management/ObjectName.java b/javax/management/ObjectName.java index 41bbfb677..8259eab02 100644 --- a/javax/management/ObjectName.java +++ b/javax/management/ObjectName.java @@ -303,70 +303,80 @@ public class ObjectName { if (name.isPattern()) return false; - if (isPattern()) + + if (!isPattern()) + return equals(name); + + if (isDomainPattern()) { - boolean domainMatch, propMatch; - if (isDomainPattern()) + if (!domainMatches(domain, 0, name.getDomain(), 0)) + return false; + } + else + { + if (!domain.equals(name.getDomain())) + return false; + } + + if (isPropertyPattern()) + { + Hashtable oProps = name.getKeyPropertyList(); + Iterator i = properties.entrySet().iterator(); + while (i.hasNext()) { - String oDomain = name.getDomain(); - int oLength = oDomain.length(); - for (int a = 0; a < domain.length(); ++a) - { - char n = domain.charAt(a); - if (oLength == a && n != '*') - return false; - if (n == '?') - continue; - if (n == '*') - if ((a + 1) < domain.length()) - { - if (oLength == a) - return false; - char next; - do - { - next = domain.charAt(a + 1); - } while (next == '*'); - if (next == '?') - continue; - int pos = a; - while (oDomain.charAt(pos) != next) - { - ++pos; - if (pos == oLength) - return false; - } - } - if (n != oDomain.charAt(a)) - return false; - } - domainMatch = true; + Map.Entry entry = (Map.Entry) i.next(); + String key = (String) entry.getKey(); + if (!(oProps.containsKey(key))) + return false; + String val = (String) entry.getValue(); + if (!(val.equals(oProps.get(key)))) + return false; } - else - domainMatch = domain.equals(name.getDomain()); - if (isPropertyPattern()) + } + else + { + if (!getCanonicalKeyPropertyListString().equals + (name.getCanonicalKeyPropertyListString())) + return false; + } + return true; + } + + /** + * Returns true if the domain matches the pattern. + * + * @param pattern the pattern to match against. + * @param patternindex the index into the pattern to start matching. + * @param domain the domain to match. + * @param domainindex the index into the domain to start matching. + * @return true if the domain matches the pattern. + */ + private static boolean domainMatches(String pattern, int patternindex, + String domain, int domainindex) + { + while (patternindex < pattern.length()) + { + char c = pattern.charAt(patternindex++); + + if (c == '*') { - Hashtable oProps = name.getKeyPropertyList(); - Iterator i = properties.entrySet().iterator(); - while (i.hasNext()) + for (int i = domain.length(); i >= domainindex; i--) { - Map.Entry entry = (Map.Entry) i.next(); - String key = (String) entry.getKey(); - if (!(oProps.containsKey(key))) - return false; - String val = (String) entry.getValue(); - if (!(val.equals(oProps.get(key)))) - return false; + if (domainMatches(pattern, patternindex, domain, i)) + return true; } - propMatch = true; + return false; } - else - propMatch = - getCanonicalKeyPropertyListString().equals - (name.getCanonicalKeyPropertyListString()); - return domainMatch && propMatch; + + if (domainindex >= domain.length()) + return false; + + if (c != '?' && c != domain.charAt(domainindex)) + return false; + + domainindex++; } - return equals(name); + return true; } /** -- cgit v1.2.1