KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > version > Match


1 package fr.jayasoft.ivy.version;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.HashMap JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Map JavaDoc;
7 import java.util.StringTokenizer JavaDoc;
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 /**
17  *
18  * @author Maarten Coene
19  */

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