9
9
import java .text .ParseException ;
10
10
11
11
import org .json .JSONArray ;
12
- import com .genexus .internet .IGxJSONAble ;
13
12
import com .genexus .xml .GXXMLSerializable ;
14
- import com .genexus .internet .IGxJSONSerializable ;
15
13
import com .genexus .common .interfaces .SpecificImplementation ;
16
14
import com .genexus .*;
17
15
import com .genexus .diagnostics .core .ILogger ;
@@ -32,17 +30,15 @@ public class GXRestAPIClient {
32
30
private String responseMessage ;
33
31
34
32
private String contentType = "application/json; charset=utf-8" ;
35
- private String queryString = "" ;
36
- private String bodyString = "" ;
33
+ static final String CONTENT_TYPE_LABEL = "Content-Type " ;
34
+ static final String AUTHORIZATION_LABEL = "Authorization " ;
37
35
38
36
private JSONObject jsonResponse ;
39
37
private HashMap <String , String > queryVars = new HashMap <String , String >();
40
38
private HashMap <String , String > bodyVars = new HashMap <String , String >();
41
- private HashMap <String , String > responseData = new HashMap <String , String >();
39
+ private HashMap <String , String > headerVars = new HashMap <String , String >();
40
+
42
41
43
- static final String DATE_FMT = "yyyy-MM-dd" ;
44
- static final String DATETIME_FMT = "yyyy-MM-dd'T'HH:mm:ss" ;
45
- static final String DATETIME_FMT_MS = "yyyy-MM-dd'T'HH:mm:ss.SSS" ;
46
42
static final String DATE_NULL = "0000-00-00" ;
47
43
static final String DATETIME_NULL = "0000-00-00T00:00:00" ;
48
44
@@ -54,6 +50,40 @@ public class GXRestAPIClient {
54
50
static final String RESPONSE_ERROR_MSG = "Invalid response" ;
55
51
static final String PARSING_ERROR_MSG = "Error parsing response" ;
56
52
static final String DESERIALIZING_ERROR_MSG = "Error serializing/deserializing object" ;
53
+
54
+ public enum DateFormat {
55
+
56
+ DATE_FMT (1 , "yyyy-MM-dd" ),
57
+ DATETIME_FMT (3 , "yyyy-MM-dd'T'HH:mm:ss" ),
58
+ DATETIME_FMT_MS (4 , "yyyy-MM-dd'T'HH:mm:ss.SSS" );
59
+
60
+ private final int fmtId ;
61
+ private final String fmtString ;
62
+
63
+ DateFormat (int fmtId , String fmtString ) {
64
+ this .fmtId = fmtId ;
65
+ this .fmtString = fmtString ;
66
+ }
67
+
68
+ public int getId () {
69
+ return fmtId ;
70
+ }
71
+
72
+ public String getFormat () {
73
+ return fmtString ;
74
+ }
75
+
76
+ public static DateFormat fromId (int fmtId ) {
77
+ for (DateFormat format : DateFormat .values ()) {
78
+ if (format .getId () == fmtId ) {
79
+ return format ;
80
+ }
81
+ }
82
+ throw new IllegalArgumentException ("Unknown error code: " + fmtId );
83
+ }
84
+ }
85
+
86
+
57
87
58
88
public GXRestAPIClient () {
59
89
responseCode = 0 ;
@@ -151,16 +181,11 @@ public void addQueryVar(String varName, double varValue) {
151
181
queryVars .put (varName , Double .toString (varValue ));
152
182
}
153
183
154
- public void addQueryVar (String varName , Date varValue ) {
155
- SimpleDateFormat df = new SimpleDateFormat (DATE_FMT );
156
- queryVars .put (varName , df .format (varValue ));
157
- }
184
+ public void addQueryVar (String varName , Date varValue , int fmtId ) {
185
+ DateFormat fmt = DateFormat .fromId (fmtId );
186
+ String fmtString = fmt .getFormat ();
158
187
159
- public void addQueryVar (String varName , Date varValue , boolean hasMilliseconds ) {
160
- String fmt = DATETIME_FMT ;
161
- if (hasMilliseconds )
162
- fmt = DATETIME_FMT_MS ;
163
- SimpleDateFormat df = new SimpleDateFormat (fmt );
188
+ SimpleDateFormat df = new SimpleDateFormat (fmtString );
164
189
queryVars .put (varName , df .format (varValue ));
165
190
}
166
191
@@ -190,6 +215,66 @@ private String quoteString(String value) {
190
215
return "\" " + value + "\" " ;
191
216
}
192
217
218
+ /// Add Header parameters
219
+
220
+ public <T extends GXXMLSerializable > void addHeaderVar (String varName , GXBaseCollection <T > varValue ) {
221
+ if ( varValue != null ) {
222
+ headerVars .put (varName , varValue .toJSonString (false ));
223
+ }
224
+ }
225
+
226
+ public void addHeaderVar (String varName , GXXMLSerializable varValue ) {
227
+ if ( varValue != null ) {
228
+ headerVars .put (varName , varValue .toJSonString (false ));
229
+ }
230
+ }
231
+
232
+ public void addHeaderVar (String varName , String varValue ) {
233
+ headerVars .put ( varName , quoteString (varValue ));
234
+ }
235
+
236
+ public void addHeaderVar (String varName , double varValue ) {
237
+ headerVars .put (varName , quoteString (Double .toString (varValue )));
238
+ }
239
+
240
+ public void addHeaderVar (String varName , Date varValue , int fmtId ) {
241
+ DateFormat fmt = DateFormat .fromId (fmtId );
242
+ String fmtString = fmt .getFormat ();
243
+
244
+ SimpleDateFormat df = new SimpleDateFormat (fmtString );
245
+ headerVars .put (varName , df .format (varValue ));
246
+ }
247
+
248
+ public void addHeaderVar (String varName , short varValue ) {
249
+ headerVars .put ( varName , Short .toString (varValue ));
250
+ }
251
+
252
+ public void addHeaderVar (String varName , int varValue ) {
253
+ headerVars .put ( varName , Integer .toString (varValue ));
254
+ }
255
+
256
+ public void addHeaderVar (String varName , long varValue ) {
257
+ headerVars .put ( varName , Long .toString (varValue ));
258
+ }
259
+
260
+ public void addHeaderVar (String varName , Boolean varValue ) {
261
+ headerVars .put ( varName , varValue .toString ());
262
+ }
263
+
264
+ public void addHeaderVar (String varName , BigDecimal varValue ) {
265
+ headerVars .put ( varName , varValue .toString ());
266
+ }
267
+
268
+ public void addHeaderVar (String varName , java .util .UUID varValue ) {
269
+ headerVars .put ( varName , quoteString (varValue .toString ()));
270
+ }
271
+
272
+ public void addHeaderVar (String varName , IGxJSONSerializable varValue ) {
273
+ headerVars .put ( varName , quoteString (varValue .toJSonString ()));
274
+ }
275
+
276
+ ///
277
+
193
278
public <T extends GXXMLSerializable > void addBodyVar (String varName , GXBaseCollection <T > varValue ) {
194
279
if ( varValue != null ) {
195
280
bodyVars .put (varName , varValue .toJSonString (false ));
@@ -205,21 +290,11 @@ public void addBodyVar(String varName, GXXMLSerializable varValue) {
205
290
public void addBodyVar (String varName , String varValue ) {
206
291
bodyVars .put ( varName , quoteString (varValue ));
207
292
}
208
-
209
- public void addBodyVar (String varName , double varValue ) {
210
- bodyVars .put (varName , quoteString (Double .toString (varValue )));
211
- }
212
-
213
- public void addBodyVar (String varName , Date varValue ) {
214
- SimpleDateFormat df = new SimpleDateFormat (DATE_FMT );
215
- bodyVars .put (varName , quoteString (df .format (varValue )));
216
- }
217
-
218
- public void addBodyVar (String varName , Date varValue , boolean hasMilliseconds ) {
219
- String fmt = DATETIME_FMT ;
220
- if (hasMilliseconds )
221
- fmt = DATETIME_FMT_MS ;
222
- SimpleDateFormat df = new SimpleDateFormat (fmt );
293
+
294
+ public void addBodyVar (String varName , Date varValue , int fmtId ) {
295
+ DateFormat fmt = DateFormat .fromId (fmtId );
296
+ String fmtString = fmt .getFormat ();
297
+ SimpleDateFormat df = new SimpleDateFormat (fmtString );
223
298
bodyVars .put ( varName , quoteString (df .format (varValue )));
224
299
}
225
300
@@ -261,7 +336,7 @@ public Date getBodyDate(String varName) {
261
336
if (val .startsWith (DATE_NULL ))
262
337
return CommonUtil .newNullDate ();
263
338
else
264
- return new SimpleDateFormat (DATE_FMT ).parse (val );
339
+ return new SimpleDateFormat (DateFormat . DATETIME_FMT . getFormat () ).parse (val );
265
340
}
266
341
catch (ParseException e ) {
267
342
return CommonUtil .newNullDate ();
@@ -271,9 +346,9 @@ public Date getBodyDate(String varName) {
271
346
public Date getBodyDateTime (String varName , Boolean hasMilliseconds ) {
272
347
try {
273
348
String val = getJsonStr (varName );
274
- String fmt = DATETIME_FMT ;
349
+ String fmt = DateFormat . DATETIME_FMT . getFormat () ;
275
350
if (hasMilliseconds )
276
- fmt = DATETIME_FMT_MS ;
351
+ fmt = DateFormat . DATETIME_FMT_MS . getFormat () ;
277
352
278
353
if (val .startsWith (DATETIME_NULL ))
279
354
return CommonUtil .newNullDate ();
@@ -316,16 +391,14 @@ public BigDecimal getBodyNum(String varName) {
316
391
return new BigDecimal (getJsonStr (varName ));
317
392
}
318
393
319
- public long getBodyLong (String varName ) {
320
- long value =0 ;
394
+ public long getBodyLong (String varName ) {
321
395
try {
322
- value = Long .parseLong (getJsonStr (varName ));
396
+ return Long .parseLong (getJsonStr (varName ));
323
397
}
324
398
catch (NumberFormatException ex )
325
399
{
326
- value = Double .valueOf (getJsonStr (varName )).longValue ();
327
- }
328
- return value ;
400
+ return Double .valueOf (getJsonStr (varName )).longValue ();
401
+ }
329
402
}
330
403
331
404
public int getBodyInt (String varName ) {
@@ -418,6 +491,7 @@ public <T extends GXXMLSerializable> GXBaseCollection<T> getBodyObjCollection(St
418
491
fillCollection (varName , elementClass , col );
419
492
return col ;
420
493
}
494
+
421
495
private <T extends GXXMLSerializable > void fillCollection (String varName , Class <T > elementClass , GXBaseCollection col ) {
422
496
JSONArray jsonarr = new JSONArray ();
423
497
try {
@@ -477,46 +551,52 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) {
477
551
}
478
552
479
553
public void addUploadFile (String filePath , String fileName ) {
480
- httpClient .addFile (filePath , fileName );
481
- String mimeType = SpecificImplementation .Application .getContentType (filePath );
482
- contentType = mimeType ;
554
+ httpClient .addFile (filePath , fileName );
555
+ contentType = SpecificImplementation .Application .getContentType (filePath );;
483
556
}
484
557
485
558
public void RestExecute () {
486
559
String separator = "" ;
487
- queryString = "" ;
560
+ String queryString = "" ;
561
+ String bodyString = "" ;
562
+
488
563
if (queryVars .size () > 0 ) {
489
564
separator = "?" ;
490
565
for ( Map .Entry <String , String > entry : queryVars .entrySet ()) {
491
566
queryString += String .format ("%s%s=%s" , separator , entry .getKey (), entry .getValue ());
492
567
separator = "&" ;
493
568
}
494
569
}
495
- bodyString = "" ;
496
570
if (bodyVars .size () > 0 ) {
497
571
separator = "" ;
498
572
for ( Map .Entry <String , String > entry : bodyVars .entrySet ()) {
499
- bodyString += separator + "\" " + entry .getKey () + "\" :" + entry .getValue () + "" ;
573
+ bodyString += separator + "\" " + entry .getKey () + "\" :" + entry .getValue ();
500
574
separator = "," ;
501
575
}
502
576
}
503
577
if (bodyString .length () > 0 ) {
504
578
bodyString = "{" + bodyString + "}" ;
505
579
httpClient .addString ( bodyString );
506
- httpClient .addHeader ( "Content-Type" , contentType );
580
+ httpClient .addHeader ( CONTENT_TYPE_LABEL , contentType );
507
581
}
508
582
else {
509
- if (httpMethod == "POST" || httpMethod == "PUT" ) {
583
+ if (httpMethod . equals ( "POST" ) || httpMethod . equals ( "PUT" ) ) {
510
584
bodyString = "{}" ;
511
585
httpClient .addString (bodyString );
512
- httpClient .addHeader ("Content-Type" , contentType );
586
+ httpClient .addHeader (CONTENT_TYPE_LABEL , contentType );
513
587
}
514
588
}
515
589
if (location .getAuthenticationMethod () == 4 && location .getAccessToken () != null && ! location .getAccessToken ().trim ().isEmpty ()) {
516
- httpClient .addHeader ("Authorization" , location .getAccessToken ());
590
+ httpClient .addHeader (AUTHORIZATION_LABEL , location .getAccessToken ());
517
591
}
592
+ if (headerVars .size () > 0 ) {
593
+ for ( Map .Entry <String , String > entry : headerVars .entrySet ()) {
594
+ httpClient .addHeader (entry .getKey (), entry .getValue ());
595
+ }
596
+ }
597
+ headerVars .clear ();
518
598
String serviceuri = ((location .getSecure () > 0 ) ? "https" : "http" ) + "://" + location .getHost ();
519
- serviceuri += (location .getPort () != 80 ) ? ":" + Integer . toString ( location .getPort () ): "" ;
599
+ serviceuri += (location .getPort () != 80 ) ? ":" + location .getPort (): "" ;
520
600
serviceuri += "/" + location .getBaseURL () + "/" + location .getResourceName ();
521
601
serviceuri += queryString ;
522
602
httpClient .execute ( this .httpMethod , serviceuri );
@@ -527,7 +607,7 @@ public void RestExecute() {
527
607
if (responseCode >= 300 || httpClient .getErrCode () > 0 ) {
528
608
errorCode = httpClient .getErrCode ();
529
609
errorMessage = httpClient .getErrDescription ();
530
- }
610
+ }
531
611
else {
532
612
try {
533
613
String response = httpClient .getString ();
@@ -548,9 +628,9 @@ public void RestExecute() {
548
628
}
549
629
550
630
private void logError (int code , String msg ) {
551
- logger .error ("Error: " + Integer . toString ( code ) + " " + msg );
631
+ logger .error ("Error: " + code + " " + msg );
552
632
}
553
633
private void logError (int code , String msg , Exception e ) {
554
- logger .error ("Error: " + Integer . toString ( code ) + " " + msg , e );
634
+ logger .error ("Error: " + code + " " + msg , e );
555
635
}
556
636
}
0 commit comments