From f2b73531652ecccb1fbca9d6f4551755c58e7315 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 26 Sep 2008 18:27:22 +0000 Subject: [PATCH] Added namespace support for FileToStringTransformer and FileToByteArrayTransformer. --- .../AbstractFilePayloadTransformerParser.java | 45 +++++++++++++++++++ .../file/config/FileNamespaceHandler.java | 3 ++ .../FileToByteArrayTransformerParser.java | 34 ++++++++++++++ .../config/FileToStringTransformerParser.java | 44 ++++++++++++++++++ .../config/spring-integration-file-1.0.xsd | 35 +++++++++++++++ .../AbstractFilePayloadTransformer.java | 9 ++-- .../samples/filecopy/fileCopyDemo-binary.xml | 10 +---- .../samples/filecopy/fileCopyDemo-text.xml | 10 +---- .../XmlMarshallingTransformerParser.java | 2 +- .../XmlUnmarshallingTransformerParser.java | 2 +- .../config/XsltPayloadTransformerParser.java | 2 +- .../config/AbstractTransformerParser.java | 4 +- 12 files changed, 173 insertions(+), 27 deletions(-) create mode 100644 org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/AbstractFilePayloadTransformerParser.java create mode 100644 org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToByteArrayTransformerParser.java create mode 100644 org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToStringTransformerParser.java diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/AbstractFilePayloadTransformerParser.java b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/AbstractFilePayloadTransformerParser.java new file mode 100644 index 0000000000..539db60b94 --- /dev/null +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/AbstractFilePayloadTransformerParser.java @@ -0,0 +1,45 @@ +/* + * Copyright 2002-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.file.config; + +import org.w3c.dom.Element; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.transformer.config.AbstractTransformerParser; + +/** + * Base class for File payload transformer parsers. + * + * @author Mark Fisher + */ +public abstract class AbstractFilePayloadTransformerParser extends AbstractTransformerParser { + + @Override + protected final void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + boolean deleteFiles = "true".equals(element.getAttribute("delete-files").toLowerCase()); + builder.addPropertyValue("deleteFiles", deleteFiles); + this.postProcessTransformer(element, parserContext, builder); + } + + /** + * Subclasses may override this method to provide additional configuration. + */ + protected void postProcessTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + } + +} diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileNamespaceHandler.java b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileNamespaceHandler.java index 22a01da987..87bbb182cc 100644 --- a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileNamespaceHandler.java +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileNamespaceHandler.java @@ -22,12 +22,15 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport; * Namespace handler for Spring Integration's 'file' namespace. * * @author Iwein Fuld + * @author Mark Fisher */ public class FileNamespaceHandler extends NamespaceHandlerSupport { public void init() { registerBeanDefinitionParser("inbound-channel-adapter", new FileInboundChannelAdapterParser()); registerBeanDefinitionParser("outbound-channel-adapter", new FileOutboundChannelAdapterParser()); + registerBeanDefinitionParser("file-to-string-transformer", new FileToStringTransformerParser()); + registerBeanDefinitionParser("file-to-bytes-transformer", new FileToByteArrayTransformerParser()); } } diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToByteArrayTransformerParser.java b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToByteArrayTransformerParser.java new file mode 100644 index 0000000000..99120f5f74 --- /dev/null +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToByteArrayTransformerParser.java @@ -0,0 +1,34 @@ +/* + * Copyright 2002-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.file.config; + +import org.springframework.integration.file.transformer.FileToByteArrayTransformer; +import org.springframework.integration.transformer.Transformer; + +/** + * Parser for the <file-to-bytes-transformer> element. + * + * @author Mark Fisher + */ +public class FileToByteArrayTransformerParser extends AbstractFilePayloadTransformerParser { + + @Override + protected Class getTransformerClass() { + return FileToByteArrayTransformer.class; + } + +} diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToStringTransformerParser.java b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToStringTransformerParser.java new file mode 100644 index 0000000000..b439e48e90 --- /dev/null +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/FileToStringTransformerParser.java @@ -0,0 +1,44 @@ +/* + * Copyright 2002-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.file.config; + +import org.w3c.dom.Element; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.config.IntegrationNamespaceUtils; +import org.springframework.integration.file.transformer.FileToStringTransformer; +import org.springframework.integration.transformer.Transformer; + +/** + * Parser for the <file-to-string-transformer> element. + * + * @author Mark Fisher + */ +public class FileToStringTransformerParser extends AbstractFilePayloadTransformerParser { + + @Override + protected Class getTransformerClass() { + return FileToStringTransformer.class; + } + + @Override + protected void postProcessTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "charset"); + } + +} diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/spring-integration-file-1.0.xsd b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/spring-integration-file-1.0.xsd index 01f79379c6..2d2604082f 100644 --- a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/spring-integration-file-1.0.xsd +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/config/spring-integration-file-1.0.xsd @@ -53,4 +53,39 @@ + + + + + Creates a Transformer that converts a File payload to a String. + + + + + + + + + + + + + + + Creates a Transformer that converts a File payload to an array of bytes. + + + + + + + + + + + + + + + diff --git a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/transformer/AbstractFilePayloadTransformer.java b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/transformer/AbstractFilePayloadTransformer.java index 6997ffdde6..53c6c48238 100644 --- a/org.springframework.integration.file/src/main/java/org/springframework/integration/file/transformer/AbstractFilePayloadTransformer.java +++ b/org.springframework.integration.file/src/main/java/org/springframework/integration/file/transformer/AbstractFilePayloadTransformer.java @@ -37,14 +37,15 @@ public abstract class AbstractFilePayloadTransformer implements Transformer { private final Log logger = LogFactory.getLog(this.getClass()); - private volatile boolean deleteFileAfterTransformation; + private volatile boolean deleteFiles; /** * Specify whether to delete the File after transformation. + * Default is false. */ - public void setDeleteFileAfterTransformation(boolean deleteFileAfterTransformation) { - this.deleteFileAfterTransformation = deleteFileAfterTransformation; + public void setDeleteFiles(boolean deleteFiles) { + this.deleteFiles = deleteFiles; } public final Message transform(Message message) { @@ -59,7 +60,7 @@ public abstract class AbstractFilePayloadTransformer implements Transformer { .copyHeaders(message.getHeaders()) .setHeaderIfAbsent(FileNameGenerator.FILENAME_PROPERTY_KEY, file.getName()) .build(); - if (this.deleteFileAfterTransformation) { + if (this.deleteFiles) { if (!file.delete() && this.logger.isWarnEnabled()) { this.logger.warn("failed to delete File '" + file + "'"); } diff --git a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-binary.xml b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-binary.xml index 4c4c94e6e9..77f2f35f5d 100644 --- a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-binary.xml +++ b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-binary.xml @@ -17,15 +17,7 @@ - - - - - - - - - + diff --git a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-text.xml b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-text.xml index a714abafd8..d9314fd922 100644 --- a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-text.xml +++ b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/filecopy/fileCopyDemo-text.xml @@ -18,15 +18,7 @@ directory="file:${java.io.tmpdir}/spring-integration-samples/input" filename-pattern="[a-z]+.txt"/> - - - - - - - - - + diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java index 422c95b2b5..76cc077644 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java @@ -41,7 +41,7 @@ public class XmlMarshallingTransformerParser extends AbstractTransformerParser { } @Override - protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String resultFactory = element.getAttribute("result-factory"); String resultType = element.getAttribute("result-type"); String marshaller = element.getAttribute("marshaller"); diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java index e2f681b5b0..7a7149fcfd 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java @@ -37,7 +37,7 @@ public class XmlUnmarshallingTransformerParser extends AbstractTransformerParser } @Override - protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String unmarshaller = element.getAttribute("unmarshaller"); Assert.hasText(unmarshaller, "the 'unmarshaller' attribute is required"); builder.addConstructorArgReference(unmarshaller); diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java index 4c26bb6ac1..8c400cf723 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java @@ -41,7 +41,7 @@ public class XsltPayloadTransformerParser extends AbstractTransformerParser { } @Override - protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String xslResource = element.getAttribute("xsl-resource"); String xslTemplates = element.getAttribute("xsl-templates"); String resultTransformer = element.getAttribute("result-transformer"); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractTransformerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractTransformerParser.java index 0f42e90345..32e1662a21 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractTransformerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractTransformerParser.java @@ -45,7 +45,7 @@ public abstract class AbstractTransformerParser extends AbstractEndpointParser { protected void postProcess(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { BeanDefinitionBuilder transformerBuilder = BeanDefinitionBuilder.genericBeanDefinition(this.getTransformerClass()); - this.parsePayloadTransformer(element, parserContext, transformerBuilder); + this.parseTransformer(element, parserContext, transformerBuilder); String transformerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( transformerBuilder.getBeanDefinition(), parserContext.getRegistry()); builder.addConstructorArgReference(transformerBeanName); @@ -53,6 +53,6 @@ public abstract class AbstractTransformerParser extends AbstractEndpointParser { protected abstract Class getTransformerClass(); - protected abstract void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder); + protected abstract void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder); }