001/** 002 * 003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved. 004 * 005 * This library is free software; you can redistribute it and/or 006 * modify it under the terms of the GNU Lesser General Public 007 * License as published by the Free Software Foundation; either 008 * version 2.1 of the License, or (at your option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013 * Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public 016 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 017 * 018 **/ 019package lucee.runtime.search.lucene2; 020 021import java.util.Map; 022 023import lucee.commons.collection.MapFactory; 024import lucee.commons.lang.ClassUtil; 025import lucee.commons.lang.StringUtil; 026import lucee.runtime.search.SearchException; 027import lucee.runtime.search.lucene2.analyzer.DanishAnalyzer; 028import lucee.runtime.search.lucene2.analyzer.ItalianAnalyzer; 029import lucee.runtime.search.lucene2.analyzer.NorwegianAnalyzer; 030import lucee.runtime.search.lucene2.analyzer.PortugueseAnalyzer; 031import lucee.runtime.search.lucene2.analyzer.SpanishAnalyzer; 032 033import org.apache.lucene.analysis.Analyzer; 034import org.apache.lucene.analysis.br.BrazilianAnalyzer; 035import org.apache.lucene.analysis.cjk.CJKAnalyzer; 036import org.apache.lucene.analysis.cn.ChineseAnalyzer; 037import org.apache.lucene.analysis.cz.CzechAnalyzer; 038import org.apache.lucene.analysis.de.GermanAnalyzer; 039import org.apache.lucene.analysis.el.GreekAnalyzer; 040import org.apache.lucene.analysis.fr.FrenchAnalyzer; 041import org.apache.lucene.analysis.nl.DutchAnalyzer; 042import org.apache.lucene.analysis.ru.RussianAnalyzer; 043import org.apache.lucene.analysis.snowball.SnowballAnalyzer; 044import org.apache.lucene.analysis.standard.StandardAnalyzer; 045import org.apache.lucene.analysis.th.ThaiAnalyzer; 046public final class SearchUtil { 047 048 private static Map<String,Analyzer> analyzers=MapFactory.<String,Analyzer>getConcurrentMap(); 049 050 public static Analyzer getAnalyzer(String language) throws SearchException { 051 if(language==null)language="english"; 052 else language=language.toLowerCase().trim(); 053 language=lucee.runtime.search.SearchUtil.translateLanguage(language); 054 055 Analyzer analyzer=analyzers.get(language); 056 if(analyzer!=null) return analyzer; 057 058 059 if(language.equals("english")) 060 analyzer= new StandardAnalyzer(); 061 else if(language.equals("german")) 062 analyzer= new GermanAnalyzer(); 063 else if(language.equals("russian")) 064 analyzer= new RussianAnalyzer(); 065 else if(language.equals("dutch")) 066 analyzer= new DutchAnalyzer(); 067 else if(language.equals("french")) 068 analyzer= new FrenchAnalyzer(); 069 else if(language.equals("norwegian")) 070 analyzer= new NorwegianAnalyzer(); 071 else if(language.equals("portuguese")) 072 analyzer= new PortugueseAnalyzer(); 073 else if(language.equals("spanish")) 074 analyzer= new SpanishAnalyzer(); 075 else if(language.equals("brazilian")) 076 analyzer= new BrazilianAnalyzer(); 077 else if(language.equals("chinese")) 078 analyzer= new ChineseAnalyzer(); 079 else if(language.startsWith("czech")) 080 analyzer= new CzechAnalyzer(); 081 else if(language.equals("greek")) 082 analyzer= new GreekAnalyzer(); 083 else if(language.equals("thai")) 084 analyzer= new ThaiAnalyzer(); 085 else if(language.equals("japanese")) 086 analyzer= new CJKAnalyzer(); 087 else if(language.equals("korean")) 088 analyzer= new CJKAnalyzer(); 089 090 else if(language.equals("italian")) 091 analyzer= new ItalianAnalyzer(); 092 else if(language.equals("danish")) 093 analyzer= new DanishAnalyzer(); 094 else if(language.equals("norwegian")) 095 analyzer= new NorwegianAnalyzer(); 096 else if(language.equals("finnish")) 097 analyzer= new SnowballAnalyzer( "Finnish" ); 098 else if(language.equals("swedish")) 099 analyzer= new SnowballAnalyzer( "Swedish" ); 100 101 102 else { 103 String clazzName="org.apache.lucene.analysis.el."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer;"; 104 Object o=ClassUtil.loadInstance(clazzName,(Object)null); 105 if(o==null){ 106 clazzName="lucee.runtime.search.lucene2.analyzer."+StringUtil.ucFirst(language.trim().toLowerCase())+"Analyzer"; 107 o=ClassUtil.loadInstance(clazzName,(Object)null);//Class.orName(clazzName).newInstance(); 108 } 109 if(o instanceof Analyzer) analyzer=(Analyzer) o; 110 else if(o==null) 111 throw new SearchException("can't create Language Analyzer for Lanuage "+language+", make Analyzer ["+clazzName+"] available"); 112 else 113 throw new SearchException( "can't create Language Analyzer for Lanuage "+language+", Analyzer ["+clazzName+"] is of invalid type"); 114 } 115 analyzers.put(language, analyzer); 116 return analyzer; 117 } 118}