From 32fdd2119f80c09034712ad9deed367a955cb13f Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Mon, 7 Aug 2017 14:49:35 -0400 Subject: [PATCH] INT-4324: File Outbound: parse preserve-timestamp JIRA: https://jira.spring.io/browse/INT-4324 The `preserve-timestamp` attribute for the `` has been missed for parsing in the `FileWritingMessageHandlerBeanDefinitionBuilder` and propagation in the `FileWritingMessageHandlerFactoryBean` **Cherry-pick to 4.3.x** --- ...ngMessageHandlerBeanDefinitionBuilder.java | 1 + .../FileWritingMessageHandlerFactoryBean.java | 39 ++++++++++++------- ...boundChannelAdapterParserTests-context.xml | 1 + ...FileOutboundChannelAdapterParserTests.java | 1 + 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerBeanDefinitionBuilder.java b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerBeanDefinitionBuilder.java index 64d8ff90e8..26a4d00258 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerBeanDefinitionBuilder.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerBeanDefinitionBuilder.java @@ -76,6 +76,7 @@ abstract class FileWritingMessageHandlerBeanDefinitionBuilder { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "flush-when-idle"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "flush-predicate"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "chmod"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "preserve-timestamp"); String remoteFileNameGenerator = element.getAttribute("filename-generator"); String remoteFileNameGeneratorExpression = element.getAttribute("filename-generator-expression"); boolean hasRemoteFileNameGenerator = StringUtils.hasText(remoteFileNameGenerator); diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerFactoryBean.java b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerFactoryBean.java index 9375d90650..bad0e6f2a2 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerFactoryBean.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileWritingMessageHandlerFactoryBean.java @@ -41,40 +41,42 @@ import org.springframework.integration.file.support.FileExistsMode; public class FileWritingMessageHandlerFactoryBean extends AbstractSimpleMessageHandlerFactoryBean { - private volatile File directory; + private File directory; - private volatile Expression directoryExpression; + private Expression directoryExpression; - private volatile String charset; + private String charset; - private volatile FileNameGenerator fileNameGenerator; + private FileNameGenerator fileNameGenerator; - private volatile Boolean deleteSourceFiles; + private Boolean deleteSourceFiles; - private volatile Boolean autoCreateDirectory; + private Boolean autoCreateDirectory; - private volatile Boolean requiresReply; + private Boolean requiresReply; - private volatile Long sendTimeout; + private Long sendTimeout; - private volatile String temporaryFileSuffix; + private String temporaryFileSuffix; - private volatile FileExistsMode fileExistsMode; + private FileExistsMode fileExistsMode; - private volatile boolean expectReply = true; + private boolean expectReply = true; private Integer bufferSize; - private volatile Boolean appendNewLine; + private Boolean appendNewLine; - private volatile Long flushInterval; + private Long flushInterval; - private volatile Boolean flushWhenIdle; + private Boolean flushWhenIdle; - private volatile MessageFlushPredicate flushPredicate; + private MessageFlushPredicate flushPredicate; private String chmod; + private Boolean preserveTimestamp; + public void setFileExistsMode(String fileExistsModeAsString) { this.fileExistsMode = FileExistsMode.getForString(fileExistsModeAsString); } @@ -143,6 +145,10 @@ public class FileWritingMessageHandlerFactoryBean this.chmod = chmod; } + public void setPreserveTimestamp(Boolean preserveTimestamp) { + this.preserveTimestamp = preserveTimestamp; + } + @Override protected FileWritingMessageHandler createHandler() { @@ -204,6 +210,9 @@ public class FileWritingMessageHandlerFactoryBean if (this.chmod != null) { handler.setChmodOctal(this.chmod); } + if (this.preserveTimestamp != null) { + handler.setPreserveTimestamp(this.preserveTimestamp); + } return handler; } diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests-context.xml b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests-context.xml index 24dc7e24e1..8daccabbb4 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests-context.xml +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests-context.xml @@ -18,6 +18,7 @@ directory="${java.io.tmpdir}" temporary-file-suffix=".foo" chmod="777" + preserve-timestamp="true" filename-generator-expression="'foo.txt'"/>