package org.objectstyle.wolips.eomodeler.utils;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.objectstyle.wolips.eomodeler.utils.SelectionThrottle.IThrottledSelectionHandler;
public abstract class AbstractAddRemoveChangeRefresher<T> implements PropertyChangeListener, IThrottledSelectionHandler {
private SelectionThrottle _selectionThrottle;
public AbstractAddRemoveChangeRefresher(String name) {
_selectionThrottle = new SelectionThrottle(name, this);
}
public void start() {
_selectionThrottle.start();
}
public void stop() {
_selectionThrottle.stop();
}
@SuppressWarnings("unchecked")
public void propertyChange(PropertyChangeEvent _event) {
Collection<T> oldValues = (Collection<T>) _event.getOldValue();
Collection<T> newValues = (Collection<T>) _event.getNewValue();
if (newValues != null && oldValues != null) {
if (newValues.size() > oldValues.size()) {
List<T> newList = new LinkedList<T>(newValues);
newList.removeAll(oldValues);
objectsAdded(newList);
_selectionThrottle.objectsAdded(newList);
} else if (newValues.size() < oldValues.size()) {
List<T> oldList = new LinkedList<T>(oldValues);
oldList.removeAll(newValues);
objectsRemoved(oldList);
_selectionThrottle.objectsRemoved(oldList);
}
}
}
protected abstract void objectsAdded(List<T> _addedObjects);
protected abstract void objectsRemoved(List<T> _removedObjects);
}