/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2000-2006 Keith Godfrey and Maxym Mykhalchuk 2006 Henry Pijffers 2009 Didier Briel 2010 Martin Fleurke, Antonio Vilei, Didier Briel 2013 Alex Buloichik Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OmegaT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **************************************************************************/ package org.omegat.core.threads; import java.util.regex.PatternSyntaxException; import org.omegat.core.Core; import org.omegat.core.search.Searcher; import org.omegat.gui.search.SearchWindowController; import org.omegat.util.Log; /** * Each search window has its own search thread to actually do the searching. * This prevents lockup of the UI during intensive searches * * @author Keith Godfrey * @author Maxym Mykhalchuk * @author Henry Pijffers * @author Didier Briel * @author Martin Fleurke * @author Antonio Vilei */ public class SearchThread extends LongProcessThread { /** * Starts a new search. To search current project only, set rootDir to null. * * @param window * search window for display results * @param expression * search expression * @internal The main loop (in the run method) waits for the variable * m_searching to be set to true. This variable is set to true in * this function on successful setting of the search parameters. */ public SearchThread(SearchWindowController window, Searcher searcher) { m_window = window; m_searcher = searcher; m_searcher.setThread(this); } // ///////////////////////////////////////////////////////// // thread main loop @Override public void run() { try { try { m_searcher.search(); checkInterrupted(); m_window.displaySearchResult(m_searcher); } catch(LongProcessInterruptedException ex) { // interrupted - nothing to do } catch (PatternSyntaxException e) { // bad regexp input // alert user to badness m_window.displayErrorRB(e, "ST_REGEXP_ERROR"); } catch (Exception e) { // something bad happened // alert user to badness Log.logErrorRB(e, "ST_FILE_SEARCH_ERROR"); Core.getMainWindow().displayErrorRB(e, "ST_FILE_SEARCH_ERROR"); } } catch (RuntimeException re) { Log.logErrorRB(re, "ST_FATAL_ERROR"); Core.getMainWindow().displayErrorRB(re, "ST_FATAL_ERROR"); } } private SearchWindowController m_window; private Searcher m_searcher; }