/*................................................................................................*/
  public boolean startJob(String arguments, Object condition, boolean hiredByName) {
    addMenuItem("Directory for Sample Trees From Directory...", makeCommand("setDirPath", this));
    fillerTasks = new Vector();
    if (!MesquiteThread
        .isScripting()) { // enclosed in conditional to avoid hiring query when opening file; should
      // be handled by snapshot/doCommand when file is opened.
      String directoryPath =
          MesquiteFile.chooseDirectory(
              "Choose directory containing tree files:",
              previousDirectory); // MesquiteFile.saveFileAsDialog("Base name for files (files will
      // be named <name>1.nex, <name>2.nex, etc.)", baseName);

      if (StringUtil.blank(directoryPath)) { // TODO: clean this up?
        return false;
      } else {
        directory = new File(directoryPath);
        previousDirectory = directory.getParent();
        if (directory.exists() && directory.isDirectory()) {
          return hireFillers(directoryPath);
        }
      }
    }
    return true; // Add something to make sure directory paths are set up correctly, when not
    // scripting...
  }
  /*.................................................................................................................*/
  public boolean queryOptions() {
    if (!MesquiteThread.isScripting()) {

      duplicateExcludedCharacters =
          !AlertDialog.query(
              containerOfModule(),
              "Remove excluded characters?",
              "Remove excluded characters?",
              "Yes",
              "No");
    }
    return true;
  }
 /*.................................................................................................................*/
 public boolean startJob(String arguments, Object condition, boolean hiredByName) {
   if (!MesquiteThread.isScripting()) {
     int s =
         MesquiteInteger.queryInteger(
             containerOfModule(),
             "Number of taxa to exclude",
             "Enter the number of randomly chosen taxa to exclude",
             numExcluded);
     if (MesquiteInteger.isCombinable(s)) numExcluded = s;
     else return false;
   }
   addMenuItem("Number of Taxa Excluded...", makeCommand("setNumberExcluded", this));
   return true;
 }
 /**
  * Called to provoke any necessary initialization. This helps prevent the module's intialization
  * queries to the user from happening at inopportune times (e.g., while a long chart calculation
  * is in mid-progress)
  */
 public void initialize(Taxa taxa) {
   setPreferredTaxa(taxa);
   fillerTask.initialize(taxa);
   if (!fillerTask.hasLimitedTrees(taxa)) {
     if (!MesquiteThread.isScripting() && !nTreesSet) {
       int n =
           MesquiteInteger.queryInteger(
               containerOfModule(),
               "Trees per block?",
               "How many trees to include per tree block?",
               numTrees);
       if (MesquiteInteger.isCombinable(n) && n > 0) numTrees = n;
       nTreesSet = true;
     }
   }
   ntreesItem.setEnabled(!fillerTask.hasLimitedTrees(taxa));
   MesquiteTrunk.resetMenuItemEnabling();
 }
 /**
  * Called to provoke any necessary initialization. This helps prevent the module's intialization
  * queries to the user from happening at inopportune times (e.g., while a long chart calculation
  * is in mid-progress)
  */
 public void initialize(Taxa taxa) {
   setPreferredTaxa(taxa);
   fillerTask.initialize(taxa);
   if (!fillerTask.hasLimitedTrees(taxa)) {
     if (!MesquiteThread.isScripting() && !nTreesSet) {
       int n =
           MesquiteInteger.queryInteger(
               containerOfModule(),
               "Trees per block?",
               "How many trees to include per tree block?",
               numTrees);
       if (MesquiteInteger.isCombinable(n) && n > 0) numTrees = n;
       nTreesSet = true;
     }
   }
   if (enableNumTreesChoice() && ntreesItem == null)
     ntreesItem = addMenuItem("Number of Trees...", makeCommand("setNumberTrees", this));
   if (ntreesItem != null && fillerTask != null)
     ntreesItem.setEnabled(!fillerTask.hasLimitedTrees(taxa));
   MesquiteTrunk.resetMenuItemEnabling();
 }
  /*.................................................................................................................*/
  public boolean startJob(String arguments, Object condition, boolean hiredByName) {
    if (arguments == null) {
      if (MesquiteThread.isScripting())
        fillerTask = (TreeBlockFiller) hireNamedEmployee(TreeBlockFiller.class, "#StoredTrees");
      if (fillerTask == null)
        fillerTask =
            (TreeBlockFiller)
                hireEmployee(TreeBlockFiller.class, "Source of trees for tree blocks");
    } else {
      fillerTask = (TreeBlockFiller) hireNamedEmployee(TreeBlockFiller.class, arguments);
      if (fillerTask == null)
        fillerTask =
            (TreeBlockFiller)
                hireEmployee(TreeBlockFiller.class, "Source of trees for tree blocks");
    }

    if (fillerTask == null)
      return sorry(getName() + " couldn't start because no source of trees obtained.");
    ntreesItem = addMenuItem("Number of Trees...", makeCommand("setNumberTrees", this));
    return true;
  }