From 8be19cb8263f4113e729403cf3ae5544461e1907 Mon Sep 17 00:00:00 2001 From: suthagar23 Date: Sun, 22 Mar 2020 09:25:20 +0530 Subject: [PATCH 1/3] Migrate http methods to predefined enum values --- README.md | 2 +- .../java/com/facebook/ads/sdk/APIContext.java | 4 +- .../java/com/facebook/ads/sdk/APIRequest.java | 38 ++++++++++++++----- src/main/java/com/facebook/ads/sdk/URL.java | 9 +++-- .../com/facebook/ads/utils/HttpMethods.java | 15 ++++++++ 5 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/facebook/ads/utils/HttpMethods.java diff --git a/README.md b/README.md index 294d8e0d..b1caec4a 100644 --- a/README.md +++ b/README.md @@ -305,7 +305,7 @@ This situation can occasionally happen if new fields are added to server respons Most of Marketing API can be found in SDK classes. If you don't find the one you want to access, it is possible to construct an Ad-hoc APIRequest: ```java - APIRequest request = new APIRequest(context, "me", "/adaccounts", "GET", AdAccount.getParser()); + APIRequest request = new APIRequest(context, "me", "/adaccounts", HttpMethods.GET, AdAccount.getParser()); APINodeList accounts = (APINodeList)(request.execute()); ``` diff --git a/src/main/java/com/facebook/ads/sdk/APIContext.java b/src/main/java/com/facebook/ads/sdk/APIContext.java index c0f34783..5a5e53fe 100644 --- a/src/main/java/com/facebook/ads/sdk/APIContext.java +++ b/src/main/java/com/facebook/ads/sdk/APIContext.java @@ -30,6 +30,8 @@ import java.util.Map; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; + +import com.facebook.ads.utils.HttpMethods; import com.google.gson.JsonParser; import com.google.gson.JsonElement; @@ -159,7 +161,7 @@ public String getAppID() { params.put("access_token", this.accessToken); params.put("fields", "app_id"); - APIRequest.ResponseWrapper response = executor.execute("GET", apiUrl, params, this); + APIRequest.ResponseWrapper response = executor.execute(HttpMethods.GET, apiUrl, params, this); JsonParser parser = new JsonParser(); this.appID = parser.parse(response.getBody()) .getAsJsonObject() diff --git a/src/main/java/com/facebook/ads/sdk/APIRequest.java b/src/main/java/com/facebook/ads/sdk/APIRequest.java index ef9776bd..81dfea44 100644 --- a/src/main/java/com/facebook/ads/sdk/APIRequest.java +++ b/src/main/java/com/facebook/ads/sdk/APIRequest.java @@ -31,6 +31,8 @@ import java.net.URL; import java.net.URLEncoder; import javax.net.ssl.HttpsURLConnection; + +import com.facebook.ads.utils.HttpMethods; import org.omg.CORBA.Request; import java.io.BufferedReader; import java.lang.reflect.Modifier; @@ -87,14 +89,26 @@ public static IAsyncRequestExecutor getAsyncExecutor() { return asyncExecutor; } + public APIRequest(APIContext context, String nodeId, String endpoint, HttpMethods method) { + this(context, nodeId, endpoint, method.toString(), null, null); + } + public APIRequest(APIContext context, String nodeId, String endpoint, String method) { this(context, nodeId, endpoint, method, null, null); } + public APIRequest(APIContext context, String nodeId, String endpoint, HttpMethods method, ResponseParser parser) { + this(context, nodeId, endpoint, method.toString(), null, parser); + } + public APIRequest(APIContext context, String nodeId, String endpoint, String method, ResponseParser parser) { this(context, nodeId, endpoint, method, null, parser); } + public APIRequest(APIContext context, String nodeId, String endpoint, HttpMethods method, List paramNames) { + this(context, nodeId, endpoint, method.toString(), paramNames, null); + } + public APIRequest(APIContext context, String nodeId, String endpoint, String method, List paramNames) { this(context, nodeId, endpoint, method, paramNames, null); } @@ -372,7 +386,7 @@ BatchRequest.BatchModeRequestInfo getBatchModeRequestInfo() throws IOException { if (returnFields != null) allParams.put("fields", joinStringList(returnFields)); info.method = this.method; StringBuilder relativeUrl = new StringBuilder(context.getVersion() + "/" + nodeId + endpoint); - if (this.method.equals("POST")) { + if (this.method.equals(HttpMethods.POST)) { info.files = new HashMap(); info.relativeUrl = relativeUrl.toString(); StringBuilder body = new StringBuilder(); @@ -514,19 +528,23 @@ public void onResponse(okhttp3.Call call, final okhttp3.Response response) throw public static class DefaultRequestExecutor implements IRequestExecutor { public ResponseWrapper execute(String method, String apiUrl, Map allParams, APIContext context) throws APIException, IOException { - if ("GET".equals(method)) return sendGet(apiUrl, allParams, context); - else if ("POST".equals(method)) return sendPost(apiUrl, allParams, context); - else if ("DELETE".equals(method)) return sendDelete(apiUrl, allParams, context); + if (HttpMethods.GET.equals(method)) return sendGet(apiUrl, allParams, context); + else if (HttpMethods.POST.equals(method)) return sendPost(apiUrl, allParams, context); + else if (HttpMethods.DELETE.equals(method)) return sendDelete(apiUrl, allParams, context); else throw new IllegalArgumentException("Unsupported http method. Currently only GET, POST, and DELETE are supported"); } + public ResponseWrapper execute(HttpMethods method, String apiUrl, Map allParams, APIContext context) throws APIException, IOException { + return execute(method.toString(), apiUrl, allParams, context); + } + public ResponseWrapper sendGet(String apiUrl, Map allParams, APIContext context) throws APIException, IOException { URL url = new URL(RequestHelper.constructUrlString(apiUrl, allParams)); context.log("Request:"); context.log("GET: " + url.toString()); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setRequestMethod("GET"); + con.setRequestMethod(HttpMethods.GET.toString()); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); @@ -539,7 +557,7 @@ public ResponseWrapper sendPost(String apiUrl, Map allParams, AP context.log("Post: " + url.toString()); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setRequestMethod("POST"); + con.setRequestMethod(HttpMethods.POST.toString()); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary); con.setDoOutput(true); @@ -591,7 +609,7 @@ public ResponseWrapper sendDelete(String apiUrl, Map allParams, context.log("Delete: " + url.toString()); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setRequestMethod("DELETE"); + con.setRequestMethod(HttpMethods.DELETE.toString()); con.setRequestProperty("User-Agent", USER_AGENT); return readResponse(con); @@ -612,9 +630,9 @@ static void init() { } public ListenableFuture execute(String method, String apiUrl, Map allParams, APIContext context) throws APIException, IOException { - if ("GET".equals(method)) return sendGet(apiUrl, allParams, context); - else if ("POST".equals(method)) return sendPost(apiUrl, allParams, context); - else if ("DELETE".equals(method)) return sendDelete(apiUrl, allParams, context); + if (HttpMethods.GET.equals(method)) return sendGet(apiUrl, allParams, context); + else if (HttpMethods.POST.equals(method)) return sendPost(apiUrl, allParams, context); + else if (HttpMethods.DELETE.equals(method)) return sendDelete(apiUrl, allParams, context); else throw new IllegalArgumentException("Unsupported http method. Currently only GET, POST, and DELETE are supported"); } diff --git a/src/main/java/com/facebook/ads/sdk/URL.java b/src/main/java/com/facebook/ads/sdk/URL.java index d5b14650..3f595333 100644 --- a/src/main/java/com/facebook/ads/sdk/URL.java +++ b/src/main/java/com/facebook/ads/sdk/URL.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; +import com.facebook.ads.utils.HttpMethods; import com.google.common.base.Function; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -114,7 +115,7 @@ public static ListenableFuture fetchByIdAsync(String id, APIContext context public static APINodeList fetchByIds(List ids, List fields, APIContext context) throws APIException { return (APINodeList)( - new APIRequest(context, "", "/", "GET", URL.getParser()) + new APIRequest(context, "", "/", HttpMethods.GET, URL.getParser()) .setParam("ids", APIRequest.joinStringList(ids)) .requestFields(fields) .execute() @@ -123,7 +124,7 @@ public static APINodeList fetchByIds(List ids, List fields, public static ListenableFuture> fetchByIdsAsync(List ids, List fields, APIContext context) throws APIException { return - new APIRequest(context, "", "/", "GET", URL.getParser()) + new APIRequest(context, "", "/", HttpMethods.GET, URL.getParser()) .setParam("ids", APIRequest.joinStringList(ids)) .requestFields(fields) .executeAsyncBase(); @@ -380,7 +381,7 @@ public URL apply(ResponseWrapper result) { }; public APIRequestGet(String nodeId, APIContext context) { - super(context, nodeId, "/", "GET", Arrays.asList(PARAMS)); + super(context, nodeId, "/", HttpMethods.GET, Arrays.asList(PARAMS)); } @Override @@ -538,7 +539,7 @@ public URL apply(ResponseWrapper result) { }; public APIRequestUpdate(String nodeId, APIContext context) { - super(context, nodeId, "/", "POST", Arrays.asList(PARAMS)); + super(context, nodeId, "/", HttpMethods.POST, Arrays.asList(PARAMS)); } @Override diff --git a/src/main/java/com/facebook/ads/utils/HttpMethods.java b/src/main/java/com/facebook/ads/utils/HttpMethods.java new file mode 100644 index 00000000..f48d52ee --- /dev/null +++ b/src/main/java/com/facebook/ads/utils/HttpMethods.java @@ -0,0 +1,15 @@ +package com.facebook.ads.utils; + +/** + * HTTP Request Methods collections + */ +public enum HttpMethods { + GET, + HEAD, + POST, + PUT, + PATCH, + DELETE, + OPTIONS, + TRACE +} From 13efbc5af13380d21df68461149e41ed214fa77e Mon Sep 17 00:00:00 2001 From: suthagar23 Date: Sun, 22 Mar 2020 09:36:36 +0530 Subject: [PATCH 2/3] Fixes to API Centext constructor --- src/main/java/com/facebook/ads/sdk/APIContext.java | 3 ++- src/main/java/com/facebook/ads/sdk/APIRequest.java | 14 ++++++++++++-- src/main/java/com/facebook/ads/sdk/URL.java | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/facebook/ads/sdk/APIContext.java b/src/main/java/com/facebook/ads/sdk/APIContext.java index 5a5e53fe..bdd558d4 100644 --- a/src/main/java/com/facebook/ads/sdk/APIContext.java +++ b/src/main/java/com/facebook/ads/sdk/APIContext.java @@ -31,10 +31,11 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import com.facebook.ads.utils.HttpMethods; import com.google.gson.JsonParser; import com.google.gson.JsonElement; +import com.facebook.ads.utils.HttpMethods; + public class APIContext { public static final String DEFAULT_API_BASE = APIConfig.DEFAULT_API_BASE; public static final String DEFAULT_API_VERSION = APIConfig.DEFAULT_API_VERSION; diff --git a/src/main/java/com/facebook/ads/sdk/APIRequest.java b/src/main/java/com/facebook/ads/sdk/APIRequest.java index 81dfea44..ce51a4b7 100644 --- a/src/main/java/com/facebook/ads/sdk/APIRequest.java +++ b/src/main/java/com/facebook/ads/sdk/APIRequest.java @@ -32,7 +32,6 @@ import java.net.URLEncoder; import javax.net.ssl.HttpsURLConnection; -import com.facebook.ads.utils.HttpMethods; import org.omg.CORBA.Request; import java.io.BufferedReader; import java.lang.reflect.Modifier; @@ -52,6 +51,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.facebook.ads.utils.HttpMethods; + public class APIRequest { public static final String USER_AGENT = APIConfig.USER_AGENT; @@ -535,7 +536,16 @@ public ResponseWrapper execute(String method, String apiUrl, Map } public ResponseWrapper execute(HttpMethods method, String apiUrl, Map allParams, APIContext context) throws APIException, IOException { - return execute(method.toString(), apiUrl, allParams, context); + switch (method) { + case GET: + return sendGet(apiUrl, allParams, context); + case POST: + return sendPost(apiUrl, allParams, context); + case DELETE: + return sendDelete(apiUrl, allParams, context); + default: + throw new IllegalArgumentException("Unsupported http method. Currently only GET, POST, and DELETE are supported"); + } } public ResponseWrapper sendGet(String apiUrl, Map allParams, APIContext context) throws APIException, IOException { diff --git a/src/main/java/com/facebook/ads/sdk/URL.java b/src/main/java/com/facebook/ads/sdk/URL.java index 3f595333..104b576c 100644 --- a/src/main/java/com/facebook/ads/sdk/URL.java +++ b/src/main/java/com/facebook/ads/sdk/URL.java @@ -31,7 +31,6 @@ import java.util.List; import java.util.Map; -import com.facebook.ads.utils.HttpMethods; import com.google.common.base.Function; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -46,6 +45,7 @@ import com.google.gson.JsonParser; import com.facebook.ads.sdk.APIException.MalformedResponseException; +import com.facebook.ads.utils.HttpMethods; /** * This class is auto-generated. From c87ce0be8ec246e92a01ba44cc9b43e716e24a8f Mon Sep 17 00:00:00 2001 From: suthagar23 Date: Sun, 22 Mar 2020 09:42:27 +0530 Subject: [PATCH 3/3] Fixes some comments --- src/main/java/com/facebook/ads/sdk/APIContext.java | 2 -- src/main/java/com/facebook/ads/sdk/APIRequest.java | 1 - src/main/java/com/facebook/ads/utils/HttpMethods.java | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/com/facebook/ads/sdk/APIContext.java b/src/main/java/com/facebook/ads/sdk/APIContext.java index bdd558d4..2b12a1a1 100644 --- a/src/main/java/com/facebook/ads/sdk/APIContext.java +++ b/src/main/java/com/facebook/ads/sdk/APIContext.java @@ -30,10 +30,8 @@ import java.util.Map; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; - import com.google.gson.JsonParser; import com.google.gson.JsonElement; - import com.facebook.ads.utils.HttpMethods; public class APIContext { diff --git a/src/main/java/com/facebook/ads/sdk/APIRequest.java b/src/main/java/com/facebook/ads/sdk/APIRequest.java index ce51a4b7..04885633 100644 --- a/src/main/java/com/facebook/ads/sdk/APIRequest.java +++ b/src/main/java/com/facebook/ads/sdk/APIRequest.java @@ -31,7 +31,6 @@ import java.net.URL; import java.net.URLEncoder; import javax.net.ssl.HttpsURLConnection; - import org.omg.CORBA.Request; import java.io.BufferedReader; import java.lang.reflect.Modifier; diff --git a/src/main/java/com/facebook/ads/utils/HttpMethods.java b/src/main/java/com/facebook/ads/utils/HttpMethods.java index f48d52ee..544da5b0 100644 --- a/src/main/java/com/facebook/ads/utils/HttpMethods.java +++ b/src/main/java/com/facebook/ads/utils/HttpMethods.java @@ -1,7 +1,7 @@ package com.facebook.ads.utils; /** - * HTTP Request Methods collections + * HTTP Request Methods */ public enum HttpMethods { GET,