Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 
 package org.apache.tomcat.util.modeler;
 
 
 import static org.jboss.web.CoyoteMessages.MESSAGES;
 
 

Implementation of NotificationBroadcaster for attribute change notifications. This class is used by BaseModelMBean to handle notifications of attribute change events to interested listeners.

Author(s):
Craig R. McClanahan
Costin Manolache
 
 
 
 
     // ----------------------------------------------------------- Constructors
 
 
     // ----------------------------------------------------- Instance Variables
 

    
The set of registered BaseNotificationBroadcasterEntry entries.
 
     protected ArrayList entries = new ArrayList();
 
 
     // --------------------------------------------------------- Public Methods
 

    
Add a notification event listener to this MBean.

Parameters:
listener Listener that will receive event notifications
filter Filter object used to filter event notifications actually delivered, or null for no filtering
handback Handback object to be sent along with event notifications
Throws:
java.lang.IllegalArgumentException if the listener parameter is null
 
     public void addNotificationListener(NotificationListener listener,
                                         NotificationFilter filter,
                                         Object handback)
         throws IllegalArgumentException {
 
         synchronized () {
 
             // Optimization to coalesce attribute name filters
             if (filter instanceof BaseAttributeFilter) {
                 BaseAttributeFilter newFilter = (BaseAttributeFilterfilter;
                 Iterator items = .iterator();
                 while (items.hasNext()) {
                     BaseNotificationBroadcasterEntry item =
                         (BaseNotificationBroadcasterEntryitems.next();
                     if ((item.listener == listener) &&
                         (item.filter != null) &&
                         (item.filter instanceof BaseAttributeFilter) &&
                         (item.handback == handback)) {
                         BaseAttributeFilter oldFilter =
                             (BaseAttributeFilteritem.filter;
                         String newNames[] = newFilter.getNames();
                         String oldNames[] = oldFilter.getNames();
                         if (newNames.length == 0) {
                             oldFilter.clear();
                         } else {
                            if (oldNames.length != 0) {
                                for (int i = 0; i < newNames.lengthi++)
                                    oldFilter.addAttribute(newNames[i]);
                            }
                        }
                        return;
                    }
                }
            }
            // General purpose addition of a new entry
            .add(new BaseNotificationBroadcasterEntry
                        (listenerfilterhandback));
        }
    }


    
Return an MBeanNotificationInfo object describing the notifications sent by this MBean.
        return (new MBeanNotificationInfo[0]);
    }


    
Remove a notification event listener from this MBean.

Parameters:
listener The listener to be removed (any and all registrations for this listener will be eliminated)
Throws:
javax.management.ListenerNotFoundException if this listener is not registered in the MBean
    public void removeNotificationListener(NotificationListener listener)
        throws ListenerNotFoundException {
        synchronized () {
            Iterator items = .iterator();
            while (items.hasNext()) {
                BaseNotificationBroadcasterEntry item =
                    (BaseNotificationBroadcasterEntryitems.next();
                if (item.listener == listener)
                    items.remove();
            }
        }
    }


    
Remove a notification event listener from this MBean.

Parameters:
listener The listener to be removed (any and all registrations for this listener will be eliminated)
handback Handback object to be sent along with event notifications
Throws:
javax.management.ListenerNotFoundException if this listener is not registered in the MBean
    public void removeNotificationListener(NotificationListener listener,
                                           Object handback)
        throws ListenerNotFoundException {
        removeNotificationListener(listener);
    }


    
Remove a notification event listener from this MBean.

Parameters:
listener The listener to be removed (any and all registrations for this listener will be eliminated)
filter Filter object used to filter event notifications actually delivered, or null for no filtering
handback Handback object to be sent along with event notifications
Throws:
javax.management.ListenerNotFoundException if this listener is not registered in the MBean
    public void removeNotificationListener(NotificationListener listener,
                                           NotificationFilter filter,
                                           Object handback)
        throws ListenerNotFoundException {
        removeNotificationListener(listener);
    }


    
Send the specified notification to all interested listeners.

Parameters:
notification The notification to be sent
    public void sendNotification(Notification notification) {
        synchronized () {
            Iterator items = .iterator();
            while (items.hasNext()) {
                BaseNotificationBroadcasterEntry item =
                    (BaseNotificationBroadcasterEntryitems.next();
                if ((item.filter != null) &&
                    (!item.filter.isNotificationEnabled(notification)))
                    continue;
                item.listener.handleNotification(notificationitem.handback);
            }
        }
    }
    // -------------------- Internal Extensions   --------------------
    // Fast access. First index is the hook type
    // ( FixedNotificationFilter.getType() ).
    int hookCount[]=new int[20];
    private synchronized void registerNotificationsFixedNotificationFilter filter ) {
        String names[]=filter.getNames();
        Registry reg=Registry.getRegistry();
        forint i=0; i<names.lengthi++ ) {
            int code=reg.getId(nullnames[i]);
            if. < code ) {
                // XXX reallocate
                throw .tooManyHooks(code);
            }
            NotificationListener listeners[]=[code];
            iflisteners== null ) {
            }
        }
    }
Utility class representing a particular registered listener entry.
                                            NotificationFilter filter,
                                            Object handback) {
        this. = listener;
        this. = filter;
        this. = handback;
    }
    public NotificationFilter filter = null;
    public Object handback = null;
    public NotificationListener listener = null;
New to GrepCode? Check out our FAQ X