Source for javax.management.AttributeChangeNotificationFilter

   1: /* AttributeChangeNotificationFilter.java -- Filter on attribute name
   2:    Copyright (C) 2007 Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: package javax.management;
  39: 
  40: import java.io.Serializable;
  41: 
  42: import java.util.Vector;
  43: 
  44: /**
  45:  * Performs filtering of {@link AttributeChangeNotification}s
  46:  * based on a list of attribute names.
  47:  *
  48:  * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
  49:  * @since 1.5
  50:  */
  51: public class AttributeChangeNotificationFilter
  52:   implements NotificationFilter, Serializable
  53: {
  54: 
  55:   /**
  56:    * Compatible with JDK 1.5
  57:    */
  58:   private static final long serialVersionUID = -6347317584796410029L;
  59: 
  60:   /**
  61:    * Lists the names of the attributes that may pass
  62:    * through the filter.
  63:    */
  64:   private final Vector<String> enabledAttributes = new Vector<String>();
  65: 
  66:   /**
  67:    * Blocks all {@link AttributeChangeNotification}s
  68:    * by emptying the list of enabled attributes.
  69:    */
  70:   public void disableAllAttributes()
  71:   {
  72:     enabledAttributes.clear();
  73:   }
  74: 
  75:   /**
  76:    * Removes the specified attribute name from the list
  77:    * of enabled attributes, thus preventing
  78:    * {@link AttributeChangeNotification}s for this attribute
  79:    * from passing through the filter.  If the attribute is
  80:    * not enabled, this has no effect.
  81:    *
  82:    * @param name the name of the attribute to disable.
  83:    */
  84:   public void disableAttribute(String name)
  85:   {
  86:     enabledAttributes.remove(name);
  87:   }
  88: 
  89:   /**
  90:    * Adds the specified attribute name to the list
  91:    * of enabled attributes, thus allowing
  92:    * {@link AttributeChangeNotification}s for this attribute
  93:    * to pass through the filter.  If the attribute is
  94:    * enabled, this has no effect.
  95:    *
  96:    * @param name the name of the attribute to enable.
  97:    */
  98:   public void enableAttribute(String name)
  99:   {
 100:     if (!enabledAttributes.contains(name))
 101:       enabledAttributes.add(name);
 102:   }
 103:   
 104:   /**
 105:    * Returns the list of enabled attributes for this
 106:    * filter.
 107:    *
 108:    * @return the list of enabled attributes.
 109:    */
 110:   public Vector<String> getEnabledAttributes()
 111:   {
 112:     return enabledAttributes;
 113:   }
 114: 
 115:   /**
 116:    * Returns true if the specified notification is an
 117:    * {@link AttributeChangeNotification} and the name of the
 118:    * attribute concerned is in the list of enabled attributes
 119:    * for this filter.
 120:    *
 121:    * @param notif the notification being filtered.
 122:    * @return true if the notification is an
 123:    *         {@link AttributeChangeNotification} for an
 124:    *         enabled attribute.
 125:    */
 126:   public boolean isNotificationEnabled(Notification notif)
 127:   {
 128:     if (notif instanceof AttributeChangeNotification)
 129:       {
 130:     AttributeChangeNotification n =
 131:       (AttributeChangeNotification) notif;
 132:     return enabledAttributes.contains(n.getAttributeName());
 133:       }
 134:     return false;
 135:   }
 136: 
 137: }