All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.cedarsoft.utils.event.NonTransientPropertyChangeSupport Maven / Gradle / Ivy

The newest version!
package eu.cedarsoft.utils.event;

import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * A property change support that has non-transient listeners
 */
public class NonTransientPropertyChangeSupport {
  @NotNull
  private final List listeners = new ArrayList();
  @NotNull
  private final Object sourceBean;

  public NonTransientPropertyChangeSupport( @NotNull @NonNls Object sourceBean ) {
    this.sourceBean = sourceBean;
  }

  public void removePropertyChangeListener( @NotNull PropertyChangeListener listener ) {
    listeners.remove( listener );
  }

  public void removePropertyChangeListener( @NotNull @NonNls String propertyName, @NotNull PropertyChangeListener listener ) {
    getChild( propertyName ).removePropertyChangeListener( listener );
  }

  public void addPropertyChangeListener( @NotNull PropertyChangeListener listener ) {
    listeners.add( listener );
  }

  public void addPropertyChangeListener( @NotNull @NonNls String propertyName, @NotNull PropertyChangeListener listener ) {
    getChild( propertyName ).addPropertyChangeListener( listener );
  }

  public void firePropertyChange( @NotNull PropertyChangeEvent evt ) {
    for ( PropertyChangeListener listener : listeners ) {
      listener.propertyChange( evt );
    }

    NonTransientPropertyChangeSupport child = children.get( evt.getPropertyName() );
    if ( child != null ) {
      child.firePropertyChange( evt );
    }
  }

  @NotNull
  private NonTransientPropertyChangeSupport getChild( @NotNull @NonNls String propertyName ) {
    NonTransientPropertyChangeSupport child = children.get( propertyName );
    if ( child == null ) {
      child = new NonTransientPropertyChangeSupport( sourceBean );
      children.put( propertyName, child );
    }
    return child;
  }

  @NotNull
  private final Map children = new HashMap();

  @NotNull
  public List getPropertyChangeListeners() {
    return Collections.unmodifiableList( listeners );
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy