1. /*
  2. * ====================================================================
  3. *
  4. * The Apache Software License, Version 1.1
  5. *
  6. * Copyright (c) 1999 The Apache Software Foundation. All rights
  7. * reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. *
  13. * 1. Redistributions of source code must retain the above copyright
  14. * notice, this list of conditions and the following disclaimer.
  15. *
  16. * 2. Redistributions in binary form must reproduce the above copyright
  17. * notice, this list of conditions and the following disclaimer in
  18. * the documentation and/or other materials provided with the
  19. * distribution.
  20. *
  21. * 3. The end-user documentation included with the redistribution, if
  22. * any, must include the following acknowlegement:
  23. * "This product includes software developed by the
  24. * Apache Software Foundation (http://www.apache.org/)."
  25. * Alternately, this acknowlegement may appear in the software itself,
  26. * if and wherever such third-party acknowlegements normally appear.
  27. *
  28. * 4. The names "The Jakarta Project", "Commons", and "Apache Software
  29. * Foundation" must not be used to endorse or promote products derived
  30. * from this software without prior written permission. For written
  31. * permission, please contact apache@apache.org.
  32. *
  33. * 5. Products derived from this software may not be called "Apache"
  34. * nor may "Apache" appear in their names without prior written
  35. * permission of the Apache Group.
  36. *
  37. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  38. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  39. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  40. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  41. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  42. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  43. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  44. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  45. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  46. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  47. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  48. * SUCH DAMAGE.
  49. * ====================================================================
  50. *
  51. * This software consists of voluntary contributions made by many
  52. * individuals on behalf of the Apache Software Foundation. For more
  53. * information on the Apache Software Foundation, please see
  54. * <http://www.apache.org/>.
  55. *
  56. * [Additional notices, if required by prior licensing conditions]
  57. *
  58. */
  59. package org.apache.commons.modeler;
  60. import java.util.HashSet;
  61. import javax.management.Notification;
  62. import javax.management.NotificationFilter;
  63. /**
  64. * Special NotificationFilter that allows modeler to optimize its notifications.
  65. *
  66. * This class is immutable - after you construct it it'll filter based on
  67. * a fixed set of notification names.
  68. *
  69. * The JMX specification requires the filters to be called before the
  70. * notifications are sent. We can call this filter well in advance, when
  71. * the listener is added. Based on the result we can maintain separate
  72. * channels for each notification - and reduce the overhead.
  73. *
  74. * @author Costin Manolache
  75. */
  76. public class FixedNotificationFilter implements NotificationFilter {
  77. /**
  78. * The set of attribute names that are accepted by this filter. If this
  79. * list is empty, all attribute names are accepted.
  80. */
  81. private HashSet names = new HashSet();
  82. String namesA[]=null;
  83. /**
  84. * Construct a new filter that accepts only the specified notification
  85. * names.
  86. *
  87. * @param names Names of the notification types
  88. */
  89. public FixedNotificationFilter(String names[]) {
  90. super();
  91. }
  92. /**
  93. * Return the set of names that are accepted by this filter. If this
  94. * filter accepts all attribute names, a zero length array will be
  95. * returned.
  96. */
  97. public String[] getNames() {
  98. synchronized (names) {
  99. return ((String[]) names.toArray(new String[names.size()]));
  100. }
  101. }
  102. /**
  103. * <p>Test whether notification enabled for this event.
  104. * Return true if:</p>
  105. * <ul>
  106. * <li>Either the set of accepted names is empty (implying that all
  107. * attribute names are of interest) or the set of accepted names
  108. * includes the name of the attribute in this notification</li>
  109. * </ul>
  110. */
  111. public boolean isNotificationEnabled(Notification notification) {
  112. if (notification == null)
  113. return (false);
  114. synchronized (names) {
  115. if (names.size() < 1)
  116. return (true);
  117. else
  118. return (names.contains(notification.getType()));
  119. }
  120. }
  121. }