| 903 | } |
| 904 | |
| 905 | MeasureManagerServer::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); |
nothing calls this directly
no test coverage detected