1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.webapp;
20
21 import java.lang.reflect.Method;
22 import java.util.HashMap;
23 import java.util.Iterator;
24 import java.util.Map;
25
26 import org.eclipse.jetty.xml.XmlParser;
27
28
29
30
31
32
33 public abstract class IterativeDescriptorProcessor implements DescriptorProcessor
34 {
35 public static final Class<?>[] __signature = new Class[]{WebAppContext.class, Descriptor.class, XmlParser.Node.class};
36 protected Map<String, Method> _visitors = new HashMap<String, Method>();
37 public abstract void start(WebAppContext context, Descriptor descriptor);
38 public abstract void end(WebAppContext context, Descriptor descriptor);
39
40
41
42
43
44
45
46
47 public void registerVisitor(String nodeName, Method m)
48 {
49 _visitors.put(nodeName, m);
50 }
51
52
53
54
55
56 public void process(WebAppContext context, Descriptor descriptor)
57 throws Exception
58 {
59 if (descriptor == null)
60 return;
61
62 start(context,descriptor);
63
64 XmlParser.Node root = descriptor.getRoot();
65 Iterator<?> iter = root.iterator();
66 XmlParser.Node node = null;
67 while (iter.hasNext())
68 {
69 Object o = iter.next();
70 if (!(o instanceof XmlParser.Node)) continue;
71 node = (XmlParser.Node) o;
72 visit(context, descriptor, node);
73 }
74
75 end(context,descriptor);
76 }
77
78
79 protected void visit (WebAppContext context, Descriptor descriptor, XmlParser.Node node)
80 throws Exception
81 {
82 String name = node.getTag();
83 Method m = _visitors.get(name);
84 if (m != null)
85 m.invoke(this, new Object[]{context, descriptor, node});
86 }
87 }