if(fromFile) {
SocietyComponent sc = getSocietyComponent(); if (sc instanceof SocietyFileComponent || sc instanceof SocietyUIComponent) {
  public void saveToDb(DBConflictHandler ch) {    if (!modified) {      if (log.isDebugEnabled())         log.debug("Save to database not needed; experiment not modified");      return;    }    try {      updateNameServerHostName(); // Be sure this is up-to-date      List components = getComponents();      boolean componentWasRemoved = generateCompleteSociety();      PopulateDb pdb = null;      if(fromFile) {	// Created with a SocietyFileComponent	// Have no CMT assembly, nor previous	// experiment or trial ID.	// So save it all in the CSMI assembly        pdb =          new PopulateDb("CSHNA", "CSMI", getExperimentName(),                         null, null, ch);      } else {	// We'll clear out the old non-CMT assemblies,	// save everything in CMT / CSMI        pdb =          new PopulateDb("CMT", "CSHNA", "CSMI", getExperimentName(),                         getExperimentID(), trialID, ch);      }      setExperimentID(pdb.getExperimentId());      setTrialID(pdb.getTrialId()); // sets trial id and -D argument      // Some components will want access to the complete set of Nodes      // in the society, etc. To get that, they must get back to the      // root soc object, and do a getOwner and go from there. Ugly.      // So far we've just created the pdb (which      // sets up the Experimet & Trial IDs, and puts the CMT assembly      // in the right place if necc, and clears out the other       // assemblies (CSMI, CSHNA)//       // Now ask each component in turn to add its stuff//       boolean componentWasRemoved = false;//       for (int i = 0, n = components.size(); i < n; i++) {//         BaseComponent soc = (BaseComponent) components.get(i);//         if(log.isDebugEnabled()) {//           log.debug(soc + ".addComponentData");//         }//         soc.addComponentData(completeSociety);// 	// Components can notice here if they had to remove// 	// a component (or, I suppose, modify)//         componentWasRemoved |= soc.componentWasRemoved();// 	// Note that no current component returns true here//       }      // If any component removed something, we need      // to recreate the CMT assembly (under the original ID)      // So this, currently destroys the orig CMT      // Note also it does not effect Agent asset data      // or relationships or OPLAN stuff      if (componentWasRemoved) pdb.repopulateCMT(completeSociety);      if(log.isErrorEnabled() && completeSociety == null) {        log.error("Society Data is null!");      }      pdb.populateHNA(completeSociety);      // then give everyone a chance to modify what they've collectively produced      for (int i = 0, n = components.size(); i < n; i++) {        BaseComponent soc = (BaseComponent) components.get(i);        soc.modifyComponentData(completeSociety, pdb);        if (soc.componentWasRemoved()) {          pdb.repopulateCMT(completeSociety);        }        pdb.populateCSMI(completeSociety);      }      pdb.setModRecipes(recipes);      pdb.close();    } catch (Exception sqle) {      if (log.isErrorEnabled())	log.error("Error saving experiment to database: ", sqle);      return;    }    modified = false;  }