hunyadi-dev commented on a change in pull request #866:
URL: https://github.com/apache/nifi-minifi-cpp/pull/866#discussion_r468394688
##########
File path: extensions/libarchive/MergeContent.cpp
##########
@@ -342,6 +362,56 @@ std::shared_ptr<core::FlowFile>
ZipMerge::merge(core::ProcessContext *context, c
return flowFile;
}
+void AttributeMerger::mergeAttributes() {
+ std::map<std::string, std::string> commonAttributes = getCommonAttributes();
+
+ for (const auto& pair : commonAttributes) {
+ session_->putAttribute(mergeFlow_, pair.first, pair.second);
+ }
+}
+
+std::map<std::string, std::string> AttributeMerger::getCommonAttributes() {
+ std::map<std::string, std::string> commonAttributes;
+ bool isFirst = true;
+ for (const auto& flow : flows_) {
+ if (isFirst) {
+ commonAttributes = flow->getAttributes();
+ isFirst = false;
+ } else {
+ processFlowFile(flow, commonAttributes);
+ }
+ }
+ return commonAttributes;
+}
+
+void KeepOnlyCommonAttributesMerger::processFlowFile(const
std::shared_ptr<core::FlowFile> &flow, std::map<std::string, std::string>&
commonAttributes) {
+ auto flowAttributes = flow->getAttributes();
+ for (auto it = commonAttributes.cbegin(); it != commonAttributes.cend();) {
+ if (flowAttributes.find(it->first) != flowAttributes.end()) {
+ if (flowAttributes[it->first] != commonAttributes[it->first])
Review comment:
Minor, but do not use `operator[]` on a map for strict element access.
Use `std::map::at()` instead as you never want any insertion here. You can do
even better by saving the iterator returned by `std::map::find`.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]