/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.spellchecker; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.security.CodeSource; import java.util.ArrayList; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipFile; import org.dts.spell.SpellChecker; import org.dts.spell.dictionary.openoffice.OpenOfficeSpellDictionary; import org.dts.spell.dictionary.SpellDictionary; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.util.log.Log; public class SpellcheckManager { private static SpellcheckManager instance = null; private SpellChecker checker; private ArrayList<String> languages; private SpellcheckerPreference preferences; public static SpellcheckManager getInstance() { if (instance == null) { instance = new SpellcheckManager(); } return instance; } private SpellcheckManager() { loadSupportedLanguages(); try { preferences = new SpellcheckerPreference(languages); String language = SparkManager.getMainWindow().getLocale() .getLanguage(); if (preferences.getPreferences().getSpellLanguage() != null) { language = preferences.getPreferences().getSpellLanguage(); } checker = new SpellChecker(getDictionary(language)); } catch (Exception e) { e.printStackTrace(); } } public void loadDictionary(String language) { checker.setDictionary(getDictionary(language)); } public SpellDictionary getDictionary(String language) { SpellDictionary dict = null; try { InputStream dictionary = getClass().getClassLoader() .getResourceAsStream("dictionary/" + language + ".zip"); if (dictionary == null) Log.error("Dictionary not found"); File personalDictionary = new File(SparkManager.getUserDirectory(), "personalDictionary.dict"); dict = new OpenOfficeSpellDictionary(dictionary, personalDictionary); } catch (IOException e) { e.printStackTrace(); } return dict; } public SpellcheckerPreference getSpellcheckerPreference() { return preferences; } public ArrayList<String> getSupportedLanguages() { return languages; } public SpellChecker getSpellChecker() { return checker; } private void loadSupportedLanguages() { languages = new ArrayList<String>(); try { String qualifiedClassName = getClass().getName(); Class<?> qc = Class.forName(qualifiedClassName); CodeSource source = qc.getProtectionDomain().getCodeSource(); File jarFile = new File(source.getLocation().getFile()); if (jarFile.exists() && jarFile.isFile()) { ZipFile zipFile = new JarFile(jarFile); for (Enumeration<?> e = zipFile.entries(); e.hasMoreElements();) { JarEntry entry = (JarEntry) e.nextElement(); if (entry.getName().startsWith("dictionary/") && entry.getName().endsWith(".zip")) { String languageFile = entry.getName().substring(11); String lang = languageFile.substring(0, languageFile.lastIndexOf(".zip")); languages.add(lang); } } } } catch (Exception e) { e.printStackTrace(); } } }