KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tomcat > util > modeler > BaseAttributeFilter


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.tomcat.util.modeler;
20
21
22 import java.util.HashSet JavaDoc;
23
24 import javax.management.AttributeChangeNotification JavaDoc;
25 import javax.management.Notification JavaDoc;
26 import javax.management.NotificationFilter JavaDoc;
27
28
29 /**
30  * <p>Implementation of <code>NotificationFilter</code> for attribute change
31  * notifications. This class is used by <code>BaseModelMBean</code> to
32  * construct attribute change notification event filters when a filter is not
33  * supplied by the application.</p>
34  *
35  * @author Craig R. McClanahan
36  * @version $Revision: 467222 $ $Date: 2006-10-24 05:17:11 +0200 (mar., 24 oct. 2006) $
37  */

38
39 public class BaseAttributeFilter implements NotificationFilter JavaDoc {
40
41
42     // ----------------------------------------------------------- Constructors
43

44
45     /**
46      * Construct a new filter that accepts only the specified attribute
47      * name.
48      *
49      * @param name Name of the attribute to be accepted by this filter, or
50      * <code>null</code> to accept all attribute names
51      */

52     public BaseAttributeFilter(String JavaDoc name) {
53
54         super();
55         if (name != null)
56             addAttribute(name);
57
58     }
59
60
61     // ----------------------------------------------------- Instance Variables
62

63
64     /**
65      * The set of attribute names that are accepted by this filter. If this
66      * list is empty, all attribute names are accepted.
67      */

68     private HashSet JavaDoc names = new HashSet JavaDoc();
69
70
71     // --------------------------------------------------------- Public Methods
72

73
74     /**
75      * Add a new attribute name to the set of names accepted by this filter.
76      *
77      * @param name Name of the attribute to be accepted
78      */

79     public void addAttribute(String JavaDoc name) {
80
81         synchronized (names) {
82             names.add(name);
83         }
84
85     }
86
87
88     /**
89      * Clear all accepted names from this filter, so that it will accept
90      * all attribute names.
91      */

92     public void clear() {
93
94         synchronized (names) {
95             names.clear();
96         }
97
98     }
99
100
101     /**
102      * Return the set of names that are accepted by this filter. If this
103      * filter accepts all attribute names, a zero length array will be
104      * returned.
105      */

106     public String JavaDoc[] getNames() {
107
108         synchronized (names) {
109             return ((String JavaDoc[]) names.toArray(new String JavaDoc[names.size()]));
110         }
111
112     }
113
114
115     /**
116      * <p>Test whether notification enabled for this event.
117      * Return true if:</p>
118      * <ul>
119      * <li>This is an attribute change notification</li>
120      * <li>Either the set of accepted names is empty (implying that all
121      * attribute names are of interest) or the set of accepted names
122      * includes the name of the attribute in this notification</li>
123      * </ul>
124      */

125     public boolean isNotificationEnabled(Notification JavaDoc notification) {
126
127         if (notification == null)
128             return (false);
129         if (!(notification instanceof AttributeChangeNotification JavaDoc))
130             return (false);
131         AttributeChangeNotification JavaDoc acn =
132             (AttributeChangeNotification JavaDoc) notification;
133         if (!AttributeChangeNotification.ATTRIBUTE_CHANGE.equals(acn.getType()))
134             return (false);
135         synchronized (names) {
136             if (names.size() < 1)
137                 return (true);
138             else
139                 return (names.contains(acn.getAttributeName()));
140         }
141
142     }
143
144
145     /**
146      * Remove an attribute name from the set of names accepted by this
147      * filter.
148      *
149      * @param name Name of the attribute to be removed
150      */

151     public void removeAttribute(String JavaDoc name) {
152
153         synchronized (names) {
154             names.remove(name);
155         }
156
157     }
158
159
160 }
161
Popular Tags