| 126 | } |
| 127 | |
| 128 | void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flowFile, const std::shared_ptr<core::ProcessSession>& session) { |
| 129 | session->remove(flowFile); |
| 130 | |
| 131 | CompressionFormat compressFormat; |
| 132 | if (compressFormat_ == ExtendedCompressionFormat::USE_MIME_TYPE) { |
| 133 | std::string attr; |
| 134 | flowFile->getAttribute(core::SpecialFlowAttribute::MIME_TYPE, attr); |
| 135 | if (attr.empty()) { |
| 136 | logger_->log_error("No %s attribute existed for the flow, route to failure", core::SpecialFlowAttribute::MIME_TYPE); |
| 137 | session->transfer(flowFile, Failure); |
| 138 | return; |
| 139 | } |
| 140 | auto search = compressionFormatMimeTypeMap_.find(attr); |
| 141 | if (search != compressionFormatMimeTypeMap_.end()) { |
| 142 | compressFormat = search->second; |
| 143 | } else { |
| 144 | logger_->log_info("Mime type of %s is not indicated a support format, route to success", attr); |
| 145 | session->transfer(flowFile, Success); |
| 146 | return; |
| 147 | } |
| 148 | } else { |
| 149 | compressFormat = compressFormat_.cast<CompressionFormat>(); |
| 150 | } |
| 151 | std::string mimeType = toMimeType(compressFormat); |
| 152 | |
| 153 | // Validate |
| 154 | if (!encapsulateInTar_ && compressFormat != CompressionFormat::GZIP) { |
| 155 | logger_->log_error("non-TAR encapsulated format only supports GZIP compression"); |
| 156 | session->transfer(flowFile, Failure); |
| 157 | return; |
| 158 | } |
| 159 | if (compressFormat == CompressionFormat::BZIP2 && archive_bzlib_version() == nullptr) { |
| 160 | logger_->log_error("%s compression format is requested, but the agent was compiled without BZip2 support", compressFormat.toString()); |
| 161 | session->transfer(flowFile, Failure); |
| 162 | return; |
| 163 | } |
| 164 | if ((compressFormat == CompressionFormat::LZMA || compressFormat == CompressionFormat::XZ_LZMA2) && archive_liblzma_version() == nullptr) { |
| 165 | logger_->log_error("%s compression format is requested, but the agent was compiled without LZMA support ", compressFormat.toString()); |
| 166 | session->transfer(flowFile, Failure); |
| 167 | return; |
| 168 | } |
| 169 | |
| 170 | std::string fileExtension; |
| 171 | auto search = fileExtension_.find(compressFormat); |
| 172 | if (search != fileExtension_.end()) { |
| 173 | fileExtension = search->second; |
| 174 | } |
| 175 | std::shared_ptr<core::FlowFile> result = session->create(flowFile); |
| 176 | bool success = false; |
| 177 | if (encapsulateInTar_) { |
| 178 | CompressContent::WriteCallback callback(compressMode_, compressLevel_, compressFormat, flowFile, session); |
| 179 | session->write(result, &callback); |
| 180 | success = callback.status_ >= 0; |
| 181 | } else { |
| 182 | CompressContent::GzipWriteCallback callback(compressMode_, compressLevel_, flowFile, session); |
| 183 | session->write(result, &callback); |
| 184 | success = callback.success_; |
| 185 | } |
nothing calls this directly
no test coverage detected