package org.limewire.filter;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Default implementation of {@link FilterSupport}.
*
* This class is threadsafe.
*/
public class DefaultFilterSupport<T> implements FilterSupport<T> {
private final List<Filter<T>> blackListFilters = new CopyOnWriteArrayList<Filter<T>>();
private final List<Filter<T>> whiteListFilters = new CopyOnWriteArrayList<Filter<T>>();
@Override
public void addBlackListFilter(Filter<T> filter) {
blackListFilters.add(filter);
}
@Override
public void addWhiteListFilter(Filter<T> filter) {
whiteListFilters.add(filter);
}
@Override
public void removeBlackListFilter(Filter<T> filter) {
blackListFilters.remove(filter);
}
@Override
public void removeWhiteListFilter(Filter<T> filter) {
whiteListFilters.remove(filter);
}
@Override
public boolean allow(T t) {
for(Filter<T> blackFilter : blackListFilters) {
if(!blackFilter.allow(t)) {
for (Filter<T> whiteFilter : whiteListFilters) {
if (whiteFilter.allow(t)) {
return true;
}
}
return false;
}
}
return true;
}
}