package com.nifty.cloud.ncs.http;

import java.io.InputStream;
import java.util.HashMap;

/**
 * HTTP応答情報を保持するクラスです。
 *
 */
public class HttpResponse
{
	private int statusCode;
	private String statusMessage;
	private InputStream content;
	private HashMap<String, String> headers = new HashMap<String, String>();
	private String httpMethod;

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

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

	/**
	 * HTTPステータス文字列を設定します。
	 *
	 * @param message
	 *  HTTPステータス文字列
	 *
	 */
	public void setStatusMessage(String message)
	{
		this.statusMessage = message;
	}

	/**
	 * HTTPステータス文字列を取得します。
	 *
	 * @return
	 *  HTTPステータス文字列
	 */
	public String getStatusMessage()
	{
		return (statusMessage);
	}

	/**
	 * 指定した入力ストリームを応答ボディに設定します。
	 *
	 * @param content
	 *  応答内容を含む入力ストリーム
	 *
	 */
	public void setContent(InputStream content)
	{
		this.content = content;
	}

	/**
	 * 応答ボディを入力ストリームとして取得します。
	 *
	 * @return
	 *  応答内容を含む入力ストリーム
	 */
	public InputStream getContent()
	{
		return (content);
	}

	/**
	 * HTTP応答ヘッダを追加します。
	 *
	 * @param key
	 *  応答ヘッダのkey
	 * @param value
	 *  応答ヘッダのvalue
	 */
	public void addHeader(String key, String value)
	{
		headers.put(key, value);
	}

	/**
	 * 指定したkeyに紐付く応答ヘッダのvalueを取得します。
	 *
	 * @param key
	 *  応答ヘッダのkey
	 * @return
	 *  指定したkeyに紐付く応答ヘッダのvalue
	 */
	public String getHeader(String key)
	{
		return (headers.get(key));
	}

	/**
	 * 応答ヘッダのマップを取得します。
	 *
	 * @return
	 *  応答ヘッダのマップ
	 */
	public HashMap<String, String> getHeaders()
	{
		return (headers);
	}

	/**
	 * HTTPメソッドを設定します。
	 *
	 * @param httpMethod
	 * 	HTTPメソッド
	 */
	public void setHttpMethod(String httpMethod)
	{
		this.httpMethod = httpMethod;
	}

	/**
	 * HTTPメソッドを取得します。
	 *
	 * @return
	 *  HTTPメソッド
	 */
	public String getHttpMethod()
	{
		return (httpMethod);
	}

	@Override
	public String toString()
	{
		StringBuffer sb = new StringBuffer(2048);

		if (headers.isEmpty() == false) {
			sb.append("Headers: (");
			for (String key : headers.keySet()) {
				sb.append(key).append(": ");
				sb.append(headers.get(key)).append(", ");
			}
			sb.append(")\n");
		}

		return (sb.toString());
	}
}
