View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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          // Push our registry object onto the stack
91          digester.push(mbeans);
92  
93          // Configure the parsing rules
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         // Process the input file to configure our registry
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 //        if( t2-t1 > 500 )
227         log.info("Loaded registry information (digester) " + ( t2 - t1 ) + " ms");
228     }
229 }