/*
* Copyright 2016 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.ip.dsl;
import java.util.concurrent.Executor;
import org.springframework.core.serializer.Deserializer;
import org.springframework.core.serializer.Serializer;
import org.springframework.integration.dsl.IntegrationComponentSpec;
import org.springframework.integration.ip.tcp.connection.AbstractConnectionFactory;
import org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain;
import org.springframework.integration.ip.tcp.connection.TcpMessageMapper;
import org.springframework.integration.ip.tcp.connection.TcpSocketSupport;
/**
* An {@link IntegrationComponentSpec} for {@link AbstractConnectionFactory}s.
* @param <S> the target {@link AbstractConnectionFactorySpec} implementation type.
* @param <C> the target {@link AbstractConnectionFactory} implementation type.
*
* @author Gary Russell
* @since 5.0
*
*/
public abstract class AbstractConnectionFactorySpec
<S extends AbstractConnectionFactorySpec<S, C>, C extends AbstractConnectionFactory>
extends IntegrationComponentSpec<S, C> {
AbstractConnectionFactorySpec(C connectionFactory) {
this.target = connectionFactory;
}
@Override
public S id(String id) {
this.target.setBeanName(id);
return _this();
}
/**
* @param soTimeout the timeout socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoTimeout(int)
*/
public S soTimeout(int soTimeout) {
this.target.setSoTimeout(soTimeout);
return _this();
}
/**
* @param soReceiveBufferSize the receive buffer size socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoReceiveBufferSize(int)
*/
public S soReceiveBufferSize(int soReceiveBufferSize) {
this.target.setSoReceiveBufferSize(soReceiveBufferSize);
return _this();
}
/**
* @param soSendBufferSize the send buffer size socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoSendBufferSize(int)
*/
public S soSendBufferSize(int soSendBufferSize) {
this.target.setSoSendBufferSize(soSendBufferSize);
return _this();
}
/**
* @param soTcpNoDelay the TCP no delay socket option (disable Nagle's algorithm).
* @return the spec.
* @see AbstractConnectionFactory#setSoTcpNoDelay(boolean)
*/
public S soTcpNoDelay(boolean soTcpNoDelay) {
this.target.setSoTcpNoDelay(soTcpNoDelay);
return _this();
}
/**
* @param soLinger the linger socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoLinger(int)
*/
public S soLinger(int soLinger) {
this.target.setSoLinger(soLinger);
return _this();
}
/**
* @param soKeepAlive the keep alive socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoKeepAlive(boolean)
*/
public S soKeepAlive(boolean soKeepAlive) {
this.target.setSoKeepAlive(soKeepAlive);
return _this();
}
/**
* @param soTrafficClass the traffic class socket option.
* @return the spec.
* @see AbstractConnectionFactory#setSoTrafficClass(int)
*/
public S soTrafficClass(int soTrafficClass) {
this.target.setSoTrafficClass(soTrafficClass);
return _this();
}
/**
* @param taskExecutor the task executor.
* @return the spec.
* @see AbstractConnectionFactory#setTaskExecutor(Executor)
*/
public S taskExecutor(Executor taskExecutor) {
this.target.setTaskExecutor(taskExecutor);
return _this();
}
/**
* @param deserializer the deserializer.
* @return the spec.
* @see AbstractConnectionFactory#setDeserializer(Deserializer)
*/
public S deserializer(Deserializer<?> deserializer) {
this.target.setDeserializer(deserializer);
return _this();
}
/**
* @param serializer the serializer.
* @return the spec.
* @see AbstractConnectionFactory#setSerializer(Serializer)
*/
public S serializer(Serializer<?> serializer) {
this.target.setSerializer(serializer);
return _this();
}
/**
* @param mapper the message mapper.
* @return the spec.
* @see AbstractConnectionFactory#setMapper(TcpMessageMapper)
*/
public S mapper(TcpMessageMapper mapper) {
this.target.setMapper(mapper);
return _this();
}
/**
* @param leaveOpen true to leave the socket open for additional messages.
* @return the spec.
* @see AbstractConnectionFactory#setLeaveOpen(boolean)
*/
public S leaveOpen(boolean leaveOpen) {
this.target.setLeaveOpen(leaveOpen);
return _this();
}
/**
* @param interceptorFactoryChain the interceptor factory chain.
* @return the spec.
* @see AbstractConnectionFactory#setInterceptorFactoryChain(TcpConnectionInterceptorFactoryChain)
*/
public S interceptorFactoryChain(TcpConnectionInterceptorFactoryChain interceptorFactoryChain) {
this.target.setInterceptorFactoryChain(interceptorFactoryChain);
return _this();
}
/**
* @param lookupHost true to reverse lookup the host.
* @return the spec.
* @see AbstractConnectionFactory#setLookupHost(boolean)
*/
public S lookupHost(boolean lookupHost) {
this.target.setLookupHost(lookupHost);
return _this();
}
/**
* @param nioHarvestInterval the harvest interval when using NIO.
* @return the spec.
* @see AbstractConnectionFactory#setNioHarvestInterval(int)
*/
public S nioHarvestInterval(int nioHarvestInterval) {
this.target.setNioHarvestInterval(nioHarvestInterval);
return _this();
}
/**
* @param readDelay the read delay.
* @return the spec.
* @see AbstractConnectionFactory#setReadDelay(long)
*/
public S readDelay(long readDelay) {
this.target.setReadDelay(readDelay);
return _this();
}
/**
* @param tcpSocketSupport the {@link TcpSocketSupport}.
* @return the spec.
* @see AbstractConnectionFactory#setTcpSocketSupport(TcpSocketSupport)
*/
public S tcpSocketSupport(TcpSocketSupport tcpSocketSupport) {
this.target.setTcpSocketSupport(tcpSocketSupport);
return _this();
}
}