1 package org.robolectric.shadows.httpclient;
2 
3 import android.net.Uri;
4 import java.io.IOException;
5 import java.util.LinkedHashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Set;
9 import org.apache.http.HttpEntity;
10 import org.apache.http.HttpRequest;
11 import org.apache.http.NameValuePair;
12 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
13 import org.apache.http.client.methods.HttpGet;
14 import org.apache.http.client.utils.URLEncodedUtils;
15 
16 public class ParamsParser {
17 
parseParams(HttpRequest request)18   public static Map<String, String> parseParams(HttpRequest request) {
19     if (request instanceof HttpGet) {
20       return parseParamsForGet(request);
21     }
22     if (request instanceof HttpEntityEnclosingRequestBase) {
23       return parseParamsForRequestWithEntity((HttpEntityEnclosingRequestBase) request);
24     }
25     return new LinkedHashMap<>();
26   }
27 
parseParamsForRequestWithEntity( HttpEntityEnclosingRequestBase request)28   private static Map<String, String> parseParamsForRequestWithEntity(
29       HttpEntityEnclosingRequestBase request) {
30     try {
31       LinkedHashMap<String, String> map = new LinkedHashMap<>();
32       HttpEntity entity = request.getEntity();
33       if (entity != null) {
34         List<NameValuePair> pairs = URLEncodedUtils.parse(entity);
35 
36         for (NameValuePair pair : pairs) {
37           map.put(pair.getName(), pair.getValue());
38         }
39       }
40       return map;
41     } catch (IOException e) {
42       throw new RuntimeException(e);
43     }
44   }
45 
parseParamsForGet(HttpRequest request)46   private static Map<String, String> parseParamsForGet(HttpRequest request) {
47     Uri uri = Uri.parse(request.getRequestLine().getUri());
48     Set<String> paramNames = uri.getQueryParameterNames();
49     LinkedHashMap<String, String> map = new LinkedHashMap<>();
50     for (String paramName : paramNames) {
51       map.put(paramName, uri.getQueryParameter(paramName));
52     }
53     return map;
54   }
55 }
56