1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mortbay.jetty.handler;
17
18
19 import org.mortbay.jetty.Handler;
20 import org.mortbay.jetty.HandlerContainer;
21 import org.mortbay.util.LazyList;
22
23
24
25
26
27
28
29
30
31 public abstract class AbstractHandlerContainer extends AbstractHandler implements HandlerContainer
32 {
33
34
35
36
37 public AbstractHandlerContainer()
38 {
39 }
40
41
42 public Handler[] getChildHandlers()
43 {
44 Object list = expandChildren(null,null);
45 return (Handler[])LazyList.toArray(list, Handler.class);
46 }
47
48
49 public Handler[] getChildHandlersByClass(Class byclass)
50 {
51 Object list = expandChildren(null,byclass);
52 return (Handler[])LazyList.toArray(list, Handler.class);
53 }
54
55
56 public Handler getChildHandlerByClass(Class byclass)
57 {
58
59 Object list = expandChildren(null,byclass);
60 if (list==null)
61 return null;
62 return (Handler)LazyList.get(list, 0);
63 }
64
65
66 protected Object expandChildren(Object list, Class byClass)
67 {
68 return list;
69 }
70
71
72 protected Object expandHandler(Handler handler, Object list, Class byClass)
73 {
74 if (handler==null)
75 return list;
76
77 if (handler!=null && (byClass==null || byClass.isAssignableFrom(handler.getClass())))
78 list=LazyList.add(list, handler);
79
80 if (handler instanceof AbstractHandlerContainer)
81 list=((AbstractHandlerContainer)handler).expandChildren(list, byClass);
82 else if (handler instanceof HandlerContainer)
83 {
84 HandlerContainer container = (HandlerContainer)handler;
85 Handler[] handlers=byClass==null?container.getChildHandlers():container.getChildHandlersByClass(byClass);
86 list=LazyList.addArray(list, handlers);
87 }
88
89 return list;
90 }
91
92
93 }