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