void InputVariableRecord::constructRelatedRecords(const analysis::InputVariable& inputVariable) {
  AttributeVector attributes, dbAttributes;
  InputVariableRecord copyOfThis(getImpl<detail::InputVariableRecord_Impl>());

  if (analysis::OptionalUncertaintyDescription dbUDesc = uncertaintyDescription()) {
    dbAttributes = dbUDesc->cast<analysis::GenericUncertaintyDescription>().attributes();
  }
  if (analysis::OptionalUncertaintyDescription udesc = inputVariable.uncertaintyDescription()) {
    attributes = udesc->cast<analysis::GenericUncertaintyDescription>().attributes();
  }

  for (const Attribute& attribute : attributes) {
    // find in dbOptions
    auto dbIt = std::find_if(dbAttributes.begin(),dbAttributes.end(),
                             std::bind(uuidsEqual<Attribute,Attribute>,std::placeholders::_1,attribute));
    // if not there, or if different versionUUID, save it
    if ((dbIt == dbAttributes.end()) || (attribute.versionUUID() != dbIt->versionUUID())) {
      AttributeRecord udescAttributeRecord(attribute,copyOfThis);
    }

    // if there, erase from dbOptions
    if (dbIt != dbAttributes.end()) {
      dbAttributes.erase(dbIt);
    }
  }

  // any attributes left in dbAttributes should be removed from the database
  ProjectDatabase database = projectDatabase();
  for (const Attribute& toRemove : dbAttributes) {
    AttributeRecord dbUDescAttributeRecord = database.getObjectRecordByHandle<AttributeRecord>(toRemove.uuid()).get();
    database.removeRecord(dbUDescAttributeRecord);
  }
}
Esempio n. 2
0
  QVariant InputVariable_Impl::toVariant() const {
    QVariantMap inputVariableData = AnalysisObject_Impl::toVariant().toMap();

    if (OptionalUncertaintyDescription udesc = uncertaintyDescription()) {
      inputVariableData["uncertainty_description"] = analysis::detail::toVariant(udesc.get());
    }

    return QVariant(inputVariableData);
  }
 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);
 }
 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);
 }