This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 015b721800 NIFI-7643 Removed absolute.path attribute from UnpackContent
015b721800 is described below
commit 015b7218009928a0de6cc8f4071089e0b3c45ad7
Author: Mark Payne <[email protected]>
AuthorDate: Thu Oct 19 09:57:50 2023 -0400
NIFI-7643 Removed absolute.path attribute from UnpackContent
- Do not include the absolute.path attribute from Zip/Tar files in
UnpackContent; some code cleanup
This closes #7902
Signed-off-by: David Handermann <[email protected]>
---
.../nifi/processors/standard/UnpackContent.java | 117 +++++++++------------
1 file changed, 47 insertions(+), 70 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
index ede27cc904..e619d937d4 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/UnpackContent.java
@@ -46,7 +46,6 @@ import org.apache.nifi.logging.ComponentLog;
import org.apache.nifi.processor.AbstractProcessor;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
-import org.apache.nifi.processor.ProcessorInitializationContext;
import org.apache.nifi.processor.Relationship;
import org.apache.nifi.processor.exception.ProcessException;
import org.apache.nifi.processor.io.InputStreamCallback;
@@ -68,9 +67,7 @@ import java.nio.file.Path;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -187,29 +184,24 @@ public class UnpackContent extends AbstractProcessor {
.description("The original FlowFile is sent to this relationship
when it cannot be unpacked for some reason")
.build();
- private Set<Relationship> relationships;
- private List<PropertyDescriptor> properties;
+ private static final Set<Relationship> relationships = Set.of(
+ REL_SUCCESS,
+ REL_FAILURE,
+ REL_ORIGINAL
+ );
+
+ private static final List<PropertyDescriptor> properties = List.of(
+ PACKAGING_FORMAT,
+ FILE_FILTER,
+ PASSWORD,
+ ALLOW_STORED_ENTRIES_WITH_DATA_DESCRIPTOR
+ );
private Pattern fileFilter;
private Unpacker tarUnpacker;
private Unpacker zipUnpacker;
- @Override
- protected void init(final ProcessorInitializationContext context) {
- final Set<Relationship> relationships = new HashSet<>();
- relationships.add(REL_SUCCESS);
- relationships.add(REL_ORIGINAL);
- relationships.add(REL_FAILURE);
- this.relationships = Collections.unmodifiableSet(relationships);
-
- final List<PropertyDescriptor> properties = new ArrayList<>();
- properties.add(PACKAGING_FORMAT);
- properties.add(FILE_FILTER);
- properties.add(PASSWORD);
- properties.add(ALLOW_STORED_ENTRIES_WITH_DATA_DESCRIPTOR);
- this.properties = Collections.unmodifiableList(properties);
- }
@Override
public Set<Relationship> getRelationships() {
@@ -277,31 +269,31 @@ public class UnpackContent extends AbstractProcessor {
final Unpacker unpacker;
final boolean addFragmentAttrs;
switch (packagingFormat) {
- case TAR_FORMAT:
- case X_TAR_FORMAT:
- unpacker = tarUnpacker;
- addFragmentAttrs = true;
- break;
- case ZIP_FORMAT:
- unpacker = zipUnpacker;
- addFragmentAttrs = true;
- break;
- case FLOWFILE_STREAM_FORMAT_V2:
- unpacker = new FlowFileStreamUnpacker(new FlowFileUnpackagerV2());
- addFragmentAttrs = false;
- break;
- case FLOWFILE_STREAM_FORMAT_V3:
- unpacker = new FlowFileStreamUnpacker(new FlowFileUnpackagerV3());
- addFragmentAttrs = false;
- break;
- case FLOWFILE_TAR_FORMAT:
- unpacker = new FlowFileStreamUnpacker(new FlowFileUnpackagerV1());
- addFragmentAttrs = false;
- break;
- case AUTO_DETECT_FORMAT:
- default:
- // The format of the unpacker should be known before initialization
- throw new ProcessException(packagingFormat + " is not a valid
packaging format");
+ case TAR_FORMAT:
+ case X_TAR_FORMAT:
+ unpacker = tarUnpacker;
+ addFragmentAttrs = true;
+ break;
+ case ZIP_FORMAT:
+ unpacker = zipUnpacker;
+ addFragmentAttrs = true;
+ break;
+ case FLOWFILE_STREAM_FORMAT_V2:
+ unpacker = new FlowFileStreamUnpacker(new
FlowFileUnpackagerV2());
+ addFragmentAttrs = false;
+ break;
+ case FLOWFILE_STREAM_FORMAT_V3:
+ unpacker = new FlowFileStreamUnpacker(new
FlowFileUnpackagerV3());
+ addFragmentAttrs = false;
+ break;
+ case FLOWFILE_TAR_FORMAT:
+ unpacker = new FlowFileStreamUnpacker(new
FlowFileUnpackagerV1());
+ addFragmentAttrs = false;
+ break;
+ case AUTO_DETECT_FORMAT:
+ default:
+ // The format of the unpacker should be known before
initialization
+ throw new ProcessException(packagingFormat + " is not a valid
packaging format");
}
final List<FlowFile> unpacked = new ArrayList<>();
@@ -368,15 +360,12 @@ public class UnpackContent extends AbstractProcessor {
final File file = new File(tarEntry.getName());
final Path filePath = file.toPath();
String filePathString = filePath.getParent() == null ?
"/" : filePath.getParent() + "/";
- final Path absPath = filePath.toAbsolutePath();
- final String absPathString =
absPath.getParent().toString() + "/";
FlowFile unpackedFile = session.create(source);
try {
final Map<String, String> attributes = new
HashMap<>();
attributes.put(CoreAttributes.FILENAME.key(),
file.getName());
attributes.put(CoreAttributes.PATH.key(),
filePathString);
- attributes.put(CoreAttributes.ABSOLUTE_PATH.key(),
absPathString);
attributes.put(CoreAttributes.MIME_TYPE.key(),
OCTET_STREAM);
attributes.put(FILE_PERMISSIONS_ATTRIBUTE,
FileInfo.permissionToString(tarEntry.getMode()));
@@ -466,7 +455,6 @@ public class UnpackContent extends AbstractProcessor {
final Map<String, String> attributes = new HashMap<>();
attributes.put(CoreAttributes.FILENAME.key(),
file.getName());
attributes.put(CoreAttributes.PATH.key(),
parentDirectory);
- attributes.put(CoreAttributes.ABSOLUTE_PATH.key(),
file.toPath().toAbsolutePath() + PATH_SEPARATOR);
attributes.put(CoreAttributes.MIME_TYPE.key(),
OCTET_STREAM);
attributes.put(FILE_ENCRYPTION_METHOD_ATTRIBUTE,
encryptionMethod.toString());
@@ -484,7 +472,7 @@ public class UnpackContent extends AbstractProcessor {
private static class CompressedZipInputStreamCallback extends
ZipInputStreamCallback {
- private boolean allowStoredEntriesWithDataDescriptor;
+ private final boolean allowStoredEntriesWithDataDescriptor;
private CompressedZipInputStreamCallback(
final Pattern fileFilter,
@@ -583,11 +571,6 @@ public class UnpackContent extends AbstractProcessor {
}
}
- private static void mapAttributes(final Map<String, String> attributes,
final String oldKey, final String newKey) {
- if (!attributes.containsKey(newKey) && attributes.containsKey(oldKey))
{
- attributes.put(newKey, attributes.get(oldKey));
- }
- }
private void finishFragmentAttributes(final ProcessSession session, final
FlowFile source, final List<FlowFile> unpacked) {
// first pass verifies all FlowFiles have the FRAGMENT_INDEX attribute
and gets the total number of fragments
@@ -649,21 +632,15 @@ public class UnpackContent extends AbstractProcessor {
}
public static PackageFormat getFormat(String textValue) {
- switch (textValue) {
- case AUTO_DETECT_FORMAT_NAME:
- return AUTO_DETECT_FORMAT;
- case TAR_FORMAT_NAME:
- return TAR_FORMAT;
- case ZIP_FORMAT_NAME:
- return ZIP_FORMAT;
- case FLOWFILE_STREAM_FORMAT_V3_NAME:
- return FLOWFILE_STREAM_FORMAT_V3;
- case FLOWFILE_STREAM_FORMAT_V2_NAME:
- return FLOWFILE_STREAM_FORMAT_V2;
- case FLOWFILE_TAR_FORMAT_NAME:
- return FLOWFILE_TAR_FORMAT;
- }
- return null;
+ return switch (textValue) {
+ case AUTO_DETECT_FORMAT_NAME -> AUTO_DETECT_FORMAT;
+ case TAR_FORMAT_NAME -> TAR_FORMAT;
+ case ZIP_FORMAT_NAME -> ZIP_FORMAT;
+ case FLOWFILE_STREAM_FORMAT_V3_NAME ->
FLOWFILE_STREAM_FORMAT_V3;
+ case FLOWFILE_STREAM_FORMAT_V2_NAME ->
FLOWFILE_STREAM_FORMAT_V2;
+ case FLOWFILE_TAR_FORMAT_NAME -> FLOWFILE_TAR_FORMAT;
+ default -> null;
+ };
}
}
}