![JAR search and dependency download from the Maven repository](/logo.png)
net.sf.javagimmicks.collections.event.ObservableEventList Maven / Gradle / Ivy
package net.sf.javagimmicks.collections.event;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import net.sf.javagimmicks.collections.event.ListEvent.Type;
public class ObservableEventList extends AbstractEventList
{
private static final long serialVersionUID = -6317396247733734848L;
protected transient List> _listeners;
public ObservableEventList(List decorated)
{
super(decorated);
}
public void addEventListListener(EventListListener listener)
{
if(_listeners == null)
{
_listeners = new ArrayList>();
}
_listeners.add(listener);
}
public void removeEventListListener(EventListListener listener)
{
if(_listeners != null)
{
_listeners.remove(listener);
}
}
@Override
public ObservableEventList subList(int fromIndex, int toIndex)
{
return new ObservableEventSubList(this, fromIndex, toIndex);
}
@Override
protected void fireElementsAdded(int index, Collection extends E> elements)
{
ListEvent event = new ListEvent(
this,
Type.ADDED,
index,
index + elements.size(),
Collections.unmodifiableList(new ArrayList(elements)));
fireEvent(event);
}
@Override
protected void fireElementUpdated(int index, E element, E newElement)
{
ListEvent event = new ListEvent(
this,
Type.UPDATED,
index,
index,
Collections.singletonList(element),
Collections.singletonList(newElement));
fireEvent(event);
}
@Override
protected void fireElementRemoved(int index, E element)
{
ListEvent event = new ListEvent(
this,
Type.REMOVED,
index,
index,
Collections.singletonList(element));
fireEvent(event);
}
private void fireEvent(ListEvent event)
{
if(_listeners == null)
{
return;
}
for(EventListListener listener : _listeners)
{
listener.eventOccured(event);
}
}
protected static class ObservableEventSubList extends ObservableEventList
{
private static final long serialVersionUID = 1996968483016862598L;
protected final ObservableEventList _parent;
protected final int _offset;
protected ObservableEventSubList(ObservableEventList parent, int fromIndex, int toIndex)
{
super(parent._decorated.subList(fromIndex, toIndex));
_parent = parent;
_offset = fromIndex;
}
@Override
protected void fireElementsAdded(int index, Collection extends E> elements)
{
super.fireElementsAdded(index, elements);
_parent.fireElementsAdded(index + _offset, elements);
}
@Override
protected void fireElementRemoved(int index, E element)
{
super.fireElementRemoved(index, element);
_parent.fireElementRemoved(index + _offset, element);
}
@Override
protected void fireElementUpdated(int index, E element, E newElement)
{
super.fireElementUpdated(index, element, newElement);
_parent.fireElementUpdated(index + _offset, element, newElement);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy