/*
* Copyright (c) 2009 - 2016 Deutsches Elektronen-Synchroton,
* Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program (see the file COPYING.LIB for more
* details); if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.dcache.xdr;
import org.springframework.beans.factory.FactoryBean;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import org.dcache.xdr.gss.GssSessionManager;
/**
* A {@link FactoryBean} to use {@link OncRpcSvcBuilder}
* within Spring framework.
*
* @since 2.1
*/
public class OncRpcSvcFactoryBean implements FactoryBean<OncRpcSvcBuilder> {
private final OncRpcSvcBuilder builder;
public OncRpcSvcFactoryBean() {
builder = new OncRpcSvcBuilder();
}
@Override
public OncRpcSvcBuilder getObject() throws Exception {
return builder;
}
@Override
public Class<? extends OncRpcSvcBuilder> getObjectType() {
return OncRpcSvcBuilder.class;
}
@Override
public boolean isSingleton() {
return false;
}
public void setAutoPublish(boolean autopublish) {
if (autopublish) {
builder.withAutoPublish();
} else {
builder.withoutAutoPublish();
}
}
public void setMaxPort(int maxPort) {
builder.withMaxPort(maxPort);
}
public void setMinPort(int minPort) {
builder.withMinPort(minPort);
}
public void setPort(int port) {
builder.withPort(port);
}
public void setUseTCP(boolean useTCP) {
if (useTCP) {
builder.withTCP();
}
}
public void setUseUDP(boolean useUDP) {
if (useUDP) {
builder.withUDP();
}
}
public void setUseWorkerPool(boolean useWorkerPool) {
if (useWorkerPool) {
builder.withWorkerThreadIoStrategy();
} else {
builder.withSameThreadIoStrategy();
}
}
public void setEnableJmx(boolean enable) {
if (enable) {
builder.withJMX();
}
}
public void setGssSessionManager(GssSessionManager gssSessionManager) {
builder.withGssSessionManager(gssSessionManager);
}
public void setWorkerThreadExecutionService(ExecutorService executorService) {
builder.withWorkerThreadExecutionService(executorService);
}
public void setRpcServices(Map<OncRpcProgram, RpcDispatchable> services) {
for(Map.Entry<OncRpcProgram, RpcDispatchable> program: services.entrySet()) {
builder.withRpcService(program.getKey(), program.getValue());
}
}
public void setServiceName(String serviceName) {
builder.withServiceName(serviceName);
}
public void setSelectorThreadPoolSize(int poolSize) {
builder.withSelectorThreadPoolSize(poolSize);
}
public void setWorkerThreadPoolSize(int poolSize) {
builder.withWorkerThreadPoolSize(poolSize);
}
}