
net.sf.javagimmicks.collections.event.AbstractEventMap Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of GimmickUtils Show documentation
Show all versions of GimmickUtils Show documentation
Utility classes, APIs and tools for Java
The newest version!
package net.sf.javagimmicks.collections.event;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import net.sf.javagimmicks.collections.decorators.AbstractEntryDecorator;
import net.sf.javagimmicks.collections.decorators.AbstractIteratorDecorator;
import net.sf.javagimmicks.collections.decorators.AbstractUnmodifiableMapDecorator;
public abstract class AbstractEventMap extends AbstractUnmodifiableMapDecorator
{
private static final long serialVersionUID = -2690296055006665266L;
public AbstractEventMap(Map decorated)
{
super(decorated);
}
@Override
public Set> entrySet()
{
return new EventMapEntrySet(getDecorated().entrySet());
}
@Override
public V put(K key, V value)
{
boolean isUpdate = containsKey(key);
V oldValue = getDecorated().put(key, value);
if(isUpdate)
{
fireEntryUpdated(key, oldValue, value);
}
else
{
fireEntryAdded(key, value);
}
return oldValue;
}
abstract protected void fireEntryAdded(K key, V value);
abstract protected void fireEntryUpdated(K key, V oldValue, V newValue);
abstract protected void fireEntryRemoved(K key, V value);
protected class EventMapEntrySet extends AbstractEventSet>
{
private static final long serialVersionUID = 4496963842926801525L;
protected EventMapEntrySet(Set> decorated)
{
super(decorated);
}
@Override
public Iterator> iterator()
{
return new AbstractIteratorDecorator>(super.iterator())
{
@Override
public Entry next()
{
return new AbstractEntryDecorator(super.next())
{
private static final long serialVersionUID = -6377534237333144069L;
@Override
public V setValue(V value)
{
final V oldValue = super.setValue(value);
fireEntryUpdated(getKey(), oldValue, value);
return oldValue;
}
};
}
};
}
@Override
public boolean add(Entry e)
{
throw new UnsupportedOperationException("Cannot directly add entries to the EntrySet of an AbstractEventMap!");
}
@Override
protected void fireElementAdded(Entry element)
{
}
@Override
protected void fireElementReadded(Entry element)
{
}
@Override
protected void fireElementRemoved(Entry element)
{
fireEntryRemoved(element.getKey(), element.getValue());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy