001: /**
002: * The XMOJO Project 5
003: * Copyright © 2003 XMOJO.org. All rights reserved.
004:
005: * NO WARRANTY
006:
007: * BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
008: * THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
009: * OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
010: * PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
011: * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
012: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
013: * TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
014: * LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
015: * REPAIR OR CORRECTION.
016:
017: * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
018: * ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
019: * THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
020: * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
021: * USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
022: * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
023: * PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE),
024: * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
025: * SUCH DAMAGES.
026: **/package javax.management.relation;
027:
028: import java.util.Vector;
029:
030: import javax.management.ObjectName;
031: import javax.management.Notification;
032: import javax.management.MBeanServerNotification;
033: import javax.management.NotificationFilterSupport;
034:
035: /**
036: * This filter allows to filter MBeanServerNotification notifications by
037: * selecting the ObjectNames of interest and the operations (registration,
038: * unregistration, both) of interest (corresponding to notification types).
039: */
040: public class MBeanServerNotificationFilter extends
041: NotificationFilterSupport {
042: // This variable manages a list of ObjectNames .
043: private Vector mEnabledObjectNames = null;
044: private Vector mDisabledObjectNames = null;
045:
046: private boolean mEnableAll = true;
047: private boolean mDisableAll = false;
048:
049: /**
050: * Creates a filter selecting all MBeanServerNotification notifications for
051: * all ObjectNames
052: */
053: public MBeanServerNotificationFilter() {
054: mEnabledObjectNames = new Vector();
055: mDisabledObjectNames = new Vector();
056: }
057:
058: /**
059: * Disables any MBeanServerNotification (i.e. all ObjectNames deselected)
060: */
061: public void disableAllObjectNames() {
062: mEnableAll = false;
063: mDisableAll = true;
064: }
065:
066: /**
067: * Disables MBeanServerNotifications concerning given ObjectName.
068: *
069: * @param theObjName - ObjectName no longer of interest
070: *
071: * @exception java.lang.IllegalArgumentException - if the given ObjectName is null
072: */
073: public void disableObjectName(ObjectName theObjName)
074: throws IllegalArgumentException {
075: mEnableAll = false;
076: mDisabledObjectNames.add(theObjName);
077: }
078:
079: /**
080: * Enables all MBeanServerNotifications (i.e. all ObjectNames selected)
081: */
082: public void enableAllObjectNames() {
083: mEnableAll = true;
084: }
085:
086: /**
087: * Enables MBeanServerNotifications concerning given ObjectName.
088: *
089: * @param theObjName - ObjectName of interest
090: *
091: * @exception java.lang.IllegalArgumentException - if the given ObjectName is null
092: */
093: public void enableObjectName(ObjectName theObjName)
094: throws IllegalArgumentException {
095: if (theObjName == null)
096: throw new IllegalArgumentException(
097: "ObjectName Cannot be null");
098:
099: mEnableAll = false;
100:
101: //TODO -- Check if it is already present. If yes, then do not add.
102: mEnabledObjectNames.add(theObjName);
103: }
104:
105: /**
106: * Gets all the ObjectNames disabled.
107: *
108: * @return Vector of ObjectNames:
109: * -null means all ObjectNames are implicitly deselected,
110: * except the ObjectNames explicitly selected
111: * -empty means all ObjectNames are selected, i.e. no
112: * ObjectName deselected.
113: */
114: public Vector getDisabledObjectNames() {
115: if (mEnableAll)
116: return new Vector();
117:
118: return mDisabledObjectNames;
119: }
120:
121: /**
122: * Gets all the ObjectNames enabled.
123: *
124: * @return Vector of ObjectNames:
125: * -null means all ObjectNames are implicitly selected,
126: * except the ObjectNames explicitly deselected
127: * - empty means all ObjectNames are deselected, i.e. no
128: * ObjectName selected.
129: */
130: public Vector getEnabledObjectNames() {
131: if (mEnableAll)
132: return null;
133:
134: return mEnabledObjectNames;
135: }
136:
137: /**
138: * Invoked before sending the specified notification to the listener.
139: * If:
140: * - the ObjectName of the concerned MBean is selected (explicitly OR
141: * (implicitly and not explicitly deselected))
142: * AND
143: * - the type of the operation (registration or unregistration) is
144: * selected then the notification is sent to the listener.
145: *
146: * Overrides:
147: * isNotificationEnabled in class NotificationFilterSupport
148: *
149: * @param theNtf - The notification to be sent.
150: *
151: * @return true if the notification has to be sent to the listener, false otherwise.
152: *
153: * @exception java.lang.IllegalArgumentException - if null parameter
154: */
155: public boolean isNotificationEnabled(Notification theNtf)
156: throws IllegalArgumentException {
157: if (theNtf == null)
158: throw new IllegalArgumentException();
159:
160: String type = theNtf.getType();
161: ObjectName name = null;
162:
163: if (theNtf instanceof MBeanServerNotification) {
164: //Now you have to check if it already present in the enabled type of this filter.
165: //Check if the ObjectName is present in the list of deselected .
166: //If it is not , send the Notification.
167: name = ((MBeanServerNotification) (theNtf)).getMBeanName();
168: if (mEnableAll) {
169: return true;
170: } else {
171: //if it is present in the list of enabled ObjectNames, return true.else return false.
172: if (mEnabledObjectNames.contains(name)) {
173: return true;
174: }
175: }
176: }
177:
178: return false;
179: }
180: }
|