11package com .cloudinary .http44 ;
22
3- import java .io .InputStream ;
4- import java .io .UnsupportedEncodingException ;
5- import java .lang .reflect .Constructor ;
6- import java .net .URI ;
7- import java .net .URISyntaxException ;
8- import java .util .ArrayList ;
9- import java .util .Arrays ;
10- import java .util .List ;
11- import java .util .Map ;
12-
3+ import com .cloudinary .Api ;
4+ import com .cloudinary .Api .HttpMethod ;
5+ import com .cloudinary .Cloudinary ;
6+ import com .cloudinary .api .ApiResponse ;
7+ import com .cloudinary .api .exceptions .GeneralError ;
8+ import com .cloudinary .http44 .api .Response ;
9+ import com .cloudinary .utils .Base64Coder ;
10+ import com .cloudinary .utils .ObjectUtils ;
11+ import com .cloudinary .utils .StringUtils ;
1312import org .apache .http .HttpHost ;
1413import org .apache .http .NameValuePair ;
14+ import org .apache .http .client .config .RequestConfig ;
1515import org .apache .http .client .entity .UrlEncodedFormEntity ;
1616import org .apache .http .client .methods .*;
17- import org .apache .http .client .config .RequestConfig ;
1817import org .apache .http .client .utils .URIBuilder ;
1918import org .apache .http .conn .HttpClientConnectionManager ;
2019import org .apache .http .impl .client .CloseableHttpClient ;
2423import org .cloudinary .json .JSONException ;
2524import org .cloudinary .json .JSONObject ;
2625
27- import com . cloudinary . Api ;
28- import com . cloudinary . Api . HttpMethod ;
29- import com . cloudinary . Cloudinary ;
30- import com . cloudinary . api . ApiResponse ;
31- import com . cloudinary . api . exceptions . GeneralError ;
32- import com . cloudinary . http44 . api . Response ;
33- import com . cloudinary . utils . Base64Coder ;
34- import com . cloudinary . utils . ObjectUtils ;
35- import com . cloudinary . utils . StringUtils ;
26+ import java . io . InputStream ;
27+ import java . io . UnsupportedEncodingException ;
28+ import java . lang . reflect . Constructor ;
29+ import java . net . URI ;
30+ import java . net . URISyntaxException ;
31+ import java . util . ArrayList ;
32+ import java . util . Arrays ;
33+ import java . util . List ;
34+ import java . util . Map ;
3635
3736public class ApiStrategy extends com .cloudinary .strategies .AbstractApiStrategy {
3837
@@ -69,8 +68,7 @@ public void init(Api api) {
6968 }
7069
7170 @ SuppressWarnings ({"rawtypes" , "unchecked" })
72- public ApiResponse callApi (HttpMethod method , Iterable <String > uri , Map <String , ? extends Object > params , Map options ) throws Exception {
73- URI apiUri ;
71+ public ApiResponse callApi (HttpMethod method , Iterable <String > uri , Map <String , ?> params , Map options ) throws Exception {
7472 if (options == null )
7573 options = ObjectUtils .emptyMap ();
7674
@@ -87,30 +85,7 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
8785 for (String component : uri ) {
8886 apiUrl = apiUrl + "/" + component ;
8987 }
90- URIBuilder apiUrlBuilder = new URIBuilder (apiUrl );
91- HttpUriRequest request = null ;
92-
93- switch (method ) {
94- case GET :
95- apiUri = prepareUrlParams (apiUrlBuilder , params );
96- request = new HttpGet (apiUri );
97- break ;
98- case PUT :
99- apiUri = apiUrlBuilder .build ();
100- HttpEntityEnclosingRequestBase put = new HttpPut (apiUri );
101- request = perpareEntityParams (put , params );
102-
103- break ;
104- case POST :
105- apiUri = apiUrlBuilder .build ();
106- HttpEntityEnclosingRequestBase post = new HttpPost (apiUri );
107- request = perpareEntityParams (post , params );
108- break ;
109- case DELETE :
110- apiUri = prepareUrlParams (apiUrlBuilder , params );
111- request = new HttpDelete (apiUri );
112- break ;
113- }
88+ HttpUriRequest request = prepareRequest (method , apiUrl , params );
11489
11590 request .setHeader ("Authorization" , "Basic " + Base64Coder .encodeString (apiKey + ":" + apiSecret ));
11691
@@ -147,34 +122,58 @@ public ApiResponse callApi(HttpMethod method, Iterable<String> uri, Map<String,
147122 }
148123 }
149124
150- private HttpUriRequest perpareEntityParams (HttpEntityEnclosingRequestBase put , Map <String , ? extends Object > params ) throws UnsupportedEncodingException {
151- HttpUriRequest request ;List <NameValuePair > entities = new ArrayList <NameValuePair >(params .size ());
152- for (Map .Entry <String , ? extends Object > param : params .entrySet ()) {
153- if (param .getValue () instanceof Iterable ) {
154- for (String single : (Iterable <String >) param .getValue ()) {
155- entities .add (new BasicNameValuePair (param .getKey () + "[]" , single ));
156- }
157- } else {
158- entities .add (new BasicNameValuePair (param .getKey (), ObjectUtils .asString (param .getValue ())));
125+ /**
126+ * Prepare a request with the URL and parameters based on the HTTP method used
127+ * @param method the HTTP method: GET, PUT, POST, DELETE
128+ * @param apiUrl the cloudinary API URI
129+ * @param params the parameters to pass to the server
130+ * @return an HTTP request
131+ * @throws URISyntaxException
132+ * @throws UnsupportedEncodingException
133+ */
134+ private HttpUriRequest prepareRequest (HttpMethod method , String apiUrl , Map <String , ?> params ) throws URISyntaxException , UnsupportedEncodingException {
135+ URI apiUri ;
136+ URIBuilder apiUrlBuilder = new URIBuilder (apiUrl );
137+ List <NameValuePair > parameters ;
138+ HttpUriRequest request ;
139+ parameters = prepareParams (params );
140+ if (method == HttpMethod .GET ) {
141+ apiUrlBuilder .setParameters (parameters );
142+ apiUri = apiUrlBuilder .build ();
143+ request = new HttpGet (apiUri );
144+ } else {
145+ apiUri = apiUrlBuilder .build ();
146+ switch (method ) {
147+ case PUT :
148+ request = new HttpPut (apiUri );
149+ break ;
150+ case DELETE : //uses HttpPost instead of HttpDelete
151+ parameters .add (new BasicNameValuePair ("_method" , "delete" ));
152+ //continue with POST
153+ case POST :
154+ request = new HttpPost (apiUri );
155+ break ;
156+ default :
157+ throw new IllegalArgumentException ("Unknown HTTP method" );
159158 }
159+ ((HttpEntityEnclosingRequestBase ) request ).setEntity (new UrlEncodedFormEntity (parameters ));
160160 }
161- put .setEntity (new UrlEncodedFormEntity (entities ));
162- request = put ;
163161 return request ;
164162 }
165163
166- private URI prepareUrlParams ( URIBuilder urlBuilder , Map <String , ? extends Object > params ) throws URISyntaxException {
167- URI apiUri ;
168- for (Map .Entry <String , ? extends Object > param : params .entrySet ()) {
164+ private List < NameValuePair > prepareParams ( Map <String , ?> params ) {
165+ List < NameValuePair > requestParams = new ArrayList < NameValuePair >( params . size ()) ;
166+ for (Map .Entry <String , ?> param : params .entrySet ()) {
169167 if (param .getValue () instanceof Iterable ) {
170- for (String single : (Iterable <String >) param .getValue ()) {
171- urlBuilder . addParameter ( param .getKey () + "[]" , single );
168+ for (Object single : (Iterable <? >) param .getValue ()) {
169+ requestParams . add ( new BasicNameValuePair ( param .getKey () + "[]" , ObjectUtils . asString ( single )) );
172170 }
173171 } else {
174- urlBuilder . addParameter ( param .getKey (), ObjectUtils .asString (param .getValue ()));
172+ requestParams . add ( new BasicNameValuePair ( param .getKey (), ObjectUtils .asString (param .getValue () )));
175173 }
176174 }
177- apiUri = urlBuilder .build ();
178- return apiUri ;
175+
176+
177+ return requestParams ;
179178 }
180179}
0 commit comments