package org.archive.util.iterator;
import java.util.Collection;
import java.util.TreeSet;
public class TransformingPrefixStringFilter implements StringFilter {
TreeSet<String> filters;
StringTransformer transformer;
public TransformingPrefixStringFilter(Collection<String> blocks) {
this(blocks,null);
}
public TransformingPrefixStringFilter(Collection<String> blocks,
StringTransformer transformer) {
filters = makeTreeSet(blocks,transformer);
this.transformer = transformer;
}
public static TreeSet<String> makeTreeSet(Collection<String> blocks,
StringTransformer trans) {
TreeSet<String> tmp = new TreeSet<String>();
for(String filter : blocks) {
if(trans != null) {
filter = trans.transform(filter);
}
String possiblePrefix = tmp.floor(filter);
if (possiblePrefix != null && filter.startsWith(possiblePrefix)) {
// don't add - a prefix is already in the set:
} else {
// is this a prefix of the existing item?
String possibleLonger = tmp.ceiling(filter);
if(possibleLonger == null) {
} else if(possibleLonger.startsWith(filter)) {
tmp.remove(possibleLonger);
}
tmp.add(filter);
}
}
return tmp;
}
public boolean isFiltered(String text) {
if(transformer != null) {
text = transformer.transform(text);
}
String possiblePrefix = filters.floor(text);
return (possiblePrefix != null && text.startsWith(possiblePrefix));
}
}