MeasureGroup MeasureGroup_Impl::fromVariant(const QVariant& variant, const VersionString& version) { QVariantMap map = variant.toMap(); MeasureVector measures = deserializeOrderedVector( map["measures"].toList(), "measure_group_index", std::function<Measure (const QVariant&)>(std::bind(Measure_Impl::factoryFromVariant,std::placeholders::_1,version))); return MeasureGroup(toUUID(map["uuid"].toString().toStdString()), toUUID(map["version_uuid"].toString().toStdString()), map.contains("name") ? map["name"].toString().toStdString() : std::string(), map.contains("display_name") ? map["display_name"].toString().toStdString() : std::string(), map.contains("description") ? map["description"].toString().toStdString() : std::string(), map.contains("uncertainty_description") ? analysis::detail::toUncertaintyDescription(map["uncertainty_description"],version) : OptionalUncertaintyDescription(), measures); }
OSArgument toOSArgument(const QVariant& variant, const VersionString& version) { QVariantMap map = variant.toMap(); OSArgumentType type(map["type"].toString().toStdString()); QVariant value, defaultValue; OS_ASSERT(value.isNull() && defaultValue.isNull()); if (map.contains("value")) { if (type == OSArgumentType::Quantity) { value = toQuantityQVariant(map,"value","value_units"); } else { value = map["value"]; } } if (map.contains("default_value")) { if (type == OSArgumentType::Quantity) { defaultValue = toQuantityQVariant(map,"default_value","default_value_units"); } else { defaultValue = map["default_value"]; } } std::vector<QVariant> domain; if (map.contains("domain")) { if (type == OSArgumentType::Quantity) { domain = deserializeOrderedVector( map["domain"].toList(), "domain_value_index", std::function<QVariant (QVariant*)>(std::bind( toQuantityQVariant, std::bind(&QVariant::toMap,std::placeholders::_1), "value", "units"))); } else { domain = deserializeOrderedVector( map["domain"].toList(), "value", "domain_value_index", std::function<QVariant (const QVariant&)>(std::bind(boost::value_factory<QVariant>(),std::placeholders::_1))); } } StringVector choices, choiceDisplayNames; if (map.contains("choices")) { QVariantList choicesList = map["choices"].toList(); choices = deserializeOrderedVector( choicesList, "value", "choice_index", std::function<std::string (QVariant*)>(std::bind(&QString::toStdString, std::bind(&QVariant::toString,std::placeholders::_1)))); if (!choicesList.empty() && choicesList[0].toMap().contains("display_name")) { try { choiceDisplayNames = deserializeOrderedVector( choicesList, "display_name", "choice_index", std::function<std::string (QVariant*)>(std::bind(&QString::toStdString, std::bind(&QVariant::toString,std::placeholders::_1)))); } catch (...) { LOG_FREE(Warn,"openstudio.ruleset.OSArgument","Unable to deserialize partial list of choice display names."); } } } return OSArgument(toUUID(map["uuid"].toString().toStdString()), toUUID(map["version_uuid"].toString().toStdString()), map["name"].toString().toStdString(), map.contains("display_name") ? map["display_name"].toString().toStdString() : std::string(), map.contains("description") ? map["description"].toString().toStdString() : boost::optional<std::string>(), type, map.contains("units") ? map["units"].toString().toStdString() : boost::optional<std::string>(), map["required"].toBool(), map["modelDependent"].toBool(), value, defaultValue, OSDomainType(map["domain_type"].toString().toStdString()), domain, choices, choiceDisplayNames, map.contains("is_read") ? map["is_read"].toBool() : false, map.contains("extension") ? map["extension"].toString().toStdString() : std::string()); }