diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpInboundChannelAdapterParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpInboundChannelAdapterParser.java deleted file mode 100644 index aaa0477637..0000000000 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpInboundChannelAdapterParser.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2002-2010 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.ftp.config; - -import org.w3c.dom.Element; - -import org.springframework.beans.BeanMetadataElement; -import org.springframework.beans.factory.BeanDefinitionStoreException; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.util.StringUtils; - -/** - * @author Oleg Zhurakousky - * @since 2.0 - * - */ -public abstract class AbstractFtpInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser { - - @Override - protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { - BeanDefinitionBuilder messageSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(this.getClassName()); - - IntegrationNamespaceUtils.setValueIfAttributeDefined(messageSourceBuilder, element, "auto-create-directories"); - - BeanDefinitionBuilder poolBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.integration.file.remote.session.CachingSessionFactory"); - poolBuilder.addConstructorArgReference(element.getAttribute("session-factory")); - - BeanDefinitionBuilder synchronizerBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizer"); - - synchronizerBuilder.addConstructorArgValue(poolBuilder.getBeanDefinition()); - IntegrationNamespaceUtils.setValueIfAttributeDefined(synchronizerBuilder, element, "remote-directory", "remotePath"); -// IntegrationNamespaceUtils.setValueIfAttributeDefined(synchronizerBuilder, element, "auto-delete-remote-files-on-sync", "shouldDeleteSourceFile"); -// -// - String fileNamePattern = element.getAttribute("filename-pattern"); - String filter = element.getAttribute("filter"); - boolean hasFileNamePattern = StringUtils.hasText(fileNamePattern); - boolean hasFilter = StringUtils.hasText(filter); - if (hasFileNamePattern || hasFilter) { - if (!(hasFileNamePattern ^ hasFilter)) { - throw new BeanDefinitionStoreException("at most one of 'filename-pattern' or 'filter' " + - "is allowed on FTP inbound adapter"); - } - } - - if (hasFileNamePattern){ - BeanDefinitionBuilder filterBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.integration.ftp.filters.FtpPatternMatchingFileListFilter"); - filterBuilder.addConstructorArgValue(fileNamePattern); - synchronizerBuilder.addPropertyValue("filter", filterBuilder.getBeanDefinition()); - } - else if (hasFilter) { - synchronizerBuilder.addPropertyReference("filter", filter); - } -// - messageSourceBuilder.addPropertyValue("synchronizer", synchronizerBuilder.getBeanDefinition()); - - IntegrationNamespaceUtils.setValueIfAttributeDefined(messageSourceBuilder, element, "local-working-directory", "localDirectory"); - - return messageSourceBuilder.getBeanDefinition(); - } - - protected abstract String getClassName(); -} diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpOutboundChannelAdapterParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpOutboundChannelAdapterParser.java deleted file mode 100644 index b4449f9c1c..0000000000 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/AbstractFtpOutboundChannelAdapterParser.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2002-2010 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.ftp.config; - -import org.w3c.dom.Element; - -import org.springframework.beans.factory.BeanDefinitionStoreException; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.AbstractBeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.RootBeanDefinition; -import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.util.StringUtils; - -/** - * @author Oleg Zhurakousky - * @since 2.0 - */ -public abstract class AbstractFtpOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { - - @Override - protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { - BeanDefinitionBuilder handlerBuilder = BeanDefinitionBuilder.genericBeanDefinition(this.getClassName()); - - BeanDefinitionBuilder poolBuilder = - BeanDefinitionBuilder.genericBeanDefinition("org.springframework.integration.file.remote.session.CachingSessionFactory"); - poolBuilder.addConstructorArgReference(element.getAttribute("session-factory")); - handlerBuilder.addConstructorArgValue(poolBuilder.getBeanDefinition()); - String remoteDirectory = element.getAttribute("remote-directory"); - String remoteDirectoryExpression = element.getAttribute("remote-directory-expression"); - boolean hasDirectory = StringUtils.hasText(remoteDirectory); - boolean hasDirectoryExpression = StringUtils.hasText(remoteDirectoryExpression); - if (!(hasDirectory ^ hasDirectoryExpression)) { - throw new BeanDefinitionStoreException("exactly one of 'remote-directory' or 'remote-directory-expression' " + - "is required on the SFTP outbound adapter"); - } - BeanDefinition expressionDef = null; - if (hasDirectory) { - expressionDef = new RootBeanDefinition("org.springframework.expression.common.LiteralExpression"); - expressionDef.getConstructorArgumentValues().addGenericArgumentValue(remoteDirectory); - } - else if (hasDirectoryExpression) { - expressionDef = new RootBeanDefinition("org.springframework.integration.config.ExpressionFactoryBean"); - expressionDef.getConstructorArgumentValues().addGenericArgumentValue(remoteDirectoryExpression); - } - handlerBuilder.addPropertyValue("remoteDirectoryExpression", expressionDef); - IntegrationNamespaceUtils.setValueIfAttributeDefined(handlerBuilder, element, "charset"); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(handlerBuilder, element,"filename-generator", "fileNameGenerator"); - return handlerBuilder.getBeanDefinition(); - } - - protected abstract String getClassName(); - -} diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpInboundChannelAdapterParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpInboundChannelAdapterParser.java index c37ad882ec..70aeda8481 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpInboundChannelAdapterParser.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpInboundChannelAdapterParser.java @@ -16,19 +16,60 @@ package org.springframework.integration.ftp.config; +import org.w3c.dom.Element; + +import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser; +import org.springframework.integration.config.xml.IntegrationNamespaceUtils; +import org.springframework.util.StringUtils; /** - * Parser for the FTP inbound-channel-adapter. - * - * @author Josh Long * @author Oleg Zhurakousky + * @author Mark Fisher * @since 2.0 */ -public class FtpInboundChannelAdapterParser extends AbstractFtpInboundChannelAdapterParser { +public class FtpInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser { @Override - protected String getClassName() { - return "org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizingMessageSource"; + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { + BeanDefinitionBuilder messageSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizingMessageSource"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(messageSourceBuilder, element, "auto-create-directories"); + + BeanDefinitionBuilder sessionFactoryBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.file.remote.session.CachingSessionFactory"); + sessionFactoryBuilder.addConstructorArgReference(element.getAttribute("session-factory")); + + BeanDefinitionBuilder synchronizerBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizer"); + synchronizerBuilder.addConstructorArgValue(sessionFactoryBuilder.getBeanDefinition()); + IntegrationNamespaceUtils.setValueIfAttributeDefined(synchronizerBuilder, element, "remote-directory", "remotePath"); +// IntegrationNamespaceUtils.setValueIfAttributeDefined(synchronizerBuilder, element, "auto-delete-remote-files-on-sync", "shouldDeleteSourceFile"); + String fileNamePattern = element.getAttribute("filename-pattern"); + String filter = element.getAttribute("filter"); + boolean hasFileNamePattern = StringUtils.hasText(fileNamePattern); + boolean hasFilter = StringUtils.hasText(filter); + if (hasFileNamePattern || hasFilter) { + if (!(hasFileNamePattern ^ hasFilter)) { + throw new BeanDefinitionStoreException("at most one of 'filename-pattern' or 'filter' " + + "is allowed on FTP inbound adapter"); + } + } + if (hasFileNamePattern) { + BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.ftp.filters.FtpPatternMatchingFileListFilter"); + filterBuilder.addConstructorArgValue(fileNamePattern); + synchronizerBuilder.addPropertyValue("filter", filterBuilder.getBeanDefinition()); + } + else if (hasFilter) { + synchronizerBuilder.addPropertyReference("filter", filter); + } + messageSourceBuilder.addPropertyValue("synchronizer", synchronizerBuilder.getBeanDefinition()); + IntegrationNamespaceUtils.setValueIfAttributeDefined(messageSourceBuilder, element, "local-working-directory", "localDirectory"); + return messageSourceBuilder.getBeanDefinition(); } } diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpOutboundChannelAdapterParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpOutboundChannelAdapterParser.java index ca954a83cb..d27ca3b93a 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpOutboundChannelAdapterParser.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpOutboundChannelAdapterParser.java @@ -16,19 +16,54 @@ package org.springframework.integration.ftp.config; +import org.w3c.dom.Element; + +import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser; +import org.springframework.integration.config.xml.IntegrationNamespaceUtils; +import org.springframework.util.StringUtils; /** - * Logic for parsing the ftp:outbound-channel-adapter - * - * @author Josh Long * @author Oleg Zhurakousky + * @author Mark Fisher * @since 2.0 */ -public class FtpOutboundChannelAdapterParser extends AbstractFtpOutboundChannelAdapterParser { +public class FtpOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { @Override - protected String getClassName() { - return "org.springframework.integration.ftp.outbound.FtpSendingMessageHandler"; + protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { + BeanDefinitionBuilder handlerBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.ftp.outbound.FtpSendingMessageHandler"); + BeanDefinitionBuilder sessionFactoryBuilder = BeanDefinitionBuilder.genericBeanDefinition( + "org.springframework.integration.file.remote.session.CachingSessionFactory"); + sessionFactoryBuilder.addConstructorArgReference(element.getAttribute("session-factory")); + handlerBuilder.addConstructorArgValue(sessionFactoryBuilder.getBeanDefinition()); + String remoteDirectory = element.getAttribute("remote-directory"); + String remoteDirectoryExpression = element.getAttribute("remote-directory-expression"); + boolean hasDirectory = StringUtils.hasText(remoteDirectory); + boolean hasDirectoryExpression = StringUtils.hasText(remoteDirectoryExpression); + if (!(hasDirectory ^ hasDirectoryExpression)) { + throw new BeanDefinitionStoreException("exactly one of 'remote-directory' or 'remote-directory-expression' " + + "is required on the SFTP outbound adapter"); + } + BeanDefinition expressionDef = null; + if (hasDirectory) { + expressionDef = new RootBeanDefinition("org.springframework.expression.common.LiteralExpression"); + expressionDef.getConstructorArgumentValues().addGenericArgumentValue(remoteDirectory); + } + else if (hasDirectoryExpression) { + expressionDef = new RootBeanDefinition("org.springframework.integration.config.ExpressionFactoryBean"); + expressionDef.getConstructorArgumentValues().addGenericArgumentValue(remoteDirectoryExpression); + } + handlerBuilder.addPropertyValue("remoteDirectoryExpression", expressionDef); + IntegrationNamespaceUtils.setValueIfAttributeDefined(handlerBuilder, element, "charset"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(handlerBuilder, element,"filename-generator", "fileNameGenerator"); + return handlerBuilder.getBeanDefinition(); } }