1 package fr.jayasoft.ivy.version; 2 3 import java.util.ArrayList ; 4 import java.util.HashMap ; 5 import java.util.List ; 6 import java.util.Map ; 7 import java.util.StringTokenizer ; 8 9 import fr.jayasoft.ivy.Ivy; 10 import fr.jayasoft.ivy.ModuleRevisionId; 11 import fr.jayasoft.ivy.matcher.Matcher; 12 import fr.jayasoft.ivy.matcher.PatternMatcher; 13 import fr.jayasoft.ivy.util.IvyPatternHelper; 14 15 16 20 public class Match { 21 private String _revision; 22 private String _pattern; 23 private String _args; 24 private String _matcher; 25 26 public String getArgs() { 27 return _args; 28 } 29 30 public void setArgs(String args) { 31 this._args = args; 32 } 33 34 public String getMatcher() { 35 return _matcher; 36 } 37 38 public void setMatcher(String matcher) { 39 this._matcher = matcher; 40 } 41 42 public String getPattern() { 43 return _pattern; 44 } 45 46 public void setPattern(String pattern) { 47 this._pattern = pattern; 48 } 49 50 public String getRevision() { 51 return _revision; 52 } 53 54 public void setRevision(String revision) { 55 this._revision = revision; 56 } 57 58 public Matcher getPatternMatcher(ModuleRevisionId askedMrid) { 59 String revision = askedMrid.getRevision(); 60 61 String [] args = split(getArgs()); 62 String [] argValues = getRevisionArgs(revision); 63 64 if (args.length != argValues.length) { 65 return new NoMatchMatcher(); 66 } 67 68 Map variables = new HashMap (); 69 for (int i = 0; i < args.length; i++) { 70 variables.put(args[i], argValues[i]); 71 } 72 73 String pattern = getPattern(); 74 pattern = IvyPatternHelper.substituteVariables(pattern, variables); 75 76 PatternMatcher pMatcher = Ivy.getCurrent().getMatcher(_matcher); 77 return pMatcher.getMatcher(pattern); 78 } 79 80 private String [] getRevisionArgs(String revision) { 81 int bracketStartIndex = revision.indexOf('('); 82 if (bracketStartIndex == -1) { 83 return new String [0]; 84 } 85 86 int bracketEndIndex = revision.indexOf(')'); 87 if (bracketEndIndex <= (bracketStartIndex + 1)) { 88 return new String [0]; 89 } 90 91 String args = revision.substring(bracketStartIndex + 1, bracketEndIndex); 92 return split(args); 93 } 94 95 private static String [] split(String string) { 96 if (string == null) { 97 return new String [0]; 98 } 99 100 StringTokenizer tokenizer = new StringTokenizer (string, ", "); 101 List tokens = new ArrayList (); 102 while (tokenizer.hasMoreTokens()) { 103 tokens.add(tokenizer.nextToken()); 104 } 105 106 return (String []) tokens.toArray(new String [tokens.size()]); 107 } 108 109 private static class NoMatchMatcher implements Matcher { 110 public boolean isExact() { 111 return false; 112 } 113 public boolean matches(String str) { 114 return false; 115 } 116 } 117 } 118 | Popular Tags |