1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.cometd.filter;
16
17 import java.lang.reflect.Array;
18 import java.util.regex.Pattern;
19
20
21
22
23
24
25 public class RegexFilter extends JSONDataFilter
26 {
27 String[] _templates;
28 String[] _replaces;
29
30 transient Pattern[] _patterns;
31
32
33
34
35
36
37 @Override
38 public void init(Object init)
39 {
40 super.init(init);
41
42 _templates=new String[Array.getLength(init)];
43 _replaces=new String[_templates.length];
44
45 for (int i=0;i<_templates.length;i++)
46 {
47 Object entry = Array.get(init,i);
48 _templates[i]=(String)Array.get(entry,0);
49 _replaces[i]=(String)Array.get(entry,1);
50 }
51
52 checkPatterns();
53 }
54
55 private void checkPatterns()
56 {
57
58 synchronized(this)
59 {
60 if (_patterns==null)
61 {
62 _patterns=new Pattern[_templates.length];
63 for (int i=0;i<_patterns.length;i++)
64 {
65 _patterns[i]=Pattern.compile(_templates[i]);
66 }
67 }
68 }
69 }
70
71 @Override
72 protected Object filterString(String string)
73 {
74 checkPatterns();
75
76 for (int i=0;i<_patterns.length;i++)
77 {
78 if (_replaces[i]!=null)
79 string=_patterns[i].matcher(string).replaceAll(_replaces[i]);
80 else if (_patterns[i].matcher(string).matches())
81 throw new IllegalStateException("matched "+_patterns[i]+" in "+string);
82 }
83 return string;
84 }
85 }