1 package org.sapia.soto.util.matcher; 2 3 import java.util.Stack ; 4 import java.util.StringTokenizer ; 5 6 7 18 public class PathPattern implements Pattern { 19 private static final String ASTERISK = "**"; 20 private static final String DOT = "."; 21 private PatternElement _first; 22 private boolean _ignoreCase; 23 24 private PathPattern(PatternElement first, boolean ignoreCase) { 25 _first = first; 26 _ignoreCase = ignoreCase; 27 } 28 29 32 public boolean matches(String str) { 33 StringTokenizer st = new StringTokenizer (str, DOT); 34 Stack tokens = new Stack (); 35 36 while (st.hasMoreTokens()) { 37 if (_ignoreCase) { 38 tokens.add(0, st.nextToken().toLowerCase()); 39 } else { 40 tokens.add(0, st.nextToken()); 41 } 42 } 43 44 if (_first == null) { 45 return false; 46 } 47 48 return _first.matches(tokens); 49 } 50 51 public static PathPattern parse(String toParse, boolean ignoreCase) { 52 return parse(toParse, '.', ignoreCase); 53 } 54 55 public static PathPattern parse(String toParse, char pathDelim, 56 boolean ignoreCase) { 57 StringTokenizer st = new StringTokenizer (toParse, "" + pathDelim); 58 String token; 59 60 PatternElement first = null; 61 PatternElement current = null; 62 PatternElement previous = null; 63 64 while (st.hasMoreTokens()) { 65 token = st.nextToken(); 66 67 if (ignoreCase) { 68 token.toLowerCase(); 69 } 70 71 if (token.equals(ASTERISK)) { 72 current = new PathToken(); 73 } else { 74 current = new CharSeq(token, ignoreCase); 75 } 76 77 if ((first == null) && (current != null)) { 78 first = current; 79 } else if (previous != null) { 80 previous.setNext(current); 81 } 82 83 previous = current; 84 } 85 86 return new PathPattern(first, ignoreCase); 87 } 88 } 89 | Popular Tags |