package com.baasbox.service.webservices;
import com.baasbox.BBConfiguration;
import com.baasbox.service.logging.BaasBoxLogger;
import com.fasterxml.jackson.databind.JsonNode;
import play.libs.F;
import play.libs.WS;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* Created by eto on 08/10/14.
*/
public class HttpClientService {
@Deprecated
public static WS.Response callSync(String url,String method,Map<String,List<String>> params,Map<String,List<String>> headers,Object body) throws Exception{
try {
return callSync(url, method, params, headers, body, BBConfiguration.configuration.getInt("ws.timeout.request"));
} catch (Exception e){
throw e;
}
}
public static WS.Response callSync(String url,String method,Map<String,List<String>> params,Map<String,List<String>> headers,Object body, int timeoutInMilliseconds) throws Exception{
try {
return call(url, method, params, headers, (Object) body,timeoutInMilliseconds).get(timeoutInMilliseconds, TimeUnit.MILLISECONDS);
} catch (Exception e){
throw e;
}
}
public static F.Promise<WS.Response> call(String url,String method,Map<String,List<String>> params,Map<String,List<String>> headers,Object body,int timeout){
WS.WSRequestHolder req = WS.url(url);
req.setTimeout(timeout);
appendParams(req,headers, WS.WSRequestHolder::setHeader);
appendParams(req,params,WS.WSRequestHolder::setQueryParameter);
switch (method.toLowerCase()){
case "get": return req.get();
case "delete": return req.delete();
case "post":
return body instanceof JsonNode?req.post((JsonNode)body):req.post((String)body);
case "put":
return body instanceof JsonNode?req.put((JsonNode)body):req.put((String)body);
default:
return req.execute(method);
}
}
private interface Append{
public void append(WS.WSRequestHolder req,String v,String p);
}
private static void appendParams(WS.WSRequestHolder ws,Map<String,List<String>> params,Append appender){
if (params!=null){
params.forEach((k,vals)->{
if (vals!=null){
vals.forEach((val)->{
if (val!=null){
appender.append(ws, k, val);
}
});
}
});
}
}
}