001package org.jsoup.helper;
002
003import java.util.ArrayList;
004import java.util.Collection;
005
006/**
007 * Implementation of ArrayList that watches out for changes to the contents.
008 */
009public abstract class ChangeNotifyingArrayList<E> extends ArrayList<E> {
010    public ChangeNotifyingArrayList(int initialCapacity) {
011        super(initialCapacity);
012    }
013
014    public abstract void onContentsChanged();
015
016    @Override
017    public E set(int index, E element) {
018        onContentsChanged();
019        return super.set(index, element);
020    }
021
022    @Override
023    public boolean add(E e) {
024        onContentsChanged();
025        return super.add(e);
026    }
027
028    @Override
029    public void add(int index, E element) {
030        onContentsChanged();
031        super.add(index, element);
032    }
033
034    @Override
035    public E remove(int index) {
036        onContentsChanged();
037        return super.remove(index);
038    }
039
040    @Override
041    public boolean remove(Object o) {
042        onContentsChanged();
043        return super.remove(o);
044    }
045
046    @Override
047    public void clear() {
048        onContentsChanged();
049        super.clear();
050    }
051
052    @Override
053    public boolean addAll(Collection<? extends E> c) {
054        onContentsChanged();
055        return super.addAll(c);
056    }
057
058    @Override
059    public boolean addAll(int index, Collection<? extends E> c) {
060        onContentsChanged();
061        return super.addAll(index, c);
062    }
063
064    @Override
065    protected void removeRange(int fromIndex, int toIndex) {
066        onContentsChanged();
067        super.removeRange(fromIndex, toIndex);
068    }
069
070    @Override
071    public boolean removeAll(Collection<?> c) {
072        onContentsChanged();
073        return super.removeAll(c);
074    }
075
076    @Override
077    public boolean retainAll(Collection<?> c) {
078        onContentsChanged();
079        return super.retainAll(c);
080    }
081
082}