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

net.sf.javagimmicks.collections.event.ObservableEventNavigableSet Maven / Gradle / Ivy

package net.sf.javagimmicks.collections.event;

import java.util.ArrayList;
import java.util.List;
import java.util.NavigableSet;
import java.util.SortedSet;

import net.sf.javagimmicks.collections.event.NavigableSetEvent.Type;

public class ObservableEventNavigableSet extends AbstractEventNavigableSet
{
   private static final long serialVersionUID = -6812183248508925850L;

   protected transient List> _listeners;

   public ObservableEventNavigableSet(NavigableSet decorated)
   {
      super(decorated);
   }

   public void addEventNavigableSetListener(EventNavigableSetListener listener)
   {
      if(_listeners == null)
      {
         _listeners = new ArrayList>();
      }
      
      _listeners.add(listener);
   }
   
   public void removeEventNavigableSetListener(EventNavigableSetListener listener)
   {
      if(_listeners != null)
      {
         _listeners.remove(listener);
      }
   }
   
   @Override
   public ObservableEventNavigableSet descendingSet()
   {
      return new ObservableEventSubNavigableSet(this, getDecorated().descendingSet());
   }

   @Override
   public ObservableEventNavigableSet headSet(E toElement, boolean inclusive)
   {
      return new ObservableEventSubNavigableSet(this, getDecorated().headSet(toElement, inclusive));
   }

   @Override
   public ObservableEventNavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
   {
      return new ObservableEventSubNavigableSet(this, getDecorated().subSet(fromElement, fromInclusive, toElement, toInclusive));
   }

   @Override
   public ObservableEventNavigableSet tailSet(E fromElement, boolean inclusive)
   {
      return new ObservableEventSubNavigableSet(this, getDecorated().tailSet(fromElement, inclusive));
   }

   @Override
   public ObservableEventSortedSet headSet(E toElement)
   {
      return new ObservableEventSubSortedSet(this, getDecorated().headSet(toElement));
   }

   @Override
   public ObservableEventSortedSet subSet(E fromElement, E toElement)
   {
      return new ObservableEventSubSortedSet(this, getDecorated().subSet(fromElement, toElement));
   }

   @Override
   public ObservableEventSortedSet tailSet(E fromElement)
   {
      return new ObservableEventSubSortedSet(this, getDecorated().tailSet(fromElement));
   }

   @Override
   protected void fireElementAdded(E element)
   {
      fireEvent(new NavigableSetEvent(this, Type.ADDED, element));
   }
   
   @Override
   protected void fireElementReadded(E element)
   {
      fireEvent(new NavigableSetEvent(this, Type.READDED, element));
   }
   
   @Override
   protected void fireElementRemoved(E element)
   {
      fireEvent(new NavigableSetEvent(this, Type.REMOVED, element));
   }
   
   private void fireEvent(NavigableSetEvent event)
   {
      if(_listeners == null)
      {
         return;
      }
      
      for(EventNavigableSetListener listener : _listeners)
      {
         listener.eventOccured(event);
      }
   }

   protected static class ObservableEventSubNavigableSet extends ObservableEventNavigableSet
   {
      private static final long serialVersionUID = -4787480179100005627L;

      protected final ObservableEventNavigableSet _parent;

      protected ObservableEventSubNavigableSet(ObservableEventNavigableSet parent, NavigableSet decorated)
      {
         super(decorated);
         
         _parent = parent;
      }

      @Override
      protected void fireElementAdded(E element)
      {
         super.fireElementAdded(element);
         _parent.fireElementAdded(element);
      }

      @Override
      protected void fireElementReadded(E element)
      {
         super.fireElementReadded(element);
         _parent.fireElementReadded(element);
      }

      @Override
      protected void fireElementRemoved(E element)
      {
         super.fireElementRemoved(element);
         _parent.fireElementRemoved(element);
      }
   }

   protected static class ObservableEventSubSortedSet extends ObservableEventSortedSet
   {
      private static final long serialVersionUID = -4787480179100005627L;

      protected final ObservableEventNavigableSet _parent;

      protected ObservableEventSubSortedSet(ObservableEventNavigableSet parent, SortedSet decorated)
      {
         super(decorated);
         
         _parent = parent;
      }

      @Override
      protected void fireElementAdded(E element)
      {
         super.fireElementAdded(element);
         _parent.fireElementAdded(element);
      }

      @Override
      protected void fireElementReadded(E element)
      {
         super.fireElementReadded(element);
         _parent.fireElementReadded(element);
      }

      @Override
      protected void fireElementRemoved(E element)
      {
         super.fireElementRemoved(element);
         _parent.fireElementRemoved(element);
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy