package com.baasbox.controllers;
import java.util.HashMap;
import java.util.Map;
import play.mvc.Http;
public class BodyHelper {
/*
* Derived from:
* @see https://github.com/playframework/playframework/blob/02e05755753407bc238da6f57f551fa455d820cb/framework/src/play-java/src/main/java/play/data/Form.java#L198
* We deleted the querystring concatenation in the resulting hashmap
*/
public static Map<String,String> requestData(Http.Request request) {
Map<String,String[]> urlFormEncoded = new HashMap<String,String[]>();
if(request.body().asFormUrlEncoded() != null) {
urlFormEncoded = request.body().asFormUrlEncoded();
}
Map<String,String[]> multipartFormData = new HashMap<String,String[]>();
if(request.body().asMultipartFormData() != null) {
multipartFormData = request.body().asMultipartFormData().asFormUrlEncoded();
}
Map<String,String> jsonData = new HashMap<String,String>();
if(request.body().asJson() != null) {
jsonData = play.libs.Scala.asJava(
play.api.data.FormUtils.fromJson("",
play.api.libs.json.Json.parse(
play.libs.Json.stringify(request.body().asJson())
)
)
);
}
Map<String,String> data = new HashMap<String,String>();
for(String key: urlFormEncoded.keySet()) {
String[] values = urlFormEncoded.get(key);
if(key.endsWith("[]")) {
String k = key.substring(0, key.length() - 2);
for(int i=0; i<values.length; i++) {
data.put(k + "[" + i + "]", values[i]);
}
} else {
if(values.length > 0) {
data.put(key, values[0]);
}
}
}
for(String key: multipartFormData.keySet()) {
String[] values = multipartFormData.get(key);
if(key.endsWith("[]")) {
String k = key.substring(0, key.length() - 2);
for(int i=0; i<values.length; i++) {
data.put(k + "[" + i + "]", values[i]);
}
} else {
if(values.length > 0) {
data.put(key, values[0]);
}
}
}
for(String key: jsonData.keySet()) {
data.put(key, jsonData.get(key));
}
return data;
}
}