@@ -170,24 +170,32 @@ void AnalysisSupportHelpers::addMissingOutputsToBuilder(std::vector<InputSpec> c
170170 std::vector<InputSpec>& requestedDYNs,
171171 DataProcessorSpec& publisher)
172172{
173- for (auto & input : requestedSpecials) {
174- auto concrete = DataSpecUtils::asConcreteDataMatcher (input);
175- publisher.outputs .emplace_back (concrete.origin , concrete.description , concrete.subSpec );
176- for (auto & i : input.metadata ) {
177- if ((i.type == VariantType::String) && (i.name .find (" input:" ) != std::string::npos)) {
178- auto spec = DataSpecUtils::fromMetadataString (i.defaultValue .get <std::string>());
179- auto j = std::find_if (publisher.inputs .begin (), publisher.inputs .end (), [&](auto x) { return x.binding == spec.binding ; });
180- if (j == publisher.inputs .end ()) {
181- publisher.inputs .push_back (spec);
182- }
183- if (DataSpecUtils::partialMatch (spec, AODOrigins)) {
184- DataSpecUtils::updateInputList (requestedAODs, std::move (spec));
185- } else if (DataSpecUtils::partialMatch (spec, header::DataOrigin{" DYN" })) {
186- DataSpecUtils::updateInputList (requestedDYNs, std::move (spec));
187- }
188- }
189- }
173+ requestedSpecials |
174+ std::views::transform ([](auto const & req){ // create outputspecs for inputs
175+ return DataSpecUtils::asOutputSpec (req);
176+ }) |
177+ sinks::append_to{publisher.outputs }; // append them to the publisher outputs
178+
179+ std::vector<InputSpec> additionalInputs;
180+ for (auto const & input : requestedSpecials) {
181+ input.metadata |
182+ std::views::filter ([](auto const & param){ // filter config params that are strings starting with "input:"
183+ return (param.type == VariantType::String) && (param.name .find (" input:" ) != std::string::npos);
184+ }) |
185+ std::views::transform ([](auto const & param){ // parse them into InputSpecs
186+ return DataSpecUtils::fromMetadataString (param.defaultValue .template get <std::string>());
187+ }) |
188+ sinks::update_input_list{additionalInputs}; // store into a temporary
190189 }
190+
191+ additionalInputs | sinks::update_input_list (publisher.inputs ); // update publisher inputs
192+ // FIXME: until we have a single list of pairs
193+ additionalInputs |
194+ views::partial_match_filter (AODOrigins) |
195+ sinks::update_input_list{requestedAODs}; // update requestedAODs
196+ additionalInputs |
197+ views::partial_match_filter (header::DataOrigin{" DYN" }) |
198+ sinks::update_input_list{requestedDYNs}; // update requestedDYNs
191199}
192200
193201void AnalysisSupportHelpers::addMissingOutputsToAnalysisCCDBFetcher (
0 commit comments