From 966cd7c4885ef87c2993175f62e5c9adbce608d6 Mon Sep 17 00:00:00 2001 From: Wayne Steel Date: Wed, 12 Jul 2017 14:52:52 +0100 Subject: [PATCH 1/2] NIFI-4177 MergeContent - Tar - Save modification timestamp like Tar does --- .../processors/standard/MergeContent.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java index edbc03323a4a..820c226b2728 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java @@ -25,6 +25,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -53,6 +54,7 @@ import org.apache.avro.generic.GenericRecord; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.lang3.StringUtils; import org.apache.nifi.annotation.behavior.InputRequirement; import org.apache.nifi.annotation.behavior.InputRequirement.Requirement; import org.apache.nifi.annotation.behavior.ReadsAttribute; @@ -286,6 +288,16 @@ public class MergeContent extends BinFiles { .allowableValues("true", "false") .defaultValue("false") .build(); + public static final PropertyDescriptor TAR_MODIFIED_TIME = new PropertyDescriptor.Builder() + .name("Tar Modified Time") + .description("If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression " + + "(e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'; if using " + + "other merge strategy or left blank, this value is ignored") + .required(false) + .expressionLanguageSupported(true) + .addValidator(StandardValidators.ISO8061_INSTANT_VALIDATOR) + .defaultValue("${file.lastModifiedTime}") + .build(); public static final Relationship REL_MERGED = new Relationship.Builder().name("merged").description("The FlowFile containing the merged content").build(); @@ -319,6 +331,7 @@ protected List getSupportedPropertyDescriptors() { descriptors.add(DEMARCATOR); descriptors.add(COMPRESSION_LEVEL); descriptors.add(KEEP_PATH); + descriptors.add(TAR_MODIFIED_TIME); return descriptors; } @@ -701,6 +714,17 @@ public void process(final OutputStream rawOut) throws IOException { } } + final String modTime = context.getProperty(TAR_MODIFIED_TIME) + .evaluateAttributeExpressions(flowFile).getValue(); + if (StringUtils.isNotBlank(modTime)) { + try { + tarEntry.setModTime(Instant.parse(modTime).toEpochMilli()); + } catch (final Exception e) { + getLogger().debug("Attribute {} of {} is set to {}; expected ISO8601 format, so ignoring", + new Object[]{TAR_MODIFIED_TIME, flowFile, modTime}); + } + } + out.putArchiveEntry(tarEntry); bin.getSession().exportTo(flowFile, out); From b1adf1926ebbef328639441a0ada546c3ab7a613 Mon Sep 17 00:00:00 2001 From: Wayne Steel Date: Thu, 13 Jul 2017 10:38:22 +0100 Subject: [PATCH 2/2] Validator changed to NON_EMPTY_VALIDATOR --- .../java/org/apache/nifi/processors/standard/MergeContent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java index 820c226b2728..d42724171fc5 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/MergeContent.java @@ -295,7 +295,7 @@ public class MergeContent extends BinFiles { + "other merge strategy or left blank, this value is ignored") .required(false) .expressionLanguageSupported(true) - .addValidator(StandardValidators.ISO8061_INSTANT_VALIDATOR) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .defaultValue("${file.lastModifiedTime}") .build();