1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.eclipse.jetty.webapp;
16
17 import java.util.ArrayList;
18 import java.util.Arrays;
19 import java.util.List;
20 import java.util.StringTokenizer;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public class ClasspathPattern
36 {
37 private static class Entry
38 {
39 public String classpath = null;
40 public boolean result = false;
41 public boolean partial = false;
42 }
43
44 final private List<String> _patterns = new ArrayList<String>();
45 final private List<Entry> _entries = new ArrayList<Entry>();
46
47
48 public ClasspathPattern()
49 {
50 }
51
52
53 public ClasspathPattern(String[] patterns)
54 {
55 setPatterns(patterns);
56 }
57
58
59 public ClasspathPattern(String pattern)
60 {
61 setPattern(pattern);
62 }
63
64
65
66
67
68
69
70
71 private void setPatterns(String[] patterns)
72 {
73 _patterns.clear();
74 _entries.clear();
75 addPatterns(patterns);
76 }
77
78
79
80
81
82
83
84 private void addPatterns(String[] patterns)
85 {
86 if (patterns != null)
87 {
88 Entry entry = null;
89 for (String pattern : patterns)
90 {
91 entry = createEntry(pattern);
92 if (entry != null) {
93 _patterns.add(pattern);
94 _entries.add(entry);
95 }
96 }
97 }
98 }
99
100
101
102
103
104
105
106
107
108 private Entry createEntry(String pattern)
109 {
110 Entry entry = null;
111
112 if (pattern != null)
113 {
114 String item = pattern.trim();
115 if (item.length() > 0)
116 {
117 entry = new Entry();
118 entry.result = !item.startsWith("-");
119 entry.partial = item.endsWith(".");
120 entry.classpath = entry.result ? item : item.substring(1).trim();
121 }
122 }
123 return entry;
124 }
125
126
127
128
129
130
131
132 public void setPattern(String pattern)
133 {
134 _patterns.clear();
135 _entries.clear();
136 addPattern(pattern);
137 }
138
139
140
141
142
143
144
145
146 public void addPattern(String pattern)
147 {
148 ArrayList<String> patterns = new ArrayList<String>();
149 StringTokenizer entries = new StringTokenizer(pattern, ":,");
150 while (entries.hasMoreTokens())
151 {
152 patterns.add(entries.nextToken());
153 }
154
155 addPatterns((String[])patterns.toArray(new String[patterns.size()]));
156 }
157
158
159
160
161
162 public String[] getPatterns()
163 {
164 String[] patterns = null;
165
166 if (_patterns!=null)
167 {
168 patterns = _patterns.toArray(new String[_patterns.size()]);
169 }
170
171 return patterns;
172 }
173
174
175
176
177
178
179
180
181 public boolean match(String name)
182 {
183 boolean result=false;
184
185 if (_entries != null)
186 {
187 name = name.replace('/','.');
188 name = name.replaceFirst("^[.]+","");
189 name = name.replaceAll("\\$.*$","");
190
191 for (Entry entry : _entries)
192 {
193 if (entry != null)
194 {
195 if (entry.partial)
196 {
197 if (name.startsWith(entry.classpath))
198 {
199 result = entry.result;
200 break;
201 }
202 }
203 else
204 {
205 if (name.equals(entry.classpath))
206 {
207 result = entry.result;
208 break;
209 }
210 }
211 }
212 }
213 }
214 return result;
215 }
216 }