MCPcopy Create free account
hub / github.com/NatLabRockies/OpenStudio / duplicate_measure

Method duplicate_measure

src/cli/MeasureManager.cpp:905–1005  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

903}
904
905MeasureManagerServer::ResponseType MeasureManagerServer::duplicate_measure(const web::json::value& body) {
906 // Required parameters:
907 openstudio::path oldMeasureDir;
908 if (auto oldMeasureDir_ = get_field<openstudio::path>(body, "old_measure_dir")) {
909 oldMeasureDir = std::move(*oldMeasureDir_);
910 } else {
911 return {web::http::status_codes::BadRequest, toWebJSON("The 'old_measure_dir' (string) must be in the post data")};
912 }
913
914 openstudio::path newMeasureDir;
915 if (auto newMeasureDir_ = get_field<openstudio::path>(body, "measure_dir")) {
916 newMeasureDir = std::move(*newMeasureDir_);
917 } else {
918 return {web::http::status_codes::BadRequest, toWebJSON("The 'measure_dir' (string) must be in the post data")};
919 }
920
921 const bool force_reload = get_field<bool>(body, "force_reload", false);
922
923 boost::optional<BCLMeasure> oldMeasure_ = m_measureManager.getMeasure(oldMeasureDir, force_reload);
924 if (!oldMeasure_) {
925 auto msg = fmt::format("Cannot load measure at '{}'.", oldMeasureDir.generic_string());
926 fmt::print("{}\n", msg);
927 return {web::http::status_codes::BadRequest, toWebJSON(msg)};
928 }
929
930 auto& oldMeasure = *oldMeasure_;
931
932 auto newMeasure_ = oldMeasure.clone(newMeasureDir);
933 if (!newMeasure_) {
934 auto msg = fmt::format("Cannot copy measure from '{}' to {}'", oldMeasureDir.generic_string(), newMeasureDir.generic_string());
935 fmt::print("{}\n", msg);
936 return {web::http::status_codes::BadRequest, toWebJSON(msg)};
937 }
938 auto& newMeasure = *newMeasure_;
939 // Force updating the UID
940 newMeasure.changeUID();
941 newMeasure.incrementVersionId();
942
943 if (auto val_ = get_field<std::string>(body, "display_name")) {
944 newMeasure.setDisplayName(*val_);
945 }
946 if (auto val_ = get_field<std::string>(body, "class_name")) {
947 newMeasure.setName(openstudio::toUnderscoreCase(*val_));
948 newMeasure.setClassName(*val_);
949 }
950 if (auto val_ = get_field<std::string>(body, "taxonomy_tag")) {
951 newMeasure.setTaxonomyTag(*val_);
952 }
953
954 // Changing the measure Language is not supported!
955 auto newMeasureLanguage = oldMeasure.measureLanguage();
956 // if (body.has_field("measure_language") && body.at("measure_language").is_string()) {
957 // auto measureLanguageString = body.at("measure_type").as_string();
958 // try {
959 // newMeasureLanguage = MeasureLanguage(measureLanguageString);
960 // newMeasure.setMeasureLanguage(measureLanguage);
961 // } catch (...) {
962 // fmt::print("Couldn't convert '{}' to a MeasureLanguage", measureLanguageString);

Callers

nothing calls this directly

Calls 15

toWebJSONFunction · 0.85
toUnderscoreCaseFunction · 0.85
setTaxonomyTagMethod · 0.80
measureLanguageMethod · 0.80
updateMeasureScriptMethod · 0.80
updateMeasureTestsMethod · 0.80
valueNameMethod · 0.80
checkForUpdatesFilesMethod · 0.80
MeasureTypeClass · 0.50
toStringFunction · 0.50
getMeasureMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected