Skip to content

Commit 59fa6f8

Browse files
AlejandroPa-panizza_globant
andauthored
- Add Header parameter methods for API Objects. (#945)
* - Add Header paramter methods for API Objects. * - Added enum for Date Format - Fixed issues raised in review * Fix spelling of constant Name and unnecesary temp variables. --------- Co-authored-by: a-panizza_globant <[email protected]>
1 parent 7744c2b commit 59fa6f8

File tree

1 file changed

+135
-55
lines changed

1 file changed

+135
-55
lines changed

java/src/main/java/com/genexus/internet/GXRestAPIClient.java

Lines changed: 135 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import java.text.ParseException;
1010

1111
import org.json.JSONArray;
12-
import com.genexus.internet.IGxJSONAble;
1312
import com.genexus.xml.GXXMLSerializable;
14-
import com.genexus.internet.IGxJSONSerializable;
1513
import com.genexus.common.interfaces.SpecificImplementation;
1614
import com.genexus.*;
1715
import com.genexus.diagnostics.core.ILogger;
@@ -32,17 +30,15 @@ public class GXRestAPIClient {
3230
private String responseMessage;
3331

3432
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";
3735

3836
private JSONObject jsonResponse;
3937
private HashMap<String, String> queryVars = new HashMap<String, String>();
4038
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+
4241

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";
4642
static final String DATE_NULL = "0000-00-00";
4743
static final String DATETIME_NULL = "0000-00-00T00:00:00";
4844

@@ -54,6 +50,40 @@ public class GXRestAPIClient {
5450
static final String RESPONSE_ERROR_MSG = "Invalid response";
5551
static final String PARSING_ERROR_MSG = "Error parsing response";
5652
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+
5787

5888
public GXRestAPIClient() {
5989
responseCode = 0;
@@ -151,16 +181,11 @@ public void addQueryVar(String varName, double varValue) {
151181
queryVars.put(varName, Double.toString(varValue));
152182
}
153183

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();
158187

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);
164189
queryVars.put(varName, df.format(varValue));
165190
}
166191

@@ -190,6 +215,66 @@ private String quoteString(String value) {
190215
return "\"" + value + "\"";
191216
}
192217

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+
193278
public <T extends GXXMLSerializable> void addBodyVar(String varName, GXBaseCollection<T> varValue) {
194279
if ( varValue != null) {
195280
bodyVars.put(varName, varValue.toJSonString(false));
@@ -205,21 +290,11 @@ public void addBodyVar(String varName, GXXMLSerializable varValue) {
205290
public void addBodyVar(String varName, String varValue) {
206291
bodyVars.put( varName, quoteString(varValue));
207292
}
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);
223298
bodyVars.put( varName, quoteString(df.format(varValue)));
224299
}
225300

@@ -261,7 +336,7 @@ public Date getBodyDate(String varName) {
261336
if (val.startsWith(DATE_NULL))
262337
return CommonUtil.newNullDate();
263338
else
264-
return new SimpleDateFormat(DATE_FMT).parse(val);
339+
return new SimpleDateFormat(DateFormat.DATETIME_FMT.getFormat()).parse(val);
265340
}
266341
catch (ParseException e) {
267342
return CommonUtil.newNullDate();
@@ -271,9 +346,9 @@ public Date getBodyDate(String varName) {
271346
public Date getBodyDateTime(String varName, Boolean hasMilliseconds) {
272347
try{
273348
String val = getJsonStr(varName);
274-
String fmt = DATETIME_FMT;
349+
String fmt = DateFormat.DATETIME_FMT.getFormat();
275350
if (hasMilliseconds)
276-
fmt = DATETIME_FMT_MS;
351+
fmt = DateFormat.DATETIME_FMT_MS.getFormat();
277352

278353
if (val.startsWith(DATETIME_NULL))
279354
return CommonUtil.newNullDate();
@@ -316,16 +391,14 @@ public BigDecimal getBodyNum(String varName) {
316391
return new BigDecimal(getJsonStr(varName));
317392
}
318393

319-
public long getBodyLong(String varName) {
320-
long value =0;
394+
public long getBodyLong(String varName) {
321395
try{
322-
value = Long.parseLong(getJsonStr(varName));
396+
return Long.parseLong(getJsonStr(varName));
323397
}
324398
catch(NumberFormatException ex)
325399
{
326-
value = Double.valueOf(getJsonStr(varName)).longValue();
327-
}
328-
return value;
400+
return Double.valueOf(getJsonStr(varName)).longValue();
401+
}
329402
}
330403

331404
public int getBodyInt(String varName) {
@@ -418,6 +491,7 @@ public <T extends GXXMLSerializable> GXBaseCollection<T> getBodyObjCollection(St
418491
fillCollection(varName, elementClass, col);
419492
return col;
420493
}
494+
421495
private <T extends GXXMLSerializable> void fillCollection(String varName, Class<T> elementClass, GXBaseCollection col) {
422496
JSONArray jsonarr = new JSONArray();
423497
try {
@@ -477,46 +551,52 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) {
477551
}
478552

479553
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);;
483556
}
484557

485558
public void RestExecute() {
486559
String separator = "";
487-
queryString = "";
560+
String queryString = "";
561+
String bodyString = "";
562+
488563
if (queryVars.size() > 0) {
489564
separator = "?";
490565
for( Map.Entry<String, String> entry : queryVars.entrySet()) {
491566
queryString += String.format("%s%s=%s", separator, entry.getKey(), entry.getValue());
492567
separator = "&";
493568
}
494569
}
495-
bodyString = "";
496570
if (bodyVars.size() > 0) {
497571
separator = "";
498572
for( Map.Entry<String, String> entry : bodyVars.entrySet()) {
499-
bodyString += separator + "\"" + entry.getKey() + "\":" + entry.getValue() + "";
573+
bodyString += separator + "\"" + entry.getKey() + "\":" + entry.getValue();
500574
separator = ",";
501575
}
502576
}
503577
if (bodyString.length() > 0) {
504578
bodyString = "{" + bodyString + "}";
505579
httpClient.addString( bodyString);
506-
httpClient.addHeader( "Content-Type", contentType);
580+
httpClient.addHeader( CONTENT_TYPE_LABEL, contentType);
507581
}
508582
else {
509-
if (httpMethod == "POST" || httpMethod == "PUT") {
583+
if (httpMethod.equals("POST") || httpMethod.equals( "PUT")) {
510584
bodyString = "{}";
511585
httpClient.addString(bodyString);
512-
httpClient.addHeader("Content-Type", contentType);
586+
httpClient.addHeader(CONTENT_TYPE_LABEL, contentType);
513587
}
514588
}
515589
if (location.getAuthenticationMethod() == 4 && location.getAccessToken() != null && ! location.getAccessToken().trim().isEmpty()) {
516-
httpClient.addHeader("Authorization", location.getAccessToken());
590+
httpClient.addHeader(AUTHORIZATION_LABEL, location.getAccessToken());
517591
}
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();
518598
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(): "";
520600
serviceuri += "/" + location.getBaseURL() + "/" + location.getResourceName();
521601
serviceuri += queryString;
522602
httpClient.execute( this.httpMethod, serviceuri);
@@ -527,7 +607,7 @@ public void RestExecute() {
527607
if (responseCode >= 300 || httpClient.getErrCode() > 0) {
528608
errorCode = httpClient.getErrCode();
529609
errorMessage = httpClient.getErrDescription();
530-
}
610+
}
531611
else {
532612
try {
533613
String response = httpClient.getString();
@@ -548,9 +628,9 @@ public void RestExecute() {
548628
}
549629

550630
private void logError(int code, String msg) {
551-
logger.error("Error: " + Integer.toString(code) + " " + msg);
631+
logger.error("Error: " + code + " " + msg);
552632
}
553633
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);
555635
}
556636
}

0 commit comments

Comments
 (0)