1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.modeler.modules;
20
21 import java.io.InputStream;
22 import java.net.URL;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.commons.digester.Digester;
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.apache.commons.modeler.Registry;
30
31 public class MbeansDescriptorsDigesterSource extends ModelerSource
32 {
33 private static Log log =
34 LogFactory.getLog(MbeansDescriptorsDigesterSource.class);
35
36 Registry registry;
37 String location;
38 String type;
39 Object source;
40 List mbeans=new ArrayList();
41
42 public void setRegistry(Registry reg) {
43 this.registry=reg;
44 }
45
46 public void setLocation( String loc ) {
47 this.location=loc;
48 }
49
50 /*** Used if a single component is loaded
51 *
52 * @param type
53 */
54 public void setType( String type ) {
55 this.type=type;
56 }
57
58 public void setSource( Object source ) {
59 this.source=source;
60 }
61
62 public List loadDescriptors( Registry registry, String location,
63 String type, Object source)
64 throws Exception
65 {
66 setRegistry(registry);
67 setLocation(location);
68 setType(type);
69 setSource(source);
70 execute();
71 return mbeans;
72 }
73
74 public void execute() throws Exception {
75 if( registry==null ) registry=Registry.getRegistry();
76
77 InputStream stream=(InputStream)source;
78
79 long t1=System.currentTimeMillis();
80
81 Digester digester = new Digester();
82 digester.setNamespaceAware(false);
83 digester.setValidating(false);
84 URL url = registry.getClass().getResource
85 ("/org/apache/commons/modeler/mbeans-descriptors.dtd");
86 digester.register
87 ("-//Apache Software Foundation//DTD Model MBeans Configuration File",
88 url.toString());
89
90
91 digester.push(mbeans);
92
93
94 digester.addObjectCreate
95 ("mbeans-descriptors/mbean",
96 "org.apache.commons.modeler.ManagedBean");
97 digester.addSetProperties
98 ("mbeans-descriptors/mbean");
99 digester.addSetNext
100 ("mbeans-descriptors/mbean",
101 "add",
102 "java.lang.Object");
103
104 digester.addObjectCreate
105 ("mbeans-descriptors/mbean/attribute",
106 "org.apache.commons.modeler.AttributeInfo");
107 digester.addSetProperties
108 ("mbeans-descriptors/mbean/attribute");
109 digester.addSetNext
110 ("mbeans-descriptors/mbean/attribute",
111 "addAttribute",
112 "org.apache.commons.modeler.AttributeInfo");
113
114 digester.addObjectCreate
115 ("mbeans-descriptors/mbean/attribute/descriptor/field",
116 "org.apache.commons.modeler.FieldInfo");
117 digester.addSetProperties
118 ("mbeans-descriptors/mbean/attribute/descriptor/field");
119 digester.addSetNext
120 ("mbeans-descriptors/mbean/attribute/descriptor/field",
121 "addField",
122 "org.apache.commons.modeler.FieldInfo");
123
124 digester.addObjectCreate
125 ("mbeans-descriptors/mbean/constructor",
126 "org.apache.commons.modeler.ConstructorInfo");
127 digester.addSetProperties
128 ("mbeans-descriptors/mbean/constructor");
129 digester.addSetNext
130 ("mbeans-descriptors/mbean/constructor",
131 "addConstructor",
132 "org.apache.commons.modeler.ConstructorInfo");
133
134 digester.addObjectCreate
135 ("mbeans-descriptors/mbean/constructor/descriptor/field",
136 "org.apache.commons.modeler.FieldInfo");
137 digester.addSetProperties
138 ("mbeans-descriptors/mbean/constructor/descriptor/field");
139 digester.addSetNext
140 ("mbeans-descriptors/mbean/constructor/descriptor/field",
141 "addField",
142 "org.apache.commons.modeler.FieldInfo");
143
144 digester.addObjectCreate
145 ("mbeans-descriptors/mbean/constructor/parameter",
146 "org.apache.commons.modeler.ParameterInfo");
147 digester.addSetProperties
148 ("mbeans-descriptors/mbean/constructor/parameter");
149 digester.addSetNext
150 ("mbeans-descriptors/mbean/constructor/parameter",
151 "addParameter",
152 "org.apache.commons.modeler.ParameterInfo");
153
154 digester.addObjectCreate
155 ("mbeans-descriptors/mbean/descriptor/field",
156 "org.apache.commons.modeler.FieldInfo");
157 digester.addSetProperties
158 ("mbeans-descriptors/mbean/descriptor/field");
159 digester.addSetNext
160 ("mbeans-descriptors/mbean/descriptor/field",
161 "addField",
162 "org.apache.commons.modeler.FieldInfo");
163
164 digester.addObjectCreate
165 ("mbeans-descriptors/mbean/notification",
166 "org.apache.commons.modeler.NotificationInfo");
167 digester.addSetProperties
168 ("mbeans-descriptors/mbean/notification");
169 digester.addSetNext
170 ("mbeans-descriptors/mbean/notification",
171 "addNotification",
172 "org.apache.commons.modeler.NotificationInfo");
173
174 digester.addObjectCreate
175 ("mbeans-descriptors/mbean/notification/descriptor/field",
176 "org.apache.commons.modeler.FieldInfo");
177 digester.addSetProperties
178 ("mbeans-descriptors/mbean/notification/descriptor/field");
179 digester.addSetNext
180 ("mbeans-descriptors/mbean/notification/descriptor/field",
181 "addField",
182 "org.apache.commons.modeler.FieldInfo");
183
184 digester.addCallMethod
185 ("mbeans-descriptors/mbean/notification/notification-type",
186 "addNotifType", 0);
187
188 digester.addObjectCreate
189 ("mbeans-descriptors/mbean/operation",
190 "org.apache.commons.modeler.OperationInfo");
191 digester.addSetProperties
192 ("mbeans-descriptors/mbean/operation");
193 digester.addSetNext
194 ("mbeans-descriptors/mbean/operation",
195 "addOperation",
196 "org.apache.commons.modeler.OperationInfo");
197
198 digester.addObjectCreate
199 ("mbeans-descriptors/mbean/operation/descriptor/field",
200 "org.apache.commons.modeler.FieldInfo");
201 digester.addSetProperties
202 ("mbeans-descriptors/mbean/operation/descriptor/field");
203 digester.addSetNext
204 ("mbeans-descriptors/mbean/operation/descriptor/field",
205 "addField",
206 "org.apache.commons.modeler.FieldInfo");
207
208 digester.addObjectCreate
209 ("mbeans-descriptors/mbean/operation/parameter",
210 "org.apache.commons.modeler.ParameterInfo");
211 digester.addSetProperties
212 ("mbeans-descriptors/mbean/operation/parameter");
213 digester.addSetNext
214 ("mbeans-descriptors/mbean/operation/parameter",
215 "addParameter",
216 "org.apache.commons.modeler.ParameterInfo");
217
218
219 try {
220 digester.parse(stream);
221 } catch (Exception e) {
222 log.error("Error digesting Registry data", e);
223 throw e;
224 }
225 long t2=System.currentTimeMillis();
226
227 log.info("Loaded registry information (digester) " + ( t2 - t1 ) + " ms");
228 }
229 }