package com.logicaldoc.core.searchengine.analyzer;

import java.util.HashMap;
import java.util.Locale;

import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.snowball.SnowballFilter;
import org.apache.lucene.analysis.util.TokenFilterFactory;
import org.tartarus.snowball.SnowballProgram;

import com.logicaldoc.core.i18n.Language;
import com.logicaldoc.core.i18n.LanguageManager;
import com.logicaldoc.util.LocaleUtil;

/**
 * Retrieves a token stream elaborated by Snowaball Filter
 * 
 * @author Marco Meschieri - LogicalDOC
 * @since 7.5.3
 */
public class SnowballFilterFactory extends TokenFilterFactory {

	private Language language;

	public SnowballFilterFactory(HashMap<String, String> config) {
		super(config);

		String lang = config.get("lang");
		LanguageManager man = LanguageManager.getInstance();
		language = man.getLanguage(LocaleUtil.toLocale(lang));
		if (language == null)
			language = new Language(Locale.ENGLISH);
	}

	@Override
	public TokenStream create(TokenStream ts) {
		// Try to add a snowball filter
		SnowballProgram stemmer = language.getStemmer();

		if (stemmer != null)
			return new SnowballFilter(ts, stemmer);
		else
			return ts;
	}

}