package thredds.mock.web.ncss;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.springframework.mock.web.MockHttpServletRequest;
/**
*
* Builds query strings for the ncss test request
*
* @author mhermida
*
*/
public class NcssMockHttpServletRequest {
//private StringBuilder sb;
private MockHttpServletRequest request;
private NcssMockHttpServletRequest( MockHttpServletRequest request){
this.request = request;
}
public static NcssMockHttpServletRequestBuilder createBuilder(){
return new NcssMockHttpServletRequestBuilder();
}
public MockHttpServletRequest getRequest(){
return this.request;
}
public static class NcssMockHttpServletRequestBuilder{
private final NcssMockHttpServletRequest ncssQueryString= new NcssMockHttpServletRequest( new MockHttpServletRequest());
private boolean done;
private NcssMockHttpServletRequestBuilder(){}
public NcssMockHttpServletRequest build(){
done = true;
List<String> attNames = Collections.list(ncssQueryString.getRequest().getParameterNames() );
Iterator<String> it = attNames.iterator();
StringBuilder sb = new StringBuilder();
while( it.hasNext() ){
String paramName = it.next();
sb.append( paramName+"="+ncssQueryString.getRequest().getParameter(paramName) );
if( it.hasNext() ) sb.append("&");
}
ncssQueryString.getRequest().setQueryString(sb.toString() );
return ncssQueryString;
}
public NcssMockHttpServletRequestBuilder setRequestMethod(String method){
check();
ncssQueryString.getRequest().setMethod(method);
return this;
}
public NcssMockHttpServletRequestBuilder setRequestURI(String uri){
check();
ncssQueryString.getRequest().setRequestURI(uri);
return this;
}
public NcssMockHttpServletRequestBuilder setContextPath(String contextPath){
check();
ncssQueryString.getRequest().setContextPath(contextPath);
return this;
}
public NcssMockHttpServletRequestBuilder setPathInfo(String pathInfo){
check();
ncssQueryString.getRequest().setPathInfo(pathInfo);
return this;
}
/*
* bunch of methods to set parameters in the mock request.
* We don't care if they are valid values or not, servlet or controller will validate them
*
*/
public NcssMockHttpServletRequestBuilder setVar(String vars){
check();
ncssQueryString.getRequest().setParameter("var", vars);
return this;
}
public NcssMockHttpServletRequestBuilder setLatitude(String latitude){
check();
ncssQueryString.getRequest().setParameter("latitude", latitude);
return this;
}
public NcssMockHttpServletRequestBuilder setLongitude(String longitude){
check();
ncssQueryString.getRequest().setParameter("longitude", longitude);
return this;
}
public NcssMockHttpServletRequestBuilder setTimeStart(String time_start){
check();
ncssQueryString.getRequest().setParameter("time_start", time_start);
return this;
}
public NcssMockHttpServletRequestBuilder setTimeEnd(String time_end){
check();
ncssQueryString.getRequest().setParameter("time_end", time_end);
return this;
}
public NcssMockHttpServletRequestBuilder setTemporal(String temporal){
check();
ncssQueryString.getRequest().setParameter("temporal", temporal);
return this;
}
public NcssMockHttpServletRequestBuilder setTime(String time){
check();
ncssQueryString.getRequest().setParameter("time", time);
return this;
}
public NcssMockHttpServletRequestBuilder setTimeDuration(String time_duration){
check();
ncssQueryString.getRequest().setParameter("time_duration", time_duration);
return this;
}
public NcssMockHttpServletRequestBuilder setVertCoord(String vertCoord){
check();
ncssQueryString.getRequest().setParameter("vertCoord", vertCoord);
return this;
}
public NcssMockHttpServletRequestBuilder setAccept(String accept){
check();
ncssQueryString.getRequest().setParameter("accept", accept);
return this;
}
public NcssMockHttpServletRequestBuilder setPoint(String point){
check();
ncssQueryString.getRequest().setParameter("point", point);
return this;
}
private void check(){
if(done)
throw new IllegalStateException("Response object was already built");
}
}
}