package com.nifty.cloud.ncs;

/**
 * ニフクラサービス内で発生する例外クラスです。
 *
 */
public class NiftyCloudServiceException extends NiftyCloudClientException
{
	private static final long serialVersionUID = 9127530907233070946L;
	private static final String SERVICE_ERROR = "Service";
	private static final String CLIENT_ERROR = "Client";

	/* 要求ID */
	private String requestId;

	/* サービス名 */
	private String serviceName;

	/* エラーコード */
	private String errorCode;

	/* HTTPステータスコード */
	private int statusCode;

	/**
	 * 指定したメッセージを使用して新しいNiftyCloudServiceExceptionを生成します。
	 *
	 * @param message
	 *  例外発生理由
	 */
	public NiftyCloudServiceException(String message)
	{
		super(message);
	}

	/**
	 * 指定したメッセージ、および例外の原因を使用して新しいNiftyCloudServiceExceptionを生成します。
	 *
	 * @param message
	 *  例外発生理由
	 *
	 * @param cause
	 *  NiftyCloudServiceExceptionを発生させる原因となった例外
	 */
	public NiftyCloudServiceException(String message, Exception cause)
	{
		super(message, cause);
	}

	/**
	 * 要求IDを設定します。
	 *
	 * @param requestId
	 *  要求ID
	 */
	public void setRequestId(String requestId)
	{
		this.requestId = requestId;
	}

	/**
	 * 要求IDを取得します。
	 *
	 * @return
	 *  要求ID
	 */
	public String getRequestId()
	{
		return (this.requestId);
	}

	/**
	 * サービス名を設定します。
	 *
	 * @param serviceName
	 *  サービス名
	 */
	public void setServiceName(String serviceName)
	{
		this.serviceName = serviceName;
	}

	/**
	 * サービス名を取得します。
	 *
	 * @return
	 *  サービス名
	 */
	public String getServiceName()
	{
		return (this.serviceName);
	}

	/**
	 * エラーコードを設定します。
	 *
	 * @param errorCode
	 *  エラーコード
	 */
	public void setErrorCode(String errorCode)
	{
		this.errorCode = errorCode;
	}

	/**
	 * エラーコードを取得します。
	 *
	 * @return
	 *  エラーコード
	 */
	public String getErrorCode()
	{
		return (this.errorCode);
	}

	/**
	 * HTTPステータスコードを設定します。
	 *
	 * @param statusCode
	 *  HTTPステータスコード
	 */
	public void setStatusCode(int statusCode)
	{
		this.statusCode = statusCode;
	}

	/**
	 * HTTPステータスコードを取得します。
	 *
	 * @return
	 *  HTTPステータスコード
	 */
	public int getStatusCode()
	{
		return (this.statusCode);
	}

	/**
	 * エラー種別を取得します。
	 *
	 * @return
	 *  エラー種別(サービス、またはクライアント)
	 */
	public String getErrorType()
	{
		if (statusCode >= 500) {
			return (SERVICE_ERROR);
		}
		return (CLIENT_ERROR);
	}
}
