package com.cellasoft.univrapp.utils; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class ActiveList<T> extends ArrayList<T> implements Serializable { private static final long serialVersionUID = 870605912858223939L; transient private List<ActiveListListener<T>> listeners; @Override public synchronized void clear() { super.clear(); fireChangedEvent(); } @Override public synchronized int size() { return super.size(); } @Override public synchronized T get(int index) { return super.get(index); } @Override public synchronized boolean add(T item) { boolean success = super.add(item); if (success) { fireAddEvent(item); } return success; } @Override public synchronized void add(int index, T item) { super.add(index, item); fireInsertEvent(index, item); } @Override public synchronized boolean addAll(int index, Collection<? extends T> items) { boolean success = super.addAll(index, items); if (success) { fireAddAllEvent(items); } return success; } @Override public synchronized boolean addAll(Collection<? extends T> items) { boolean success = super.addAll(items); if (success) { fireAddAllEvent(items); } return success; } public synchronized void addListener(ActiveListListener<T> listener) { if (this.listeners == null) { listeners = Lists.newArrayList(); } this.listeners.add(listener); } public synchronized void removeListener(ActiveListListener<T> listener) { if (this.listeners != null) { this.listeners.remove(listener); } } private void fireChangedEvent() { if (this.listeners == null) return; for (ActiveListListener<T> listener : listeners) { listener.onClear(); } } private void fireInsertEvent(int location, T item) { if (this.listeners == null) return; for (ActiveListListener<T> listener : listeners) { listener.onInsert(location, item); } } private void fireAddEvent(T item) { if (this.listeners == null) return; for (ActiveListListener<T> listener : listeners) { listener.onAdd(item); } } private void fireAddAllEvent(Collection<? extends T> items) { if (this.listeners == null) return; for (ActiveListListener<T> listener : listeners) { listener.onAddAll(items); } } public interface ActiveListListener<T> { void onAdd(T item); void onInsert(int location, T item); void onAddAll(Collection<? extends T> items); void onClear(); } }