package search;

import chemaxon.jchem.db.JChemSearch;
import chemaxon.sss.SearchConstants;
import chemaxon.sss.search.JChemSearchOptions;

/**
 * Example codes for running a search in a separate thread
 * 
 * @author Peter Kovacs
 * @author Tamas Csizmazia
 * @version 5.0.3, 04/26/2008
 * 
 */
public class SeparateSearchThread {

    public static void main(String[] args) {
	try {
	    SearchExampleBase.tableSetup();

	    JChemSearchOptions jcSearchOptions = new JChemSearchOptions();
	    jcSearchOptions.setSearchType(SearchConstants.SUBSTRUCTURE);

	    JChemSearch jChemSearch = InitializingSearch.createJChemSearch(
		    Connection.getConnectionHandler(1), "Brc1ccccc1",
		    Util.structureTableName, jcSearchOptions);

	    jChemSearch.setRunMode(JChemSearch.RUN_MODE_ASYNCH_COMPLETE);
	    jChemSearch.run();

	    while (jChemSearch.isRunning()) {
		String msg = jChemSearch.getProgressMessage();
		int count = jChemSearch.getResultCount();
		int lastId = jChemSearch.getCurrentId();
		System.out.println("Progress message: " + msg
			+ ", result count: " + count + ", last cd_id: "
			+ lastId);
		Thread.sleep(100);
	    }
	    System.out.println(jChemSearch.getResultCount() 
		    + " hit(s) found");
	} catch (Throwable throwable) {
	    throwable.printStackTrace();
	    System.exit(1);
	}
    }

}