/*
 * Copyright 2004-2015 the Seasar Foundation and the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package org.seasar.framework.mock.servlet;

import java.util.Locale;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/**
 * モック用の{@link HttpServletRequest}のインターフェースです。
 * 
 * @author Satoshi Kimura
 */
public interface MockHttpServletRequest extends HttpServletRequest {

    /**
     * コンテンツを設定します。
     * 
     * @param content
     */
    void setContent(byte[] content);

    /**
     * パラメータを追加します。
     * 
     * @param name
     * @param value
     */
    void addParameter(String name, String value);

    /**
     * 配列のパラメータを追加します。
     * 
     * @param name
     * @param values
     */
    void addParameter(String name, String[] values);

    /**
     * {@link Cookie}を追加します。
     * 
     * @param cookie
     */
    void addCookie(Cookie cookie);

    /**
     * ヘッダを追加します。
     * 
     * @param name
     * @param value
     */
    void addHeader(String name, String value);

    /**
     * <code>authType</code>を設定します。
     * 
     * @param authType
     */
    void setAuthType(String authType);

    /**
     * 日付のヘッダーを追加します。
     * 
     * @param name
     * @param value
     */
    void addDateHeader(String name, long value);

    /**
     * <code>int</code>のヘッダを追加します。
     * 
     * @param name
     * @param value
     */
    void addIntHeader(String name, int value);

    /**
     * <code>pathInfo</code>を設定します。
     * 
     * @param pathInfo
     */
    void setPathInfo(String pathInfo);

    /**
     * <code>pathTranslated</code>を設定します。
     * 
     * @param pathTranslated
     */
    void setPathTranslated(String pathTranslated);

    /**
     * <code>queryString</code>を設定します。
     * 
     * @param queryString
     */
    void setQueryString(String queryString);

    /**
     * <code>contentLength</code>を設定します。
     * 
     * @param contentLength
     */
    void setContentLength(int contentLength);

    /**
     * <code>contentType</code>を設定します。
     * 
     * @param contentType
     */
    void setContentType(String contentType);

    /**
     * パラメータを設定します。
     * 
     * @param name
     * @param value
     */
    void setParameter(String name, String value);

    /**
     * 配列のパラメータを設定します。
     * 
     * @param name
     * @param values
     */
    void setParameter(String name, String[] values);

    /**
     * プロトコルを設定します。
     * 
     * @param protocol
     */
    void setProtocol(String protocol);

    /**
     * <code>scheme</code>を設定します。
     * 
     * @param scheme
     */
    void setScheme(String scheme);

    /**
     * サーバ名を設定します。
     * 
     * @param serverName
     */
    void setServerName(String serverName);

    /**
     * サーバの<code>port</code>を設定します。
     * 
     * @param serverPort
     */
    void setServerPort(int serverPort);

    /**
     * リモートアドレスを設定します。
     * 
     * @param remoteAddr
     */
    void setRemoteAddr(String remoteAddr);

    /**
     * リモートホストを設定します。
     * 
     * @param remoteHost
     */
    void setRemoteHost(String remoteHost);

    /**
     * {@link Locale}を設定します。
     * 
     * @param locale
     */
    void setLocale(Locale locale);

    /**
     * メソッドを設定します。
     * 
     * @param method
     */
    void setMethod(String method);

    /**
     * ローカルアドレスを設定します。
     * 
     * @param localAddr
     */
    void setLocalAddr(String localAddr);

    /**
     * ローカル名を設定します。
     * 
     * @param localName
     */
    void setLocalName(String localName);

    /**
     * ローカル<code>port</code>を設定します。
     * 
     * @param localPort
     */
    void setLocalPort(int localPort);

    /**
     * リモート<code>port</code>を設定します。
     * 
     * @param remotePort
     */
    void setRemotePort(int remotePort);
}