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 }