/* DConnectServerConfig.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.server; import java.util.List; /** * サーバーの設定情報. * * @author NTT DOCOMO, INC. */ public final class DConnectServerConfig { // サーバーの設定値は起動後などに変更されるのを防ぐためBuilderでパラメータを設定させ // setterは本体には置かない。 /** 最大コネクション数. */ private int mMaxConnectionSize; /** WebSocket最大コネクション数. */ private int mMaxWebSocketConnectionSize; /** ドキュメントルートのパス. */ private String mDocumentRootPath; /** SSLを使うかのフラグ. */ private boolean mIsSsl; /** サーバーのポート番号. */ private int mPort; /** サーバーのホスト名. */ private String mHost; /** IPのホワイトリスト. */ private List<String> mIpWhiteList; /** ファイルなどのキャッシュをおくフォルダへのパス. */ private String mCachePath; /** 文字コード. */ private String mCharset = "UTF-8"; /** * 最大コネクション数を取得する. * * @return 最大コネクション数 */ public int getMaxConnectionSize() { return mMaxConnectionSize; } /** * WebSocketの最大コネクション数を取得する. * * @return WebSocketの最大コネクション数。 */ public int getMaxWebSocketConnectionSize() { return mMaxWebSocketConnectionSize; } /** * ドキュメントルートのパスを取得する. * * @return ドキュメントルートのパス */ public String getDocumentRootPath() { return mDocumentRootPath; } /** * キャッシュ置き場へのパスを取得する. * @return キャッシュ置き場へのパス */ public String getCachePath() { return mCachePath; } /** * ポート番号を取得する. * * @return ポート番号 */ public int getPort() { return mPort; } /** * ホスト名を取得する. * * @return ホスト名 */ public String getHost() { return mHost; } /** * SSL通信を行うかをチェックする. * * @return SSL通信をする場合true、しない場合はfalseを返す。 */ public boolean isSsl() { return mIsSsl; } /** * 文字コードを取得する. * @return 文字コード */ public String getCharset() { return mCharset; } /** * IPのホワイトリストを取得する. * * @return IPのホワイトリスト。 */ public List<String> getIPWhiteList() { return mIpWhiteList; } /** * コンストラクタ. * * @param builder ビルダー。 */ private DConnectServerConfig(final Builder builder) { // Builderを用いるためprivateに設定。 this.mDocumentRootPath = builder.mDocumentRootPath; this.mMaxConnectionSize = builder.mMaxConnectionSize; this.mMaxWebSocketConnectionSize = builder.mMaxWebSocketConnectionSize; this.mIsSsl = builder.mIsSsl; this.mPort = builder.mPort; this.mHost = builder.mHost; this.mCachePath = builder.mCachePath; this.mIpWhiteList = builder.mIpWhiteList; this.mCharset = builder.mCharset; } /** * DConnectServerConfigのビルダークラス. * * @author NTT DOCOMO, INC. * */ public static final class Builder { /** 最大コネクション数. */ private int mMaxConnectionSize = 64; /** WebSocket最大コネクション数. */ private int mMaxWebSocketConnectionSize = 32; /** ドキュメントルートのパス. */ private String mDocumentRootPath; /** ファイルなどのキャッシュをおくフォルダへのパス. */ private String mCachePath; /** SSLを使うかのフラグ. */ private boolean mIsSsl; /** サーバーのポート番号. */ private int mPort = -1; /** サーバーのホスト名. */ private String mHost; /** IPのホワイトリスト. */ private List<String> mIpWhiteList; /** 文字コード. */ private String mCharset = "UTF-8"; /** * DConnectServerConfigのインスタンスを設定された設定値で生成する. * * @return DConnectServerConfigのインスタンス。 */ public DConnectServerConfig build() { if (mDocumentRootPath == null) { throw new IllegalStateException("Document root must be not null."); } else if (mPort < 0) { throw new IllegalStateException("Port must be larger than 0."); } return new DConnectServerConfig(this); } /** * 最大コネクション数を設定する. * * @param maxConnectionSize 最大コネクション数。1以上を指定すること。 * * @return ビルダー。 */ public Builder maxConnectionSize(final int maxConnectionSize) { if (maxConnectionSize <= 0) { throw new IllegalArgumentException("MaxConnectionSize must be larger than 0."); } this.mMaxConnectionSize = maxConnectionSize; return this; } /** * WebSocketの最大コネクション数を設定する. * * @param maxWebSocketConnectionSize WebSocketの最大コネクション数。1以上に設定すること。 * * @return ビルダー */ public Builder maxWebSocketConnectionSize(final int maxWebSocketConnectionSize) { if (maxWebSocketConnectionSize <= 0) { throw new IllegalArgumentException("MaxWebSocketConnectionSize must be larger than 0."); } this.mMaxWebSocketConnectionSize = maxWebSocketConnectionSize; return this; } /** * SSLの利用設定を行う. * * @param isSsl trueの場合SSL通信を行う。falseの場合はSSL通信を行わない。 * @return ビルダー。 */ public Builder isSsl(final boolean isSsl) { this.mIsSsl = isSsl; return this; } /** * ポートを設定する. * * @param port サーバーのポート番号。 * @return ビルダー */ public Builder port(final int port) { if (port < 0) { throw new IllegalArgumentException("Port must be larger than 0."); } this.mPort = port; return this; } /** * ホスト名を設定する. * * @param host ホスト名。 * @return ビルダー。 */ public Builder host(final String host) { this.mHost = host; return this; } /** * ドキュメントルートのパスを設定する. * * @param documentRootPath ドキュメントルートのパス。 * @return ビルダー。 */ public Builder documentRootPath(final String documentRootPath) { if (documentRootPath == null) { throw new IllegalArgumentException("Document root must be not null."); } this.mDocumentRootPath = documentRootPath; return this; } /** * 一時的なキャッシュ置き場へのパスを設定する. * @param cachePath キャッシュ置き場へのパス * @return ビルダー。 */ public Builder cachePath(final String cachePath) { if (cachePath == null) { throw new IllegalArgumentException("cachePath root must be not null."); } mCachePath = cachePath; return this; } /** * IPのホワイトリストを設定する. * <p> * 空のリストが設定された場合には、ホワイトリストは無視します。 * </p> * @param ipWhiteList IPのホワイトリスト。 * @return ビルダー。 */ public Builder ipWhiteList(final List<String> ipWhiteList) { this.mIpWhiteList = ipWhiteList; return this; } /** * 文字コードを設定する. * <p> * デフォルトでは、UTF-8が設定してあります。 * </p> * @param charset 文字コード * @return ビルダー。 */ public Builder charset(final String charset) { mCharset = charset; return this; } } }