package railo.runtime.search.lucene2;
import java.util.Map;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.br.BrazilianAnalyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.cz.CzechAnalyzer;
import org.apache.lucene.analysis.de.GermanAnalyzer;
import org.apache.lucene.analysis.el.GreekAnalyzer;
import org.apache.lucene.analysis.fr.FrenchAnalyzer;
import org.apache.lucene.analysis.nl.DutchAnalyzer;
import org.apache.lucene.analysis.ru.RussianAnalyzer;
import org.apache.lucene.analysis.snowball.SnowballAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.th.ThaiAnalyzer;
import railo.commons.collection.MapFactory;
import railo.commons.lang.ClassUtil;
import railo.commons.lang.StringUtil;
import railo.runtime.search.SearchException;
import railo.runtime.search.lucene2.analyzer.DanishAnalyzer;
import railo.runtime.search.lucene2.analyzer.ItalianAnalyzer;
import railo.runtime.search.lucene2.analyzer.NorwegianAnalyzer;
import railo.runtime.search.lucene2.analyzer.PortugueseAnalyzer;
import railo.runtime.search.lucene2.analyzer.SpanishAnalyzer;
public final class SearchUtil {
private static Map<String,Analyzer> analyzers=MapFactory.<String,Analyzer>getConcurrentMap();
public static Analyzer getAnalyzer(String language) throws SearchException {
if(language==null)language="english";
else language=language.toLowerCase().trim();
language=railo.runtime.search.SearchUtil.translateLanguage(language);
Analyzer analyzer=analyzers.get(language);
if(analyzer!=null) return analyzer;
if(language.equals("english"))
analyzer= new StandardAnalyzer();
else if(language.equals("german"))
analyzer= new GermanAnalyzer();
else if(language.equals("russian"))
analyzer= new RussianAnalyzer();
else if(language.equals("dutch"))
analyzer= new DutchAnalyzer();
else if(language.equals("french"))
analyzer= new FrenchAnalyzer();
else if(language.equals("norwegian"))
analyzer= new NorwegianAnalyzer();
else if(language.equals("portuguese"))
analyzer= new PortugueseAnalyzer();
else if(language.equals("spanish"))
analyzer= new SpanishAnalyzer();
else if(language.equals("brazilian"))
analyzer= new BrazilianAnalyzer();
else if(language.equals("chinese"))
analyzer= new ChineseAnalyzer();
else if(language.startsWith("czech"))
analyzer= new CzechAnalyzer();
else if(language.equals("greek"))
analyzer= new GreekAnalyzer();
else if(language.equals("thai"))
analyzer= new ThaiAnalyzer();
else if(language.equals("japanese"))
analyzer= new CJKAnalyzer();
else if(language.equals("korean"))
analyzer= new CJKAnalyzer();
else if(language.equals("italian"))
analyzer= new ItalianAnalyzer();
else if(language.equals("danish"))
analyzer= new DanishAnalyzer();
else if(language.equals("norwegian"))
analyzer= new NorwegianAnalyzer();
else if(language.equals("finnish"))
analyzer= new SnowballAnalyzer( "Finnish" );
else if(language.equals("swedish"))
analyzer= new SnowballAnalyzer( "Swedish" );
else {
String clazzName="org.apache.lucene.analysis.el."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer;";
Object o=ClassUtil.loadInstance(clazzName,(Object)null);
if(o==null){
clazzName="railo.runtime.search.lucene2.analyzer."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer";
o=ClassUtil.loadInstance(clazzName,(Object)null);//Class.orName(clazzName).newInstance();
}
if(o instanceof Analyzer) analyzer=(Analyzer) o;
else if(o==null)
throw new SearchException("can't create Language Analyzer for Lanuage "+language+", make Analyzer ["+clazzName+"] available");
else
throw new SearchException( "can't create Language Analyzer for Lanuage "+language+", Analyzer ["+clazzName+"] is of invalid type");
}
analyzers.put(language, analyzer);
return analyzer;
}
}