if (hnaAssemblyId == null) { if (log.isErrorEnabled()) { log.error("popHNA: null HNA assembly ID? Can't save", new Throwable()); } return false; }
  public boolean populateHNA(ComponentData data)    throws SQLException  {    if (log.isDebugEnabled()) {      log.debug("populateHNA saving into " + hnaAssemblyId);    }    boolean added = false;    try {      // Incrementally save      // so that later recipes have the benefit      // of the earlier modifications      added = populate(data, 1f, hnaAssemblyId);    } catch (IllegalArgumentException iae) {      if (! componentWasRemoved) 	throw iae;      if (log.isInfoEnabled()) {	log.info("Caught iae " + iae.toString() + " while saving HNA. Must redo as a CSA");      }      // Clean out the current hnaAssemblyId      removeRuntimeAssembly(hnaAssemblyId);      removeConfigAssembly(hnaAssemblyId);      if (! isAssemblyUsed(hnaAssemblyId))	cleanAssembly(hnaAssemblyId);      hnaAssemblyId = null;      setAssemblyMatch();      added = populateCSA(data);    }    return added;    // Maybe wrap this in a try/catch to note unexpected modifications,    // and when I get one, remove any old HNA and try again?    //    return populate(data, 1f, hnaAssemblyId);  }