package org.webpieces.router.impl.body;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.webpieces.ctx.api.RouterRequest;
import org.webpieces.data.api.DataWrapper;
import org.webpieces.util.urlparse.UrlEncodedParser;
public class FormUrlEncodedParser implements BodyParser {
private UrlEncodedParser parser;
@Inject
public FormUrlEncodedParser(UrlEncodedParser parser) {
this.parser = parser;
}
@Override
public void parse(DataWrapper body, RouterRequest routerRequest, Charset encoding) {
String multiPartData = body.createStringFrom(0, body.getReadableSize(), encoding);
Map<String, List<String>> keyToValues = new HashMap<>();
parser.parse(multiPartData, (key, val) -> addToMap(keyToValues, key, val));
routerRequest.multiPartFields = keyToValues;
}
private Void addToMap(Map<String, List<String>> keyToValues, String key, String val) {
List<String> list = keyToValues.get(key);
if(list == null) {
list = new ArrayList<>();
keyToValues.put(key, list);
}
list.add(val);
return null;
}
}