/**
 * A bare-bones implementation of the HttpServletRequest interface 
 * for use in JUnit test cases of the servlet code. Follows the 
 * NullObject pattern for any other methods.
 * 
 * @author Paul Gordon
 */

package org.biomoby.service.test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;

// Parts of the HttpServletRequest interface are deprecated, but must be implemented to get this class to compile
@SuppressWarnings("deprecation")
public class TestHttpServletRequest implements HttpServletRequest{

    private Map headers = new LinkedHashMap();
    private Map parameters = new LinkedHashMap();
    private ServletInputStream servletInputStream = null;
    private StringBuffer urlStringBuffer = new StringBuffer();

    public int getLocalPort() {
	return 80;
    }    
    public int getRemotePort() {
	return 80;
    }    
    
    public void setParameter(String key, String value) {
	parameters.put(key, value);
    }
    
    public String getParameter(String key)	{
	return (String)this.parameters.get(key);
    }
    
    public Enumeration getParameterNames(){
	return (new Vector(this.parameters.keySet())).elements();
    }
    
    public ServletInputStream getInputStream() throws IOException{
	return servletInputStream;
    }
    
    public void setInputStream(InputStream is){
	final InputStream sis = is;
	servletInputStream = new ServletInputStream(){
		public int read() throws IOException{
		    return sis.read();
		}
	    };
    }

    public void setInputStream(ServletInputStream sis){
	servletInputStream = sis;
    }
    
    public StringBuffer getRequestURL(){
	return urlStringBuffer;
    }
    
    public void setRequestURL(String url){
	urlStringBuffer = new StringBuffer(url == null ? "" : url);
    }

    public Enumeration getHeaders(String name){
	Object obj = headers.get(name);
	if(obj != null){
	    obj = ((Vector) obj).elements();
	}
	return (Enumeration) obj;	
    }

    public Enumeration getHeaderNames(){
	return (new Vector(headers.keySet())).elements();
    }

    public String getHeader(String name){
	Object obj = headers.get(name);
	if(obj != null){
	    obj = ((Vector) obj).elementAt(0);
	}
	return (String) obj;
    }

    public void addHeader(String name, String value){
	if(name == null || value == null){
	    return;
	}
	Object obj = headers.get(name);
	if(obj == null){
	    obj = new Vector();
	    headers.put(name, obj);
	}
	((Vector) obj).add(value);
    }

    public Locale getLocale(){return Locale.getDefault();}
    public void setCharacterEncoding(String env) throws UnsupportedEncodingException{}
    public Map getParameterMap(){return null;}
    public void removeAttribute(String name){}
    public int getIntHeader(String name){return 0;}
    public long getDateHeader(String name){return 0;}
    public Enumeration getLocales(){return null;}
    public boolean isSecure(){return false;} 
    public RequestDispatcher getRequestDispatcher(String path){return null;}
    public String getContextPath(){return null;}
    public boolean isUserInRole(java.lang.String role){return false;}
    public java.security.Principal getUserPrincipal(){return null;}
    public Cookie[] getCookies() {return null;}
    public String getMethod(){return null;}
    public String getRequestURI(){return null;}
    public String getServletPath(){return null;}
    public String getPathInfo(){return null;}
    public String getPathTranslated(){return null;}
    public String getQueryString(){return null;}
    public String getRemoteUser(){return null;}
    public String getAuthType(){return null;}
    public HttpSession getSession(boolean create){return null;}
    public String getRequestedSessionId(){return null;}
    public boolean isRequestedSessionIdValid(){return false;}
    public boolean isRequestedSessionIdFromCookie(){return false;}
    public boolean isRequestedSessionIdFromUrl(){return false;}
    public int getContentLength(){return 0;}
    public String getContentType(){return null;}
    public String getProtocol(){return null;}
    public String getScheme(){return null;}
    public String getServerName(){return null;}
    public int getServerPort(){return 0;}
    public String getRemoteAddr(){return null;}
    public String getRemoteHost(){return null;}
    public String getRealPath(String path){return null;}
    public String[] getParameterValues(String name){return null;}
    public Enumeration getAttributeNames(){return null;}
    public Object getAttribute(String name){return null;}
    public HttpSession getSession(){return null;}
    public BufferedReader getReader() throws IOException{return null;}
    public String getCharacterEncoding(){return null;}
    public void setAttribute(String name, Object o) {}
    public boolean isRequestedSessionIdFromURL() {return false;}
    public String getLocalAddr(){return null;}
    public String getLocalName(){return null;}
}
