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;
20  
21  
22  import java.io.Serializable;
23  
24  import javax.management.Descriptor;
25  import javax.management.modelmbean.ModelMBeanNotificationInfo;
26  
27  
28  /***
29   * <p>Internal configuration information for a <code>Notification</code>
30   * descriptor.</p>
31   *
32   * @author Craig R. McClanahan
33   * @version $Revision: 480402 $ $Date: 2006-11-29 04:43:23 +0000 (Wed, 29 Nov 2006) $
34   */
35  
36  public class NotificationInfo extends FeatureInfo implements Serializable {
37      static final long serialVersionUID = -6319885418912650856L;
38  
39      // ----------------------------------------------------- Instance Variables
40  
41  
42      /***
43       * The <code>ModelMBeanNotificationInfo</code> object that corresponds
44       * to this <code>NotificationInfo</code> instance.
45       */
46      transient ModelMBeanNotificationInfo info = null;
47      protected String notifTypes[] = new String[0];
48  
49      // ------------------------------------------------------------- Properties
50  
51  
52      /***
53       * Override the <code>description</code> property setter.
54       *
55       * @param description The new description
56       */
57      public void setDescription(String description) {
58          super.setDescription(description);
59          this.info = null;
60      }
61  
62  
63      /***
64       * Override the <code>name</code> property setter.
65       *
66       * @param name The new name
67       */
68      public void setName(String name) {
69          super.setName(name);
70          this.info = null;
71      }
72  
73  
74      /***
75       * The set of notification types for this MBean.
76       */
77      public String[] getNotifTypes() {
78          return (this.notifTypes);
79      }
80  
81  
82      // --------------------------------------------------------- Public Methods
83  
84  
85      /***
86       * Add a new notification type to the set managed by an MBean.
87       *
88       * @param notifType The new notification type
89       */
90      public void addNotifType(String notifType) {
91  
92          synchronized (notifTypes) {
93              String results[] = new String[notifTypes.length + 1];
94              System.arraycopy(notifTypes, 0, results, 0, notifTypes.length);
95              results[notifTypes.length] = notifType;
96              notifTypes = results;
97              this.info = null;
98          }
99  
100     }
101 
102 
103     /***
104      * Create and return a <code>ModelMBeanNotificationInfo</code> object that
105      * corresponds to the attribute described by this instance.
106      */
107     public ModelMBeanNotificationInfo createNotificationInfo() {
108 
109         // Return our cached information (if any)
110         if (info != null)
111             return (info);
112 
113         // Create and return a new information object
114         info = new ModelMBeanNotificationInfo
115             (getNotifTypes(), getName(), getDescription());
116         Descriptor descriptor = info.getDescriptor();
117         addFields(descriptor);
118         info.setDescriptor(descriptor);
119         return (info);
120 
121     }
122 
123 
124     /***
125      * Return a string representation of this notification descriptor.
126      */
127     public String toString() {
128 
129         StringBuffer sb = new StringBuffer("NotificationInfo[");
130         sb.append("name=");
131         sb.append(name);
132         sb.append(", description=");
133         sb.append(description);
134         sb.append(", notifTypes=");
135         sb.append(notifTypes.length);
136         sb.append("]");
137         return (sb.toString());
138 
139     }
140 
141 
142 }