From f13810015459c695957f7b9b3cbd2de1bbac1f8e Mon Sep 17 00:00:00 2001 From: Nourreddine HOUARI Date: Sat, 15 May 2021 11:58:36 +0800 Subject: [PATCH 1/2] Replace pgp plugin by sign-maven-plugin --- pom.xml | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 9444510..c62bd46 100644 --- a/pom.xml +++ b/pom.xml @@ -119,23 +119,10 @@ - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - true - - - - sign-artifacts - verify - - sign - - - - + + org.simplify4u.plugins + sign-maven-plugin + org.apache.maven.plugins @@ -154,8 +141,17 @@ true - + + + + + org.simplify4u.plugins + sign-maven-plugin + 0.3.1 + + + \ No newline at end of file From c39f7a38802042fc7c53ef47639f80a6b3b406b2 Mon Sep 17 00:00:00 2001 From: Nourreddine HOUARI Date: Sat, 15 May 2021 12:02:29 +0800 Subject: [PATCH 2/2] Add pagination information to result. --- .../woocommerce/DefaultHttpClient.java | 52 ++++++++++++++---- .../com/icoderman/woocommerce/HttpClient.java | 3 +- .../java/com/icoderman/woocommerce/Page.java | 53 +++++++++++++++++++ .../icoderman/woocommerce/WooCommerce.java | 4 +- .../icoderman/woocommerce/WooCommerceAPI.java | 2 +- 5 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/icoderman/woocommerce/Page.java diff --git a/src/main/java/com/icoderman/woocommerce/DefaultHttpClient.java b/src/main/java/com/icoderman/woocommerce/DefaultHttpClient.java index e392865..1bc4772 100644 --- a/src/main/java/com/icoderman/woocommerce/DefaultHttpClient.java +++ b/src/main/java/com/icoderman/woocommerce/DefaultHttpClient.java @@ -1,7 +1,12 @@ package com.icoderman.woocommerce; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; @@ -18,16 +23,15 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; public class DefaultHttpClient implements HttpClient { private static final String CONTENT_TYPE = "Content-Type"; private static final String APPLICATION_JSON = "application/json"; + private static final String WC_TOTAL_HEADER = "X-WP-Total"; + private static final String WC_TOTAL_PAGES_HEADER = "X-WP-TotalPages"; private CloseableHttpClient httpClient; private ObjectMapper mapper; @@ -44,9 +48,14 @@ public Map get(String url) { } @Override - public List getAll(String url) { + public Page getAll(String url) { HttpGet httpGet = new HttpGet(url); - return getEntityAndReleaseConnection(httpGet, List.class); + Map result = getEntityWithHeaderAndReleaseConnection(httpGet, List.class); + List content = (List) result.get("content"); + int total = Integer.parseInt(result.get("total").toString()); + int totalPages = Integer.parseInt(result.get("totalPages").toString()); + Page page = new Page<>(content, total, totalPages, content.size()); + return page; } @Override @@ -131,4 +140,29 @@ private T getEntityAndReleaseConnection(HttpRequestBase httpRequest, Class Map getEntityWithHeaderAndReleaseConnection(HttpRequestBase httpRequest, Class objectClass) { + try { + HttpResponse httpResponse = httpClient.execute(httpRequest); + HttpEntity httpEntity = httpResponse.getEntity(); + if (httpEntity == null) { + throw new RuntimeException("Error retrieving results from http request"); + } + Object result = mapper.readValue(httpEntity.getContent(), Object.class); + if (objectClass.isInstance(result)) { + Map map = new HashMap<>(); + if (httpResponse.containsHeader(WC_TOTAL_HEADER)) { + map.put("total", httpResponse.getFirstHeader(WC_TOTAL_HEADER).getValue()); + map.put("totalPages", httpResponse.getFirstHeader(WC_TOTAL_PAGES_HEADER).getValue()); + } + map.put("content", objectClass.cast(result)); + return map; + } + throw new RuntimeException("Can't parse retrieved object: " + result.toString()); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + httpRequest.releaseConnection(); + } + } } diff --git a/src/main/java/com/icoderman/woocommerce/HttpClient.java b/src/main/java/com/icoderman/woocommerce/HttpClient.java index 5bcd2a3..d2fb8f1 100644 --- a/src/main/java/com/icoderman/woocommerce/HttpClient.java +++ b/src/main/java/com/icoderman/woocommerce/HttpClient.java @@ -1,6 +1,5 @@ package com.icoderman.woocommerce; -import java.util.List; import java.util.Map; /** @@ -22,7 +21,7 @@ public interface HttpClient { * @param url url to request * @return retrieved result */ - List getAll(String url); + Page getAll(String url); /** * Requests url with HTTP POST and retrieves result object as Map diff --git a/src/main/java/com/icoderman/woocommerce/Page.java b/src/main/java/com/icoderman/woocommerce/Page.java new file mode 100644 index 0000000..292823e --- /dev/null +++ b/src/main/java/com/icoderman/woocommerce/Page.java @@ -0,0 +1,53 @@ +package com.icoderman.woocommerce; + +import java.util.List; + +public class Page { + + /** + * List of element. + */ + private List content; + /** + * Total number of element. + */ + private int total; + /** + * Total number of pages. + */ + private int totalPages; + /** + * Size of the current page. + */ + private int size; + + /** + * Create new page of element. + * @param content Content list + * @param total total number of element. + * @param totalPages total number of pages. + * @param size size of the current result. + */ + public Page(List content, int total, int totalPages, int size) { + this.content = content; + this.total = total; + this.totalPages = totalPages; + this.size = size; + } + + public List getContent() { + return content; + } + + public int getTotal() { + return total; + } + + public int getTotalPages() { + return totalPages; + } + + public int getSize() { + return size; + } +} diff --git a/src/main/java/com/icoderman/woocommerce/WooCommerce.java b/src/main/java/com/icoderman/woocommerce/WooCommerce.java index 752d2a9..8f3cc1d 100644 --- a/src/main/java/com/icoderman/woocommerce/WooCommerce.java +++ b/src/main/java/com/icoderman/woocommerce/WooCommerce.java @@ -34,7 +34,7 @@ public interface WooCommerce { * @param params additional request params * @return List of retrieved entities */ - List getAll(String endpointBase, Map params); + Page getAll(String endpointBase, Map params); /** * Retrieves all WooCommerce entities @@ -42,7 +42,7 @@ public interface WooCommerce { * @param endpointBase API endpoint base @see EndpointBaseType * @return List of retrieved entities */ - default List getAll(String endpointBase) { + default Page getAll(String endpointBase) { return getAll(endpointBase, Collections.emptyMap()); } diff --git a/src/main/java/com/icoderman/woocommerce/WooCommerceAPI.java b/src/main/java/com/icoderman/woocommerce/WooCommerceAPI.java index d1af998..7680617 100644 --- a/src/main/java/com/icoderman/woocommerce/WooCommerceAPI.java +++ b/src/main/java/com/icoderman/woocommerce/WooCommerceAPI.java @@ -38,7 +38,7 @@ public Map get(String endpointBase, int id) { } @Override - public List getAll(String endpointBase, Map params) { + public Page getAll(String endpointBase, Map params) { String url = String.format(API_URL_FORMAT, config.getUrl(), apiVersion, endpointBase); String signature = OAuthSignature.getAsQueryString(config, url, HttpMethod.GET, params); String securedUrl = String.format(URL_SECURED_FORMAT, url, signature);