1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package java.beans.beancontext;
  27 
  28 import java.util.EventObject;
  29 
  30 import java.beans.beancontext.BeanContext;
  31 import java.beans.beancontext.BeanContextEvent;
  32 
  33 import java.util.Arrays;
  34 import java.util.Collection;
  35 import java.util.Iterator;
  36 
  37 /**
  38  * A {@code BeanContextMembershipEvent} encapsulates
  39  * the list of children added to, or removed from,
  40  * the membership of a particular {@code BeanContext}.
  41  * An instance of this event is fired whenever a successful
  42  * add(), remove(), retainAll(), removeAll(), or clear() is
  43  * invoked on a given {@code BeanContext} instance.
  44  * Objects interested in receiving events of this type must
  45  * implement the {@code BeanContextMembershipListener}
  46  * interface, and must register their intent via the
  47  * {@code BeanContext}'s
  48  * {@code addBeanContextMembershipListener(BeanContextMembershipListener bcml)}
  49  * method.
  50  *
  51  * @author      Laurence P. G. Cable
  52  * @since       1.2
  53  * @see         java.beans.beancontext.BeanContext
  54  * @see         java.beans.beancontext.BeanContextEvent
  55  * @see         java.beans.beancontext.BeanContextMembershipListener
  56  */
  57 public class BeanContextMembershipEvent extends BeanContextEvent {
  58     private static final long serialVersionUID = 3499346510334590959L;
  59 
  60     /**
  61      * Contruct a BeanContextMembershipEvent
  62      *
  63      * @param bc        The BeanContext source
  64      * @param changes   The Children affected
  65      * @throws NullPointerException if {@code changes} is {@code null}
  66      */
  67 
  68     @SuppressWarnings("rawtypes")
  69     public BeanContextMembershipEvent(BeanContext bc, Collection changes) {
  70         super(bc);
  71 
  72         if (changes == null) throw new NullPointerException(
  73             "BeanContextMembershipEvent constructor:  changes is null.");
  74 
  75         children = changes;
  76     }
  77 
  78     /**
  79      * Contruct a BeanContextMembershipEvent
  80      *
  81      * @param bc        The BeanContext source
  82      * @param changes   The Children effected
  83      * @exception       NullPointerException if changes associated with this
  84      *                  event are null.
  85      */
  86 
  87     public BeanContextMembershipEvent(BeanContext bc, Object[] changes) {
  88         super(bc);
  89 
  90         if (changes == null) throw new NullPointerException(
  91             "BeanContextMembershipEvent:  changes is null.");
  92 
  93         children = Arrays.asList(changes);
  94     }
  95 
  96     /**
  97      * Gets the number of children affected by the notification.
  98      * @return the number of children affected by the notification
  99      */
 100     public int size() { return children.size(); }
 101 
 102     /**
 103      * Is the child specified affected by the event?
 104      * @return {@code true} if affected, {@code false}
 105      * if not
 106      * @param child the object to check for being affected
 107      */
 108     public boolean contains(Object child) {
 109         return children.contains(child);
 110     }
 111 
 112     /**
 113      * Gets the array of children affected by this event.
 114      * @return the array of children affected
 115      */
 116     public Object[] toArray() { return children.toArray(); }
 117 
 118     /**
 119      * Gets the array of children affected by this event.
 120      * @return the array of children effected
 121      */
 122     @SuppressWarnings("rawtypes")
 123     public Iterator iterator() { return children.iterator(); }
 124 
 125     /*
 126      * fields
 127      */
 128 
 129    /**
 130     * The list of children affected by this
 131     * event notification.
 132     */
 133     @SuppressWarnings({"rawtypes",
 134                        "serial"}) // Not statically typed as Serializable
 135     protected Collection children;
 136 }