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}