AWSSessionRecord::AWSSessionRecord(const AWSSession& awsSession, ProjectDatabase& database)
    : CloudSessionRecord(std::shared_ptr<detail::AWSSessionRecord_Impl>(
                             new detail::AWSSessionRecord_Impl(awsSession, database)),
                         database)
{
    OS_ASSERT(getImpl<detail::AWSSessionRecord_Impl>());
    constructRelatedRecords(awsSession,database);
}
DDACEAlgorithmRecord::DDACEAlgorithmRecord(const analysis::DDACEAlgorithm& ddaceAlgorithm,
                                           AnalysisRecord& analysisRecord)
  : DakotaAlgorithmRecord(std::shared_ptr<detail::DDACEAlgorithmRecord_Impl>(
        new detail::DDACEAlgorithmRecord_Impl(ddaceAlgorithm, analysisRecord)),
        analysisRecord.projectDatabase(),
        ddaceAlgorithm)
{
  OS_ASSERT(getImpl<detail::DDACEAlgorithmRecord_Impl>());

  constructRelatedRecords(ddaceAlgorithm);
}
InputVariableRecord::InputVariableRecord(std::shared_ptr<detail::InputVariableRecord_Impl> impl,
                                         ProjectDatabase database,
                                         const boost::optional<analysis::InputVariable>& inputVariable)
  : VariableRecord(impl, database)
{
  OS_ASSERT(getImpl<detail::InputVariableRecord_Impl>());
  if (inputVariable) {
    constructRelatedRecords(*inputVariable);
  }
  LOG(Trace,"Constructed InputVariableRecord '" << name() << "' with variableVectorIndex = " << variableVectorIndex());
}
ParameterStudyAlgorithmRecord::ParameterStudyAlgorithmRecord(
    const analysis::ParameterStudyAlgorithm& parameterStudyAlgorithm,
    AnalysisRecord& analysisRecord)
  : DakotaAlgorithmRecord(std::shared_ptr<detail::ParameterStudyAlgorithmRecord_Impl>(
        new detail::ParameterStudyAlgorithmRecord_Impl(parameterStudyAlgorithm, analysisRecord)),
        analysisRecord.projectDatabase(),
        parameterStudyAlgorithm)
{
  OS_ASSERT(getImpl<detail::ParameterStudyAlgorithmRecord_Impl>());

  constructRelatedRecords(parameterStudyAlgorithm);
}
PSUADEDaceAlgorithmRecord::PSUADEDaceAlgorithmRecord(
    const analysis::PSUADEDaceAlgorithm& psuadedaceAlgorithm,
    AnalysisRecord& analysisRecord)
  : DakotaAlgorithmRecord(boost::shared_ptr<detail::PSUADEDaceAlgorithmRecord_Impl>(
        new detail::PSUADEDaceAlgorithmRecord_Impl(psuadedaceAlgorithm, analysisRecord)),
        analysisRecord.projectDatabase(),
        psuadedaceAlgorithm)
{
  BOOST_ASSERT(getImpl<detail::PSUADEDaceAlgorithmRecord_Impl>());

  constructRelatedRecords(psuadedaceAlgorithm);
}
RubyContinuousVariableRecord::RubyContinuousVariableRecord(
    const analysis::RubyContinuousVariable& rubyContinuousVariable,
    ProblemRecord& problemRecord,
    int variableVectorIndex)
  : ContinuousVariableRecord(boost::shared_ptr<detail::RubyContinuousVariableRecord_Impl>(
        new detail::RubyContinuousVariableRecord_Impl(rubyContinuousVariable,
                                                      problemRecord,
                                                      variableVectorIndex)),
        problemRecord.projectDatabase(),
        rubyContinuousVariable)
{
  OS_ASSERT(getImpl<detail::RubyContinuousVariableRecord_Impl>());

  constructRelatedRecords(rubyContinuousVariable);
}
RubyContinuousVariableRecord::RubyContinuousVariableRecord(
    const analysis::RubyContinuousVariable& rubyContinuousVariable,
    FunctionRecord& functionRecord,
    int variableVectorIndex,
    boost::optional<double> functionCoefficient)
  : ContinuousVariableRecord(boost::shared_ptr<detail::RubyContinuousVariableRecord_Impl>(
        new detail::RubyContinuousVariableRecord_Impl(rubyContinuousVariable,
                                                      functionRecord,
                                                      variableVectorIndex,
                                                      functionCoefficient)),
        functionRecord.projectDatabase(),
        rubyContinuousVariable)
{
  OS_ASSERT(getImpl<detail::RubyContinuousVariableRecord_Impl>());

  constructRelatedRecords(rubyContinuousVariable);
}