analysis::DDACEAlgorithm DDACEAlgorithmRecord_Impl::ddaceAlgorithm() const {
    analysis::DDACEAlgorithmOptions opts(m_algorithmType, options());
    OptionalFileReference restartFile, outFile;
    OptionalFileReferenceRecord ofr = restartFileReferenceRecord();
    if (ofr) {
      restartFile = ofr->fileReference();
    }
    ofr = outFileReferenceRecord();
    if (ofr) {
      outFile = ofr->fileReference();
    }

    boost::optional<runmanager::Job> job;
    if (this->jobUUID()){
      try {
        job = this->projectDatabase().runManager().getJob(this->jobUUID().get());
      }
      catch (const std::exception& e) {
        LOG(Error, "Job " << toString(this->jobUUID().get()) << " not found in RunManager. "
            << e.what());
      }
    }

    return analysis::DDACEAlgorithm(handle(),
                                    uuidLast(),
                                    displayName(),
                                    description(),
                                    complete(),
                                    failed(),
                                    iter(),
                                    opts,
                                    restartFile,
                                    outFile,
                                    job);
  }
AWSSession AWSSessionRecord_Impl::awsSession() const {
    OptionalUrl serverUrl;
    std::string serverId;
    if (OptionalUrlRecord sur = serverUrlRecord()) {
        serverUrl = sur->url();
        serverId = sur->name();
    }
    UrlVector workerUrls;
    StringVector workerIds;
    for (const UrlRecord& wur : workerUrlRecords()) {
        workerUrls.push_back(wur.url());
        workerIds.push_back(wur.name());
    }
    return AWSSession(handle(),
                      uuidLast(),
                      sessionId(),
                      serverUrl,
                      serverId,
                      m_numServerProcessors,
                      workerUrls,
                      workerIds,
                      m_numWorkerProcessors,
                      m_privateKey,
                      m_timestamp,
                      m_region,
                      m_serverInstanceType,
                      m_workerInstanceType);
}
 analysis::OutputAttributeVariable
 OutputAttributeVariableRecord_Impl::outputAttributeVariable() const
 {
   return analysis::OutputAttributeVariable(handle(),
                                            uuidLast(),
                                            name(),
                                            displayName(),
                                            description(),
                                            m_attributeName);
 }
 AWSSettings AWSSettingsRecord_Impl::awsSettings() const {
   return AWSSettings(handle(),
                      uuidLast(),
                      m_userAgreementSigned,
                      m_numWorkers,
                      m_terminationDelayEnabled,
                      m_terminationDelay,
                      m_region,
                      m_serverInstanceType,
                      m_workerInstanceType);
 }
  analysis::DesignOfExperiments DesignOfExperimentsRecord_Impl::designOfExperiments() const {
    analysis::DesignOfExperimentsOptions opts(m_designOfExperimentsType,
                                              options());

    return analysis::DesignOfExperiments(handle(),
                                         uuidLast(),
                                         displayName(),
                                         description(),
                                         complete(),
                                         failed(),
                                         iter(),
                                         opts);
  }
 analysis::MeasureGroup MeasureGroupRecord_Impl::measureGroup() const {
   analysis::MeasureVector measures;
   for (const MeasureRecord& measureRecord : measureRecords(false)) {
     measures.push_back(measureRecord.measure());
   }
   return analysis::MeasureGroup(handle(),
                                 uuidLast(),
                                 name(),
                                 displayName(),
                                 description(),
                                 uncertaintyDescription(),
                                 measures);
 }
 VagrantSession VagrantSessionRecord_Impl::vagrantSession() const {
   OptionalUrl serverUrl;
   if (OptionalUrlRecord sur = serverUrlRecord()) {
     serverUrl = sur->url();
   }
   UrlVector workerUrls;
   for (const UrlRecord& wur : workerUrlRecords()) {
     workerUrls.push_back(wur.url());
   }
   return VagrantSession(handle(),
                         uuidLast(),
                         sessionId(),
                         serverUrl,
                         workerUrls);
 }
 analysis::RubyContinuousVariable RubyContinuousVariableRecord_Impl::rubyContinuousVariable() const {
   ruleset::OSArgument argument = osArgumentRecord().osArgument();
   analysis::RubyMeasure measure = rubyMeasureRecord().rubyMeasure();
   return analysis::RubyContinuousVariable(handle(),
                                           uuidLast(),
                                           name(),
                                           displayName(),
                                           description(),
                                           uncertaintyDescription(),
                                           minimum(),
                                           maximum(),
                                           increment(),
                                           nSteps(),
                                           argument,
                                           measure);
 }
 ruleset::OSArgument OSArgumentRecord_Impl::osArgument() const {
   StringVector domain;
   if (m_domain) {
     domain = stringToStringVector(*m_domain);
   }
   return ruleset::OSArgument(handle(),
                              uuidLast(),
                              name(),
                              displayName(),
                              m_argumentType,
                              m_required,
                              m_argumentValue,
                              m_defaultArgumentValue,
                              m_domainType,
                              domain,
                              stringToStringVector(m_choices),
                              stringToStringVector(m_choiceDisplayNames),
                              m_isRead,
                              m_extension);
 }
 ruleset::ModelObjectFilterRelationship ModelObjectFilterRelationshipRecord_Impl::modelObjectFilterRelationship() const 
 {
   return ruleset::ModelObjectFilterRelationship(m_relationshipName,handle(),uuidLast());
 }