package org.infinispan.server.core.configuration; import java.util.Collections; import java.util.Set; import org.infinispan.commons.api.BasicCacheContainer; import org.infinispan.commons.configuration.Builder; import org.infinispan.server.core.logging.Log; import org.infinispan.util.logging.LogFactory; public abstract class ProtocolServerConfigurationBuilder<T extends ProtocolServerConfiguration, S extends ProtocolServerConfigurationChildBuilder<T, S>> implements ProtocolServerConfigurationChildBuilder<T, S>, Builder<T> { private static final Log log = LogFactory.getLog(ProtocolServerConfigurationBuilder.class, Log.class); protected String defaultCacheName = BasicCacheContainer.DEFAULT_CACHE_NAME; protected String name = ""; protected String host = "127.0.0.1"; protected int port = -1; protected int idleTimeout = -1; protected int recvBufSize = 0; protected int sendBufSize = 0; protected final SslConfigurationBuilder<T, S> ssl; protected boolean tcpNoDelay = true; protected int workerThreads = 2 * Runtime.getRuntime().availableProcessors(); protected Set<String> ignoredCaches = Collections.EMPTY_SET; protected boolean startTransport = true; protected ProtocolServerConfigurationBuilder(int port) { this.port = port; this.ssl = new SslConfigurationBuilder(this); } @Override public S ignoredCaches(Set<String> ignoredCaches) { this.ignoredCaches = ignoredCaches; return this.self(); } @Override public S defaultCacheName(String defaultCacheName) { this.defaultCacheName = defaultCacheName; return this.self(); } @Override public S name(String name) { this.name = name; return this.self(); } public String name() { return name; } @Override public S host(String host) { this.host = host; return this.self(); } @Override public S port(int port) { this.port = port; return this.self(); } @Override public S idleTimeout(int idleTimeout) { this.idleTimeout = idleTimeout; return this.self(); } @Override public S tcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; return this.self(); } @Override public S recvBufSize(int recvBufSize) { this.recvBufSize = recvBufSize; return this.self(); } @Override public S sendBufSize(int sendBufSize) { this.sendBufSize = sendBufSize; return this.self(); } @Override public SslConfigurationBuilder ssl() { return ssl; } @Override public S workerThreads(int workerThreads) { this.workerThreads = workerThreads; return this.self(); } @Override public void validate() { ssl.validate(); if (idleTimeout < -1) { throw log.illegalIdleTimeout(idleTimeout); } if (sendBufSize < 0) { throw log.illegalSendBufferSize(sendBufSize); } if (recvBufSize < 0) { throw log.illegalReceiveBufferSize(recvBufSize); } if (workerThreads < 0) { throw log.illegalWorkerThreads(workerThreads); } } @Override public S startTransport(boolean startTransport) { this.startTransport = startTransport; return this.self(); } @Override public Builder<?> read(T template) { this.defaultCacheName = template.defaultCacheName(); this.name = template.name(); this.host = template.host(); this.port = template.port(); this.idleTimeout = template.idleTimeout(); this.recvBufSize = template.recvBufSize(); this.sendBufSize = template.sendBufSize(); this.tcpNoDelay = template.tcpNoDelay(); this.workerThreads = template.workerThreads(); this.ssl.read(template.ssl()); this.ignoredCaches = template.ignoredCaches(); return this; } }