package de.tud.kom.socom.facebook.request;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class FBRequestBuilder {
class ParameterValue<T> {
private T value;
private ParameterValue(T value){
this.value = value;
}
T getValue() {
return this.value;
}
}
public enum RequestMethod {
GET, POST, DELETE //to be continued if necessary
}
private Map<String, ParameterValue<?>> params;
private String requestUrl;
private RequestMethod httpmethod;
private FBRequestBuilder(){
params = new HashMap<String, ParameterValue<?>>();
httpmethod = RequestMethod.GET;
}
/**
* create a request which can be sent through the HTTPExecutor
* @return request object or null if requestUrl is missing (empty) or requestmethod was null
*/
public FBRequest build() {
if(requestUrl == null || requestUrl.isEmpty())
return null;
FBRequest req = null;
switch(this.httpmethod) {
case GET:
req = new FBGetRequest(requestUrl, params);
break;
case POST:
req = new FBPostRequest(requestUrl, params);
break;
case DELETE:
req = new FBDeleteRequest(requestUrl, params);
break;
default:
break;
}
return req;
}
/**
* create a builder
*/
public static FBRequestBuilder create() {
return new FBRequestBuilder();
}
/**
* request url following https://graph.facebook.com/
* e.g. "me/photos"
*/
public FBRequestBuilder setRequestUrl(String subUrl) {
if(subUrl != null && subUrl.length() > 0 && subUrl.startsWith("/"))
subUrl = subUrl.substring(1);
this.requestUrl = subUrl;
return this;
}
/**
* set string parameter
*/
public FBRequestBuilder setParameter(String key, String param) {
params.put(key, new ParameterValue<String>(param));
return this;
}
/**
* set file parameter
*/
public FBRequestBuilder setParameter(String key, File file) {
params.put(key, new ParameterValue<File>(file));
return this;
}
/**
* set stream parameter
*/
public FBRequestBuilder setParameter(String key, InputStream is) {
params.put(key, new ParameterValue<InputStream>(is));
return this;
}
/**
* set byte array parameter
*/
public FBRequestBuilder setParameter(String key, byte[] bytes) {
params.put(key, new ParameterValue<byte[]>(bytes));
return this;
}
/**
* set the mode: get, post or delete something, further may come
*/
public FBRequestBuilder setMode(RequestMethod mode){
this.httpmethod = mode;
return this;
}
}