| 725 | } |
| 726 | |
| 727 | bool WorkflowJSON_Impl::setMeasureSteps(const MeasureType& measureType, const std::vector<MeasureStep>& steps) { |
| 728 | |
| 729 | // verify steps |
| 730 | for (const auto& step : steps) { |
| 731 | boost::optional<BCLMeasure> bclMeasure = getBCLMeasure(step); |
| 732 | if (!bclMeasure) { |
| 733 | return false; |
| 734 | } |
| 735 | if (bclMeasure->measureType() != measureType) { |
| 736 | return false; |
| 737 | } |
| 738 | } |
| 739 | |
| 740 | // DLM: this implementation may evolve |
| 741 | std::vector<WorkflowStep> newSteps; |
| 742 | |
| 743 | if (measureType == MeasureType::ModelMeasure) { |
| 744 | newSteps.insert(newSteps.end(), steps.begin(), steps.end()); |
| 745 | } else { |
| 746 | std::vector<MeasureStep> oldSteps = getMeasureSteps(MeasureType::ModelMeasure); |
| 747 | newSteps.insert(newSteps.end(), oldSteps.begin(), oldSteps.end()); |
| 748 | } |
| 749 | |
| 750 | if (measureType == MeasureType::EnergyPlusMeasure) { |
| 751 | newSteps.insert(newSteps.end(), steps.begin(), steps.end()); |
| 752 | } else { |
| 753 | std::vector<MeasureStep> oldSteps = getMeasureSteps(MeasureType::EnergyPlusMeasure); |
| 754 | newSteps.insert(newSteps.end(), oldSteps.begin(), oldSteps.end()); |
| 755 | } |
| 756 | |
| 757 | if (measureType == MeasureType::ReportingMeasure) { |
| 758 | newSteps.insert(newSteps.end(), steps.begin(), steps.end()); |
| 759 | } else { |
| 760 | std::vector<MeasureStep> oldSteps = getMeasureSteps(MeasureType::ReportingMeasure); |
| 761 | newSteps.insert(newSteps.end(), oldSteps.begin(), oldSteps.end()); |
| 762 | } |
| 763 | |
| 764 | return setWorkflowSteps(newSteps); // onUpdate in setWorkflowSteps |
| 765 | } |
| 766 | |
| 767 | boost::optional<BCLMeasure> WorkflowJSON_Impl::getBCLMeasure(const MeasureStep& step) const { |
| 768 | boost::optional<openstudio::path> path = findMeasure(step.measureDirName()); |