001    package railo.runtime.search.lucene2;
002    
003    import java.util.Map;
004    
005    import org.apache.lucene.analysis.Analyzer;
006    import org.apache.lucene.analysis.br.BrazilianAnalyzer;
007    import org.apache.lucene.analysis.cjk.CJKAnalyzer;
008    import org.apache.lucene.analysis.cn.ChineseAnalyzer;
009    import org.apache.lucene.analysis.cz.CzechAnalyzer;
010    import org.apache.lucene.analysis.de.GermanAnalyzer;
011    import org.apache.lucene.analysis.el.GreekAnalyzer;
012    import org.apache.lucene.analysis.fr.FrenchAnalyzer;
013    import org.apache.lucene.analysis.nl.DutchAnalyzer;
014    import org.apache.lucene.analysis.ru.RussianAnalyzer;
015    import org.apache.lucene.analysis.snowball.SnowballAnalyzer;
016    import org.apache.lucene.analysis.standard.StandardAnalyzer;
017    import org.apache.lucene.analysis.th.ThaiAnalyzer;
018    
019    import railo.commons.collections.HashTable;
020    import railo.commons.lang.ClassUtil;
021    import railo.commons.lang.StringUtil;
022    import railo.runtime.search.SearchException;
023    import railo.runtime.search.lucene2.analyzer.DanishAnalyzer;
024    import railo.runtime.search.lucene2.analyzer.ItalianAnalyzer;
025    import railo.runtime.search.lucene2.analyzer.NorwegianAnalyzer;
026    import railo.runtime.search.lucene2.analyzer.PortugueseAnalyzer;
027    import railo.runtime.search.lucene2.analyzer.SpanishAnalyzer;
028    public final class SearchUtil {
029    
030            private static Map analyzers=new HashTable();
031            
032            public static Analyzer getAnalyzer(String language) throws SearchException {
033            if(language==null)language="english";
034            else language=language.toLowerCase().trim();
035            language=railo.runtime.search.SearchUtil.translateLanguage(language);
036                    
037            Analyzer analyzer=(Analyzer) analyzers.get(language);
038            if(analyzer!=null) return analyzer;
039            
040            
041            if(language.equals("english"))
042                    analyzer= new StandardAnalyzer();
043            else if(language.equals("german"))              
044                    analyzer= new GermanAnalyzer();
045            else if(language.equals("russian"))     
046                    analyzer= new RussianAnalyzer();
047            else if(language.equals("dutch"))               
048                    analyzer= new DutchAnalyzer();
049            else if(language.equals("french"))              
050                    analyzer= new FrenchAnalyzer();
051            else if(language.equals("norwegian"))   
052                    analyzer= new NorwegianAnalyzer();
053            else if(language.equals("portuguese"))  
054                    analyzer= new PortugueseAnalyzer();
055            else if(language.equals("spanish"))     
056                    analyzer= new SpanishAnalyzer();
057            else if(language.equals("brazilian"))   
058                    analyzer= new BrazilianAnalyzer();
059            else if(language.equals("chinese"))     
060                    analyzer= new ChineseAnalyzer();
061            else if(language.startsWith("czech"))   
062                    analyzer= new CzechAnalyzer();
063            else if(language.equals("greek"))               
064                    analyzer= new GreekAnalyzer();
065            else if(language.equals("thai"))
066                    analyzer= new ThaiAnalyzer();
067            else if(language.equals("japanese"))
068                    analyzer= new CJKAnalyzer();
069            else if(language.equals("korean"))
070                    analyzer= new CJKAnalyzer();
071    
072            else if(language.equals("italian"))
073                    analyzer= new ItalianAnalyzer();
074            else if(language.equals("danish"))
075                    analyzer= new DanishAnalyzer();
076            else if(language.equals("norwegian"))
077                    analyzer= new NorwegianAnalyzer();
078            else if(language.equals("finnish"))
079                    analyzer= new SnowballAnalyzer( "Finnish" );
080            else if(language.equals("swedish"))
081                    analyzer= new SnowballAnalyzer( "Swedish" );
082            
083            
084            else {
085                    String clazzName="org.apache.lucene.analysis.el."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer;";
086                    Object o=ClassUtil.loadInstance(clazzName,(Object)null);
087                if(o==null){
088                    clazzName="railo.runtime.search.lucene2.analyzer."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer";
089                    o=ClassUtil.loadInstance(clazzName,(Object)null);//Class.orName(clazzName).newInstance();
090                    }
091                if(o instanceof Analyzer) analyzer=(Analyzer) o;
092                else if(o==null) 
093                     throw new SearchException("can't create Language Analyzer for Lanuage "+language+", make Analyzer ["+clazzName+"] available");
094                else 
095                    throw new SearchException( "can't create Language Analyzer for Lanuage "+language+", Analyzer ["+clazzName+"] is of invalid type");
096            }        
097            analyzers.put(language, analyzer);
098            return analyzer;
099        }
100    }