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

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

package net.sf.javagimmicks.collections.event;

import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;

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

public class ObservableEventSortedMap extends AbstractEventSortedMap
{
   private static final long serialVersionUID = -4377528012758388630L;

   protected transient List> _listeners;
   
   public ObservableEventSortedMap(SortedMap decorated)
   {
      super(decorated);
   }

   public void addEventSortedMapListener(EventSortedMapListener listener)
   {
      if(_listeners == null)
      {
         _listeners = new ArrayList>();
      }
      
      _listeners.add(listener);
   }
   
   public void removeEventSortedMapListener(EventSortedMapListener listener)
   {
      if(_listeners != null)
      {
         _listeners.remove(listener);
      }
   }
   
   @Override
   public ObservableEventSortedMap headMap(K toKey)
   {
      return new ObservableEventSubSortedMap(this, getDecorated().headMap(toKey));
   }

   @Override
   public ObservableEventSortedMap subMap(K fromKey, K toKey)
   {
      return new ObservableEventSubSortedMap(this, getDecorated().subMap(fromKey, toKey));
   }

   @Override
   public ObservableEventSortedMap tailMap(K fromKey)
   {
      return new ObservableEventSubSortedMap(this, getDecorated().tailMap(fromKey));
   }

   @Override
   protected void fireEntryAdded(K key, V value)
   {
      fireEvent(new SortedMapEvent(this, Type.ADDED, key, value));
   }

   @Override
   protected void fireEntryRemoved(K key, V value)
   {
      fireEvent(new SortedMapEvent(this, Type.REMOVED, key, value));
   }

   @Override
   protected void fireEntryUpdated(K key, V oldValue, V newValue)
   {
      fireEvent(new SortedMapEvent(this, Type.UPDATED, key, oldValue, newValue));
   }

   private void fireEvent(SortedMapEvent event)
   {
      if(_listeners == null)
      {
         return;
      }
      
      for(EventSortedMapListener listener : _listeners)
      {
         listener.eventOccured(event);
      }
   }
   
   protected static class ObservableEventSubSortedMap extends ObservableEventSortedMap
   {
      private static final long serialVersionUID = 8431554623263356463L;

      protected final ObservableEventSortedMap _parent;
      
      protected ObservableEventSubSortedMap(ObservableEventSortedMap parent, SortedMap decorated)
      {
         super(decorated);
         
         _parent = parent;
      }

      @Override
      protected void fireEntryAdded(K key, V value)
      {
         super.fireEntryAdded(key, value);
         _parent.fireEntryAdded(key, value);
      }

      @Override
      protected void fireEntryRemoved(K key, V value)
      {
         super.fireEntryRemoved(key, value);
         _parent.fireEntryRemoved(key, value);
      }

      @Override
      protected void fireEntryUpdated(K key, V oldValue, V newValue)
      {
         super.fireEntryUpdated(key, oldValue, newValue);
         _parent.fireEntryUpdated(key, oldValue, newValue);
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy