/*
* This file is part of the QuickServer library
* Copyright (C) QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/
package org.quickserver.util.xmlreader;
import java.nio.charset.UnsupportedCharsetException;
import java.nio.charset.Charset;
/**
* This class encapsulate Advanced Settings.
* The example xml is <pre>
....
<advanced-settings>
<charset>ISO-8859-1<charset>
<byte-buffer-size>61440<byte-buffer-size>
<use-direct-byte-buffer>true</use-direct-byte-buffer>
<backlog>1024</backlog>
<socket-linger>-1</socket-linger>
<debug-non-blocking-mode>false</debug-non-blocking-mode>
</advanced-settings>
....
</pre>
* @author Akshathkumar Shetty
* @since 1.4.5
*/
public class AdvancedSettings implements java.io.Serializable {
private String charset = "ISO-8859-1";
private int byteBufferSize = 1024*64;
private int backlog = 0;
private boolean useDirectByteBuffer = true;
private int socketLinger = -1;
private boolean debugNonBlockingMode;
private String clientIdentifierClass =
"org.quickserver.net.server.impl.OptimisticClientIdentifier";
private String qSObjectPoolMakerClass = null;
private int maxThreadsForNioWrite = 10;
/**
* Sets the Charset to be used for String decoding and encoding.
* XML Tag: <charset>ISO-8859-1</charset>
* @param charset to be used for String decoding and encoding
* @see #getCharset
*/
public void setCharset(String charset) {
if(charset==null || charset.trim().length()==0)
return;
if(Charset.isSupported(charset)==false) {
throw new UnsupportedCharsetException(charset);
}
this.charset = charset;
}
/**
* Returns Charset to be used for String decoding and encoding..
* @see #setCharset
*/
public String getCharset() {
return charset;
}
/**
* Sets the ByteBuffer size to be used in ByteBuffer pool.
* XML Tag: <byte-buffer-size>65536</byte-buffer-size>
* @param byteBufferSize size to be used in ByteBuffer pool.
* @see #getByteBufferSize
*/
public void setByteBufferSize(int byteBufferSize) {
if(byteBufferSize>0)
this.byteBufferSize = byteBufferSize;
}
/**
* Returns ByteBuffer size to be used in ByteBuffer pool.
* @see #setByteBufferSize
*/
public int getByteBufferSize() {
return byteBufferSize;
}
/**
* Sets the listen backlog length for the QuickServer to listen on.
* If not set or set a value equal or less than 0, then the default
* value will be assumed.<br/>
* XML Tag: <backlog>0</backlog>
* @param backlog The listen backlog length.
* @see #getBacklog
*/
public void setBacklog(int backlog) {
if(backlog>=0)
this.backlog = backlog;
}
/**
* Returns the listen backlog length for the QuickServer.
* @see #setBacklog
*/
public int getBacklog() {
return backlog;
}
/**
* Sets the UseDirectByteBuffer flag.
* If not set, it will use <code>true</code><br/>
* XML Tag: <use-direct-byte-buffer>true</use-direct-byte-buffer>
* @param flag UseDirectByteBuffer flag.
* @see #getUseDirectByteBuffer
*/
public void setUseDirectByteBuffer(boolean flag) {
this.useDirectByteBuffer = flag;
}
/**
* Returns UseDirectByteBuffer flag.
* @see #setUseDirectByteBuffer
*/
public boolean getUseDirectByteBuffer() {
return useDirectByteBuffer;
}
/**
* Enable SO_LINGER with the specified linger time in seconds. If linger time is less than
* <code>0</code> SO_LINGER will be disable.
* XML Tag: <socket-linger>-1</socket-linger>
* @param socketLinger if the linger value is negative SO_LINGER will be disable.
* @see #getSocketLinger
*/
public void setSocketLinger(int socketLinger) {
this.socketLinger = socketLinger;
}
/**
* Returns linger time in seconds. If SO_LINGER is disabled time will be negative;
* @see #setSocketLinger
*/
public int getSocketLinger() {
return socketLinger;
}
/**
* Sets the DebugNonBlockingMode flag.
* If not set, it will use <code>false</code><br/>
* XML Tag: <debug-non-blocking-mode>false</debug-non-blocking-mode>
* @param debugNonBlockingMode DebugNonBlockingMode flag.
* @see #getDebugNonBlockingMode
*/
public void setDebugNonBlockingMode(boolean debugNonBlockingMode) {
this.debugNonBlockingMode = debugNonBlockingMode;
}
/**
* Returns DebugNonBlockingMode flag.
* @see #setDebugNonBlockingMode
*/
public boolean getDebugNonBlockingMode() {
return debugNonBlockingMode;
}
/**
* Sets the ClientIdentifier class that implements
* {@link org.quickserver.net.server.ClientIdentifier}.
* XML Tag: <client-identifier>org.quickserver.net.server.impl.TryClientIdentifier</client-identifier>
* @param clientIdentifierClass the fully qualified name of the class that
* implements {@link org.quickserver.net.server.ClientIdentifier}.
* @see #getClientIdentifier
*/
public void setClientIdentifier(String clientIdentifierClass) {
if(clientIdentifierClass==null || clientIdentifierClass.trim().length()==0)
return;
this.clientIdentifierClass = clientIdentifierClass;
}
/**
* Returns the ClientIdentifier class that that implements
* {@link org.quickserver.net.server.ClientIdentifier}.
* @see #setClientIdentifier
*/
public String getClientIdentifier() {
return clientIdentifierClass;
}
/**
* Sets the QSObjectPoolMaker class that implements
* {@link org.quickserver.util.pool.QSObjectPoolMaker}.
* XML Tag: <qsobject-pool-maker>org.quickserver.util.pool.MakeQSObjectPool</qsobject-pool-maker>
* @param qSObjectPoolMakerClass the fully qualified name of the class that
* implements {@link org.quickserver.util.pool.QSObjectPoolMaker}.
* @see #getQSObjectPoolMaker
*/
public void setQSObjectPoolMaker(String qSObjectPoolMakerClass) {
this.qSObjectPoolMakerClass = qSObjectPoolMakerClass;
}
/**
* Returns the QSObjectPoolMaker class that implements
* {@link org.quickserver.util.pool.QSObjectPoolMaker}.
* @see #setQSObjectPoolMaker
*/
public String getQSObjectPoolMaker() {
if(qSObjectPoolMakerClass==null)
qSObjectPoolMakerClass = "org.quickserver.util.pool.MakeQSObjectPool";
return qSObjectPoolMakerClass;
}
/**
* Sets the maximum threads allowed for nio write. If set to 0 or less no limit is
* imposed.
* XML Tag: <max-threads-for-nio-write>10</max-threads-for-nio-write>
* @param maxThreadsForNioWrite maximum threads allowed for nio write
* @see #getMaxThreadsForNioWrite
* @since 1.4.6
*/
public void setMaxThreadsForNioWrite(int maxThreadsForNioWrite) {
this.maxThreadsForNioWrite = maxThreadsForNioWrite;
}
/**
* Returns the maximum threads allowed for nio write.
* @see #setMaxThreadsForNioWrite
* @since 1.4.6
*/
public int getMaxThreadsForNioWrite() {
return maxThreadsForNioWrite;
}
/**
* Returns XML config of this class.
*/
public String toXML(String pad) {
if(pad==null) pad="";
StringBuilder sb = new StringBuilder();
sb.append(pad).append("<advanced-settings>\n");
sb.append(pad+"\t<charset>").append(getCharset()).append("</charset>\n");
sb.append(pad).append("\t<use-direct-byte-buffer>").append(
getUseDirectByteBuffer()).append("</use-direct-byte-buffer>\n");
sb.append(pad).append("\t<byte-buffer-size>").append(getByteBufferSize()
).append("</byte-buffer-size>\n");
sb.append(pad).append("\t<backlog>").append(getBacklog()).append("</backlog>\n");
sb.append(pad).append("\t<socket-linger>").append(getSocketLinger()).append("</socket-linger>\n");
sb.append(pad).append("\t<debug-non-blocking-mode>").append(
getDebugNonBlockingMode()).append("</debug-non-blocking-mode>\n");
sb.append(pad).append("\t<client-identifier>").append(
getClientIdentifier()).append("</client-identifier>\n");
sb.append(pad).append("\t<qsobject-pool-maker>").append(
getQSObjectPoolMaker()).append("</qsobject-pool-maker>\n");
sb.append(pad).append("\t<max-threads-for-nio-write>").append(
getMaxThreadsForNioWrite()).append("</max-threads-for-nio-write>\n");
sb.append(pad).append("</advanced-settings>\n");
return sb.toString();
}
}