1616
1717#include " QualityControl/Aggregator.h"
1818#include " QualityControl/AggregatorSpec.h"
19+ #include " QualityControl/ObjectMetadataKeys.h"
20+ #include " QualityControl/QualityObject.h"
1921#include " QualityControl/RootClassFactory.h"
2022#include " QualityControl/AggregatorInterface.h"
23+ #include " QualityControl/ObjectMetadataKeysHelpers.h"
2124#include " QualityControl/UpdatePolicyType.h"
2225#include " QualityControl/ActivityHelpers.h"
2326#include " QualityControl/Activity.h"
@@ -106,6 +109,21 @@ QualityObjectsMapType Aggregator::filter(QualityObjectsMapType& qoMap)
106109 return result;
107110}
108111
112+ std::optional<unsigned long > getMaxCycle (const QualityObjectsMapType& qoMap)
113+ {
114+ std::optional<unsigned long > max{};
115+ for (const auto & [_, qo] : qoMap) {
116+ auto cycle = qo->getMetadataOpt (repository::metadata_keys::cycle);
117+ if (cycle.has_value ()) {
118+ auto parsedCycle = repository::metadata_keys::parseCycle (cycle.value ());
119+ if (parsedCycle) {
120+ max = std::max (parsedCycle.value (), max.value_or (0 ));
121+ }
122+ }
123+ }
124+ return max;
125+ }
126+
109127QualityObjectsType Aggregator::aggregate (QualityObjectsMapType& qoMap, const Activity& defaultActivity)
110128{
111129 auto filtered = filter (qoMap);
@@ -133,7 +151,8 @@ QualityObjectsType Aggregator::aggregate(QualityObjectsMapType& qoMap, const Act
133151 }
134152 }
135153
136- auto results = mAggregatorInterface ->aggregate (filtered);
154+ const auto maxCycle = getMaxCycle (filtered);
155+ const auto results = mAggregatorInterface ->aggregate (filtered);
137156 QualityObjectsType qualityObjects;
138157 for (auto const & [qualityName, quality] : results) {
139158 qualityObjects.emplace_back (std::make_shared<QualityObject>(
@@ -142,6 +161,9 @@ QualityObjectsType Aggregator::aggregate(QualityObjectsMapType& qoMap, const Act
142161 mAggregatorConfig .detectorName ,
143162 UpdatePolicyTypeUtils::ToString (mAggregatorConfig .policyType )));
144163 qualityObjects.back ()->setActivity (resultActivity);
164+ if (maxCycle.has_value ()) {
165+ qualityObjects.back ()->addMetadata (repository::metadata_keys::cycle, std::to_string (maxCycle.value ()));
166+ }
145167 }
146168 return qualityObjects;
147169}
0 commit comments