IddFileType IddFileAndFactoryWrapper::iddFileType() const {
  if (m_iddFileType) { return *m_iddFileType; }
  OS_ASSERT(m_iddFile);
  return IddFileType(IddFileType::UserCustom);
}
boost::optional<model::Model> ReverseTranslator::loadModel(const openstudio::path& path, ProgressBar* progressBar)
{
  m_model = Model();
  m_model.setFastNaming(true);

  m_workspace = Workspace(StrictnessLevel(StrictnessLevel::None),
                          IddFileType(IddFileType::EnergyPlus));

  m_workspaceToModelMap.clear();

  m_untranslatedIdfObjects.clear();

  m_logSink.resetStringStream();

  m_logSink.setThreadId(QThread::currentThread());

  m_logSink.setChannelRegex(boost::regex("openstudio\\.IdfFile"));

  //load idf and convert to a workspace
  boost::optional<openstudio::IdfFile> idfFile = IdfFile::load(path, IddFileType::EnergyPlus, progressBar);

  m_logSink.setChannelRegex(boost::regex("openstudio\\.energyplus\\.ReverseTranslator"));

  // energyplus idfs may not be draft level strictness, eventually need a fixer
  if (!idfFile){

    LOG(Error, "Could not read idf file at path ='" << toString(path) << "'");

  }else{

    if (!idfFile->isValid(StrictnessLevel::Draft)){

      LOG(Error, "Idf file at path ='" << toString(path) << "' is not valid to draft strictness");
      LOG(Error, idfFile->validityReport(StrictnessLevel::Draft));
      return boost::none;

    }

    if (progressBar){
      progressBar->setWindowTitle(toString("Creating EnergyPlus Workspace"));
    }

    Workspace workspace(StrictnessLevel::None,
                        IddFileType(IddFileType::EnergyPlus));

    if (progressBar){
      workspace.connectProgressBar(progressBar);
    }

    workspace.addObjects(idfFile->objects());

    if (progressBar){
      workspace.disconnectProgressBar(progressBar);
    }

    return this->translateWorkspace(workspace, progressBar);

  }

  return boost::none;
}