blob: cd85bb0e4111f832bad4a42c3c50b6cb4a0ec0f3 [file] [log] [blame]
package de.ids_mannheim.korap.web.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.ws.rs.core.MultivaluedMap;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* Helper class to wrapp multivaluedmap into a hashmap. Depending on
* the strict parameter,
* list values are retained in the resulting wrapper map.
*
* @author hanl
* @date 25/04/2015
*/
public class FormRequestWrapper extends HttpServletRequestWrapper {
private MultivaluedMap<String, Object> form;
/**
* Constructs a request object wrapping the given request.
*
* @param request
* @throws IllegalArgumentException
* if the request is null
*/
public FormRequestWrapper (HttpServletRequest request,
MultivaluedMap<String, Object> form) {
super(request);
this.form = form;
}
@Override
public String getParameter (String name) {
String value = super.getParameter(name);
if (value == null)
value = String.valueOf(form.getFirst(name));
return value;
}
@Override
public String[] getParameterValues (String name) {
String[] values = super.getParameterValues(name);
if (values == null && form.get(name) != null) {
values = new String[form.get(name).size()];
values = form.get(name).toArray(values);
}
return values;
}
public Map<String, Object> singleValueMap () {
return toMap(this.form, false);
}
/**
* @param strict
* returns only values with size equal to one. If false
* pairs key to first value
* in value list and returns the result
* @return key/value map
*/
public static Map<String, Object> toMap (
MultivaluedMap<String, Object> form, boolean strict) {
if (form == null)
return null;
HashMap<String, Object> map = new HashMap<>();
for (String key : form.keySet()) {
if (strict && form.get(key).size() > 1)
continue;
map.put(key, form.getFirst(key));
}
return map;
}
public void put (String key, String value) {
this.form.putSingle(key, value);
}
public void put (String key, String ... values) {
this.form.put(key, Arrays.<Object> asList(values));
}
}