blob: 9726261bb2e66067c9564aa61e27f50392996880 [file] [log] [blame]
/*
* Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.util.container.delegate;
import org.eclipse.net4j.util.container.ContainerEvent;
import org.eclipse.net4j.util.container.IContainerDelta;
import org.eclipse.net4j.util.event.IListener;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/**
* A default implementation of a {@link IContainerList container list}.
*
* @author Eike Stepper
* @apiviz.exclude
*/
public class ContainerList<E> extends ContainerCollection<E>implements IContainerList<E>
{
public ContainerList(List<E> delegate)
{
super(delegate);
}
@Override
public List<E> getDelegate()
{
return (List<E>)super.getDelegate();
}
/**
* @category WRITE
*/
public void add(int index, E element)
{
getDelegate().add(index, element);
fireAddedEvent(element);
}
/**
* @category WRITE
*/
public boolean addAll(int index, Collection<? extends E> c)
{
ContainerEvent<E> event = createEvent(getDelegate(), IContainerDelta.Kind.ADDED);
getDelegate().addAll(index, c);
return dispatchEvent(event);
}
/**
* @category READ
*/
public E get(int index)
{
return getDelegate().get(index);
}
/**
* @category READ
*/
public int indexOf(Object o)
{
return getDelegate().indexOf(o);
}
/**
* @category READ
*/
public int lastIndexOf(Object o)
{
return getDelegate().lastIndexOf(o);
}
/**
* @category READ
*/
public ListIterator<E> listIterator()
{
return new DelegatingListIterator(getDelegate().listIterator());
}
/**
* @category READ
*/
public ListIterator<E> listIterator(int index)
{
return new DelegatingListIterator(getDelegate().listIterator(index));
}
/**
* @category WRITE
*/
public E remove(int index)
{
E removed = getDelegate().remove(index);
if (removed != null)
{
fireRemovedEvent(removed);
}
return removed;
}
/**
* @category WRITE
*/
public E set(int index, E element)
{
E removed = getDelegate().set(index, element);
ContainerEvent<E> event = new ContainerEvent<E>(ContainerList.this);
event.addDelta(removed, IContainerDelta.Kind.REMOVED);
event.addDelta(element, IContainerDelta.Kind.ADDED);
IListener[] listeners = getListeners();
if (listeners != null)
{
fireEvent(event, listeners);
}
return removed;
}
/**
* @category READ
*/
public List<E> subList(int fromIndex, int toIndex)
{
return getDelegate().subList(fromIndex, toIndex);
}
/**
* A delegating {@link ListIterator list iterator}.
*
* @author Eike Stepper
* @apiviz.exclude
*/
public class DelegatingListIterator extends DelegatingIterator implements ListIterator<E>
{
public DelegatingListIterator(ListIterator<E> delegate)
{
super(delegate);
}
@Override
public ListIterator<E> getDelegate()
{
return (ListIterator<E>)super.getDelegate();
}
/**
* @category WRITE
*/
public void add(E o)
{
getDelegate().add(o);
fireAddedEvent(o);
last = o;
}
/**
* @category WRITE
*/
public void set(E o)
{
getDelegate().set(o);
ContainerEvent<E> event = new ContainerEvent<E>(ContainerList.this);
event.addDelta(last, IContainerDelta.Kind.REMOVED);
event.addDelta(o, IContainerDelta.Kind.ADDED);
IListener[] listeners = getListeners();
if (listeners != null)
{
fireEvent(event, listeners);
}
last = o;
}
/**
* @category READ
*/
public boolean hasPrevious()
{
return getDelegate().hasPrevious();
}
/**
* @category READ
*/
public int nextIndex()
{
return getDelegate().nextIndex();
}
/**
* @category READ
*/
public E previous()
{
return getDelegate().previous();
}
/**
* @category READ
*/
public int previousIndex()
{
return getDelegate().previousIndex();
}
}
}