⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vetoablechangesupport.java

📁 this gcc-g++-3.3.1.tar.gz is a source file of gcc, you can learn more about gcc through this codes f
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  {    if (children == null)      return;    VetoableChangeSupport s      = (VetoableChangeSupport) children.get(propertyName);    if (s == null)      return;    while (l instanceof VetoableChangeListenerProxy)      {        VetoableChangeListenerProxy p = (VetoableChangeListenerProxy) l;        if (propertyName == null ? p.propertyName != null            : ! propertyName.equals(p.propertyName))          return;        l = (VetoableChangeListener) p.getListener();      }    s.listeners.remove(l);    if (s.listeners.isEmpty())      {        children.remove(propertyName);        if (children.isEmpty())          children = null;      }  }  /**   * Returns an array of all vetoable change listeners registered under the   * given property name. If there are no registered listeners, this returns   * an empty array.   *   * @return the array of registered listeners   * @throws NullPointerException if propertyName is null   * @since 1.4   */  public synchronized VetoableChangeListener[]    getVetoableChangeListeners(String propertyName)  {    if (children == null)      return new VetoableChangeListener[0];    VetoableChangeSupport s      = (VetoableChangeSupport) children.get(propertyName);    if (s == null)      return new VetoableChangeListener[0];    return (VetoableChangeListener[])      s.listeners.toArray(new VetoableChangeListener[s.listeners.size()]);  }  /**   * Fire a PropertyChangeEvent containing the old and new values of the   * property to all the global listeners, and to all the listeners for the   * specified property name. This does nothing if old and new are non-null   * and equal. If the change is vetoed, a new event is fired to notify   * listeners about the rollback before the exception is thrown.   *   * @param propertyName the name of the property that changed   * @param oldVal the old value   * @param newVal the new value   * @throws PropertyVetoException if the change is vetoed by a listener   */  public void fireVetoableChange(String propertyName,                                 Object oldVal, Object newVal)    throws PropertyVetoException  {    fireVetoableChange(new PropertyChangeEvent(source, propertyName,                                               oldVal, newVal));  }  /**   * Fire a PropertyChangeEvent containing the old and new values of the   * property to all the global listeners, and to all the listeners for the   * specified property name. This does nothing if old and new are equal.   * If the change is vetoed, a new event is fired to notify listeners about   * the rollback before the exception is thrown.   *   * @param propertyName the name of the property that changed   * @param oldVal the old value   * @param newVal the new value   * @throws PropertyVetoException if the change is vetoed by a listener   */  public void fireVetoableChange(String propertyName, int oldVal, int newVal)    throws PropertyVetoException  {    if (oldVal != newVal)      fireVetoableChange(new PropertyChangeEvent(source, propertyName,                                                 new Integer(oldVal),                                                 new Integer(newVal)));  }  /**   * Fire a PropertyChangeEvent containing the old and new values of the   * property to all the global listeners, and to all the listeners for the   * specified property name. This does nothing if old and new are equal.   * If the change is vetoed, a new event is fired to notify listeners about   * the rollback before the exception is thrown.   *   * @param propertyName the name of the property that changed   * @param oldVal the old value   * @param newVal the new value   * @throws PropertyVetoException if the change is vetoed by a listener   */  public void fireVetoableChange(String propertyName,                                 boolean oldVal, boolean newVal)    throws PropertyVetoException  {    if (oldVal != newVal)      fireVetoableChange(new PropertyChangeEvent(source, propertyName,                                                 Boolean.valueOf(oldVal),                                                 Boolean.valueOf(newVal)));  }  /**   * Fire a PropertyChangeEvent to all the global listeners, and to all the   * listeners for the specified property name. This does nothing if old and   * new values of the event are equal. If the change is vetoed, a new event   * is fired to notify listeners about the rollback before the exception is   * thrown.   *   * @param event the event to fire   * @throws NullPointerException if event is null   * @throws PropertyVetoException if the change is vetoed by a listener   */  public void fireVetoableChange(PropertyChangeEvent event)    throws PropertyVetoException  {    if (event.oldValue != null && event.oldValue.equals(event.newValue))      return;    Vector v = listeners; // Be thread-safe.    if (v != null)      {        int i = v.size();        try          {            while (--i >= 0)              ((VetoableChangeListener) v.get(i)).vetoableChange(event);          }        catch (PropertyVetoException e)          {            event = event.rollback();            int limit = i;            i = v.size();            while (--i >= limit)              ((VetoableChangeListener) v.get(i)).vetoableChange(event);            throw e;          }      }    Hashtable h = children; // Be thread-safe.    if (h != null && event.propertyName != null)      {        VetoableChangeSupport s          = (VetoableChangeSupport) h.get(event.propertyName);        if (s != null)          {            Vector v1 = s.listeners; // Be thread-safe.            int i = v1 == null ? 0 : v1.size();            try              {                while (--i >= 0)                  ((VetoableChangeListener) v1.get(i)).vetoableChange(event);              }            catch (PropertyVetoException e)              {                event = event.rollback();                int limit = i;                i = v.size();                while (--i >= 0)                  ((VetoableChangeListener) v.get(i)).vetoableChange(event);                i = v1.size();                while (--i >= limit)                  ((VetoableChangeListener) v1.get(i)).vetoableChange(event);                throw e;              }          }      }  }  /**   * Tell whether the specified property is being listened on or not. This   * will only return <code>true</code> if there are listeners on all   * properties or if there is a listener specifically on this property.   *   * @param propertyName the property that may be listened on   * @return whether the property is being listened on   * @throws NullPointerException if propertyName is null   */  public synchronized boolean hasListeners(String propertyName)  {    return listeners != null || (children != null                                 && children.get(propertyName) != null);  }  /**   * Saves the state of the object to the stream.   *   * @param s the stream to write to   * @throws IOException if anything goes wrong   * @serialData this writes out a null-terminated list of serializable   *             global vetoable change listeners (the listeners for a named   *             property are written out as the global listeners of the   *             children, when the children hashtable is saved)   */  private synchronized void writeObject(ObjectOutputStream s)    throws IOException  {    s.defaultWriteObject();    if (listeners != null)      {        int i = listeners.size();        while (--i >= 0)          if (listeners.get(i) instanceof Serializable)            s.writeObject(listeners.get(i));      }    s.writeObject(null);  }  /**   * Reads the object back from stream (deserialization).   *   * XXX Since serialization for 1.1 streams was not documented, this may   * not work if vetoableChangeSupportSerializedDataVersion is 1.   *   * @param s the stream to read from   * @throws IOException if reading the stream fails   * @throws ClassNotFoundException if deserialization fails   * @serialData this reads in a null-terminated list of serializable   *             global vetoable change listeners (the listeners for a named   *             property are written out as the global listeners of the   *             children, when the children hashtable is saved)   */  private void readObject(ObjectInputStream s)    throws IOException, ClassNotFoundException  {    s.defaultReadObject();    VetoableChangeListener l = (VetoableChangeListener) s.readObject();    while (l != null)      {        addVetoableChangeListener(l);        l = (VetoableChangeListener) s.readObject();      }    // Sun is not as careful with children as we are, and lets some proxys    // in that can never receive events. So, we clean up anything that got    // serialized, to make sure our invariants hold.    if (children != null)      {        int i = children.size();        Iterator iter = children.entrySet().iterator();        while (--i >= 0)          {            Entry e = (Entry) iter.next();            String name = (String) e.getKey();            VetoableChangeSupport vcs = (VetoableChangeSupport) e.getValue();            if (vcs.listeners == null)              vcs.listeners = new Vector();            if (vcs.children != null)              vcs.listeners.addAll                (Arrays.asList(vcs.getVetoableChangeListeners(name)));            if (vcs.listeners.size() == 0)              iter.remove();            else              vcs.children = null;          }        if (children.size() == 0)          children = null;      }  }} // class VetoableChangeSupport

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -