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

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

package net.sf.javagimmicks.collections.event;

import java.util.Iterator;
import java.util.Set;

import net.sf.javagimmicks.collections.decorators.AbstractUnmodifiableSetDecorator;

public abstract class AbstractEventSet extends AbstractUnmodifiableSetDecorator
{
   private static final long serialVersionUID = -7712383972215104949L;

   public AbstractEventSet(Set decorated)
   {
      super(decorated);
   }
   
   @Override
   public boolean add(E e)
   {
      boolean result = getDecorated().add(e);
      
      if(result)
      {
         fireElementAdded(e);
      }
      else
      {
         fireElementReadded(e);
      }
      
      return result;
   }

   @Override
   public Iterator iterator()
   {
      return new EventSetIterator(getDecorated().iterator());
   }

   @SuppressWarnings("unchecked")
   @Override
   public boolean remove(Object o)
   {
      boolean result = getDecorated().remove(o);
      
      if(result)
      {
         fireElementRemoved((E)o);
      }
      
      return result;
   }

   protected class EventSetIterator implements Iterator
   {
      protected final Iterator _decorated;
      protected E _lastElement = null;
      
      public EventSetIterator(Iterator decorated)
      {
         _decorated = decorated;
      }

      public boolean hasNext()
      {
         return _decorated.hasNext();
      }

      public E next()
      {
         _lastElement = _decorated.next();
         
         return _lastElement;
      }

      public void remove()
      {
         _decorated.remove();
         
         fireElementRemoved(_lastElement);
      }
   }

   abstract protected void fireElementAdded(E element);
   abstract protected void fireElementReadded(E element);
   abstract protected void fireElementRemoved(E element);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy