/*
* This file is part of Mockey, a tool for testing application
* interactions over HTTP, with a focus on testing web services,
* specifically web applications that consume XML, JSON, and HTML.
*
* Copyright (C) 2009-2010 Authors:
*
* chad.lafontaine (chad.lafontaine AT gmail DOT com)
* neil.cronin (neil AT rackle DOT com)
* lorin.kobashigawa (lkb AT kgawa DOT com)
* rob.meyer (rob AT bigdis DOT com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
package com.mockey.server;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.collections.iterators.IteratorEnumeration;
public class RedoRequestWrapper extends HttpServletRequestWrapper {
private String body = "";
private Map parameterMap = new HashMap();
private Map headerMap = new HashMap();
private String contentType = "";
private String requestURI = "";
public RedoRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getParameter(String name) {
Object object = this.parameterMap.get(name);
if (object != null) {
return object.toString();
} else {
return null;
}
}
public String getHeader(String name){
Object arg = this.headerMap.get(name);
if(arg!=null){
return arg.toString();
}else {
return null;
}
}
public Enumeration getHeaderNames(){
return new IteratorEnumeration(headerMap.keySet().iterator());
}
public Enumeration getHeaders(String name){
Object object = this.headerMap.get(name);
if(object==null){
return null;
}else if(object instanceof String[]){
List<String> array = new ArrayList<String>();
String[] g = (String[]) object;
for (int i = 0; i < g.length; i++) {
array.add(g[i]);
}
return new IteratorEnumeration(array.iterator());
} else {
List<String> list = new ArrayList<String>();
list.add((String)object);
return new IteratorEnumeration(list.iterator());
}
}
public void addHeader(String name, String value){
Object object = this.headerMap.get(name);
if (object == null) {
this.headerMap.put(name, value);
} else if (object instanceof String[]) {
List<String> array = new ArrayList<String>();
String[] g = (String[]) object;
for (int i = 0; i < g.length; i++) {
array.add(g[i]);
}
array.add(value);
this.headerMap.put(name, array.toArray(new String[array.size()]));
}
}
public Map getParameterMap() {
return this.parameterMap;
}
public Enumeration getParameterNames() {
return new IteratorEnumeration(parameterMap.keySet().iterator());
}
public String getRequestURI(){
return requestURI;
}
public void setRequestURI(String requestURI){
this.requestURI = requestURI;
}
public void addParameter(String name, String value) {
List<String> array = new ArrayList<String>();
String[] objectArray = (String[])this.parameterMap.get(name);
if (objectArray != null) {
String[] g = (String[]) objectArray;
for (int i = 0; i < g.length; i++) {
array.add(g[i]);
}
}
array.add(value);
this.parameterMap.put(name, array.toArray(new String[array.size()]));
}
public void setBody(String body) {
this.body = body;
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
ServletInputStream servletInputStream = new ServletInputStream() {
public int read() throws IOException {
return byteArrayInputStream.read();
}
};
return servletInputStream;
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
}