/********************************************************
 * 
 *******************************************************/

public class RunKiPar
{

public static void main(String[] args) throws Exception
{
  String NA = "Warning: This option is not applicable when not in the search mode!";

  long startTime, endTime, runTime;

  try
  {
    System.out.println("-------------------- C O N F I G U R A T I O N --------------------\n");
    Configuration config = new Configuration();
    config.print();
    System.out.println("-------------------------------------------------------------------\n");

    boolean search = (config.options_search()).equals("yes");

    int menu_start = menuOption(config.options_menu_start());
    int menu_end   = menuOption(config.options_menu_end());

    System.out.println("\n-------------------------------------------------------------------");
    System.out.println("\n>>> START: KiPar <<<\n");
    KiPar kipar = new KiPar();

    if (menu_start <= 1 && 1 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  1: (a) GET GO TERMS <<<\n");
      startTime = System.currentTimeMillis();
      GO go = new GO(); go.getTerms();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  1(a) - Run time: " + runTime + " milliseconds");

      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  1: (b) GET SBO TERMS <<<\n");
      startTime = System.currentTimeMillis();
      SBO sbo = new SBO(); sbo.getTerms();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  1(b) - Run time: " + runTime + " milliseconds");

      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  1: (c) GET REACTIONS (KEGG, ChEBI...) <<<\n");
      startTime = System.currentTimeMillis();
      EnzymeKEGG kegg = new EnzymeKEGG(); kegg.getTerms();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  1(c) - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 2 && 2 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  2: INITIALIZE DATABASE <<<\n");
      startTime = System.currentTimeMillis();
      kipar.seed();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  2 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 3 && 3 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  3: EXPAND WITH SYNONYMS <<<\n");
      startTime = System.currentTimeMillis();
      kipar.expand();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  3 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 4 && 4 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  4: QUERY LITERATURE <<<\n");
      startTime = System.currentTimeMillis();
      if (search) kipar.queryLiterature();
      else        System.out.println(NA);
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  4 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 5 && 5 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  5: INDEX LITERATURE <<<\n");
      startTime = System.currentTimeMillis();
      if (search) kipar.indexLiterature();
      else        System.out.println(NA);
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  5 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 6 && 6 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  6: SCORE DOCUMENTS <<<\n");
      startTime = System.currentTimeMillis();
      if (search) kipar.score();
      else        System.out.println(NA);
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  6 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 7 && 7 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  7: RETRIEVE DOCUMENT DETAILS <<<\n");
      startTime = System.currentTimeMillis();
      kipar.retrieve();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  7 - Run time: " + runTime + " milliseconds");
    }

    if (menu_start <= 8 && 8 <= menu_end)
    {
      System.out.println("\n-------------------------------------------------------------------");
      System.out.println("\n>>> STEP  8: EXPORT RESULTS TO HTML <<<\n");
      startTime = System.currentTimeMillis();
      kipar.export();
      endTime = System.currentTimeMillis();
      runTime = endTime - startTime;
      System.out.println("\n>>> STEP  8 - Run time: " + runTime + " milliseconds");
    }

    System.out.println("\n-------------------------------------------------------------------");
    System.out.println("\n>>> END: KiPar <<<\n");
    kipar.close();
  }
  catch (java.lang.Exception ex) {ex.printStackTrace();}
}

// -------------------------------------------------------------------
private static int menuOption(String option)
{
  return option.charAt(0) - '0';
}
// -------------------------------------------------------------------
}

