/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ package org.evosuite.utils; import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class ListenableList<E> extends SimpleListenable<Void> implements List<E>, Serializable { private static final long serialVersionUID = 1L; private static class ObservableListIterator<E> extends SimpleListenable<Void> implements ListIterator<E> { private static final long serialVersionUID = 1L; private final ListIterator<E> delegate; public ObservableListIterator(ListIterator<E> delegate) { super(); this.delegate = delegate; } @Override public void add(E e) { delegate.add(e); fireEvent(null); } @Override public boolean hasNext() { return delegate.hasNext(); } @Override public boolean hasPrevious() { return delegate.hasPrevious(); } @Override public E next() { return delegate.next(); } @Override public int nextIndex() { return delegate.nextIndex(); } @Override public E previous() { return delegate.previous(); } @Override public int previousIndex() { return delegate.previousIndex(); } @Override public void remove() { delegate.remove(); fireEvent(null); } @Override public void set(E e) { delegate.set(e); fireEvent(null); } } private final Listener<Void> listener = new Listener<Void>() { private static final long serialVersionUID = 1L; @Override public void receiveEvent(Void event) { fireEvent(null); } }; private final List<E> delegate; /** * <p>Constructor for ListenableList.</p> * * @param delegate a {@link java.util.List} object. */ public ListenableList(List<E> delegate) { super(); this.delegate = delegate; } /** {@inheritDoc} */ @Override public boolean add(E e) { boolean result = delegate.add(e); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public void add(int index, E element) { delegate.add(index, element); fireEvent(null); } /** {@inheritDoc} */ @Override public boolean addAll(Collection<? extends E> c) { boolean result = delegate.addAll(c); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public boolean addAll(int index, Collection<? extends E> c) { boolean result = delegate.addAll(index, c); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public void clear() { delegate.clear(); fireEvent(null); } /** {@inheritDoc} */ @Override public boolean contains(Object o) { return delegate.contains(o); } /** {@inheritDoc} */ @Override public boolean containsAll(Collection<?> c) { return delegate.containsAll(c); } /** {@inheritDoc} */ @Override public boolean equals(Object o) { return delegate.equals(o); } /** {@inheritDoc} */ @Override public E get(int index) { return delegate.get(index); } /** {@inheritDoc} */ @Override public int hashCode() { return delegate.hashCode(); } /** {@inheritDoc} */ @Override public int indexOf(Object o) { return delegate.indexOf(o); } /** {@inheritDoc} */ @Override public boolean isEmpty() { return delegate.isEmpty(); } /** {@inheritDoc} */ @Override public Iterator<E> iterator() { return listIterator(); } /** {@inheritDoc} */ @Override public int lastIndexOf(Object o) { return delegate.lastIndexOf(o); } /** {@inheritDoc} */ @Override public ListIterator<E> listIterator() { ObservableListIterator<E> result = new ObservableListIterator<E>( delegate.listIterator()); result.addListener(listener); return result; } /** {@inheritDoc} */ @Override public ListIterator<E> listIterator(int index) { ObservableListIterator<E> result = new ObservableListIterator<E>( delegate.listIterator(index)); result.addListener(listener); return result; } /** {@inheritDoc} */ @Override public E remove(int index) { E result = delegate.remove(index); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public boolean remove(Object o) { boolean result = delegate.remove(o); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public boolean removeAll(Collection<?> c) { boolean result = delegate.removeAll(c); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public boolean retainAll(Collection<?> c) { boolean result = delegate.retainAll(c); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public E set(int index, E element) { E result = delegate.set(index, element); fireEvent(null); return result; } /** {@inheritDoc} */ @Override public int size() { return delegate.size(); } /** {@inheritDoc} */ @Override public List<E> subList(int fromIndex, int toIndex) { ListenableList<E> result = new ListenableList<E>(delegate.subList(fromIndex, toIndex)); result.addListener(listener); return result; } /** {@inheritDoc} */ @Override public Object[] toArray() { return delegate.toArray(); } /** {@inheritDoc} */ @Override public <T> T[] toArray(T[] a) { return delegate.toArray(a); } }