package org.xbib.elasticsearch.index.analysis.year;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
*/
public class GregorianYearTokenFilter extends TokenFilter {
private static final Pattern pattern = Pattern.compile("(\\d{4})");
protected final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
private final String defaultYear;
protected GregorianYearTokenFilter(TokenStream input, String defaultYear) {
super(input);
this.defaultYear = defaultYear;
}
@Override
public final boolean incrementToken() throws IOException {
if (!input.incrementToken()) {
return false;
} else {
String s = termAtt.toString();
Matcher m = pattern.matcher(s);
termAtt.setEmpty();
if (!m.matches()) {
termAtt.append(defaultYear);
} else {
while (m.find()) {
termAtt.append(m.group());
}
}
return true;
}
}
@Override
public boolean equals(Object object) {
return object instanceof GregorianYearTokenFilter &&
defaultYear.equals(((GregorianYearTokenFilter)object).defaultYear);
}
@Override
public int hashCode() {
return defaultYear.hashCode();
}
}