private Analyzer appendSirenFilters(final Analyzer analyzer,
final Map<String, Datatype> datatypes,
final Version luceneDefaultVersion) {
if (!(analyzer instanceof TokenizerChain)) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
"Invalid index analyzer '" + analyzer.getClass() + "' received");
}
final TokenizerChain chain = (TokenizerChain) analyzer;
final TokenFilterFactory[] old = chain.getTokenFilterFactories();
final TokenFilterFactory[] filterFactories = new TokenFilterFactory[old.length + 3];
System.arraycopy(old, 0, filterFactories, 0, old.length);
final DatatypeAnalyzerFilterFactory datatypeFactory = new DatatypeAnalyzerFilterFactory(luceneDefaultVersion);
datatypeFactory.register(datatypes);
filterFactories[old.length] = datatypeFactory;
filterFactories[old.length + 1] = new PositionAttributeFilterFactory();
filterFactories[old.length + 2] = new SirenPayloadFilterFactory();
return new TokenizerChain(chain.getCharFilterFactories(),
chain.getTokenizerFactory(), filterFactories);
}