From 26ab64388954d85d8a8f8538a086429aba1df121 Mon Sep 17 00:00:00 2001 From: Shreya Chakraborty Date: Wed, 18 May 2016 15:18:19 +0530 Subject: [PATCH 01/32] Fix bulk lookup submission (#12) * set auth params for bulk lookup * update version for client in pom.xml * Update argument validation * Make countryCode and endpoint configurable * executable for bulk lookup job submission --- pom.xml | 2 +- .../indix/client/impl/IndixApiClientImpl.java | 19 +++++- .../com/indix/tools/SubmitBulkLookup.java | 62 +++++++++++++++++++ 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/indix/tools/SubmitBulkLookup.java diff --git a/pom.xml b/pom.xml index 7750145..838ca51 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api apiv2-java-client - 1.0 + 1.0.1 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index 2e338ff..cef5872 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -16,7 +16,9 @@ import com.indix.models.productHistoryResponse.ProductHistoryResult; import com.indix.models.searchResult.*; import com.indix.models.suggestions.SuggestionsResult; +import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; +import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.indix.query.*; @@ -26,6 +28,7 @@ import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; +import java.util.List; import static com.indix.client.ProductsViewType.*; import static com.indix.client.impl.IndixApiConstants.*; @@ -35,6 +38,9 @@ */ class IndixApiClientImpl implements IndixApiClient { + private static final String APP_ID = "app_id"; + private static final String APP_KEY = "app_key"; + // http client // HttpClient httpClient; @@ -107,8 +113,8 @@ private URI buildURI(String resource, Query searchQuery) throws URISyntaxExcepti .setHost(host) .setPath(resource) .setParameters(searchQuery.getParameters()) - .addParameter("app_id", appId) - .addParameter("app_key", appKey) + .addParameter(APP_ID, appId) + .addParameter(APP_KEY, appKey) .build(); } @@ -133,7 +139,14 @@ private String executePOST(String resource, Query searchQuery) private String executePOST(String resource, Query searchQuery, File file) throws URISyntaxException, IOException, IndixApiException { URI uri = buildURI(resource, searchQuery); - return httpClient.POST(uri, searchQuery.getParameters(), file); + + // populate app_id and app_key + // + List params = searchQuery.getParameters(); + params.add(new BasicNameValuePair(APP_ID, appId)); + params.add(new BasicNameValuePair(APP_KEY, appKey)); + + return httpClient.POST(uri, params, file); } static String buildPath(String... pathFragments) { diff --git a/src/test/java/com/indix/tools/SubmitBulkLookup.java b/src/test/java/com/indix/tools/SubmitBulkLookup.java new file mode 100644 index 0000000..db10f1d --- /dev/null +++ b/src/test/java/com/indix/tools/SubmitBulkLookup.java @@ -0,0 +1,62 @@ +package com.indix.tools; + +import com.indix.client.IndixApiClient; +import com.indix.client.ProductsViewType; +import com.indix.client.impl.IndixApiClientFactory; +import com.indix.exception.IndixApiException; +import com.indix.models.jobs.JobInfo; +import com.indix.query.BulkLookupQuery; +import com.indix.query.QueryFactory; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; + +public class SubmitBulkLookup { + + public static void main(String[] args) throws IndixApiException, URISyntaxException, IOException { + + if (5 != args.length) { + throw new IllegalArgumentException( + "Usage: java -cp " + ); + } + + // Create Api client + // + String appId = args[0]; + String appKey = args[1]; + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient(appId, appKey); + + // Validate input file's presence + // + File file = new File(args[4]); + if (!file.exists()) throw new IllegalArgumentException("Invalid file: " + args[4]); + + String countryCode = args[3]; + String viewType = args[2]; + ProductsViewType view; + switch(viewType) { + case "summary" : view = ProductsViewType.SUMMARY; break; + case "offersStandard" : view = ProductsViewType.OFFERS_STANDARD; break; + case "offersPremium" : view = ProductsViewType.OFFERS_PREMIUM; break; + case "catalogStandard" : view = ProductsViewType.CATALOG_STANDARD; break; + case "catalogPremium" : view = ProductsViewType.CATALOG_PREMIUM; break; + case "universal" : view = ProductsViewType.UNIVERSAL; break; + default : throw new IllegalArgumentException("Invalid view_type: " + viewType); + } + + // Create query + // + BulkLookupQuery bulkLookupQuery = QueryFactory.newBulkLookupQuery() + .withCountryCode(countryCode) + .withInputFile(file); + + // Submit and print job details + // + JobInfo jobInfo = indixApiClient.postBulkJob(view, bulkLookupQuery); + System.out.println("jobId: " + jobInfo.getId()); + System.out.println("status: " + jobInfo.getStatus()); + System.out.println("Count: " + jobInfo.getCount()); + } +} From 928d1f2b123687d9d80b7fc24b448eca6afb6b70 Mon Sep 17 00:00:00 2001 From: Balasubramaniam B Date: Wed, 18 May 2016 15:41:57 +0530 Subject: [PATCH 02/32] upgrade version to latest in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 722bd8b..59b8fd3 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Add the following dependency to your pom file com.indix.api apiv2-java-client - 1.0 + 1.0.1 ``` @@ -188,4 +188,4 @@ The following example shows how to obtain the output of a bulk job, as requested } finally { indixApiClient.close(); } -``` \ No newline at end of file +``` From b3403a971927ce6052c2e5dcd20acf6ed87a0c63 Mon Sep 17 00:00:00 2001 From: shreya Date: Wed, 15 Jun 2016 09:28:43 +0530 Subject: [PATCH 03/32] Remove history endpoint from client Includes removing history view source, and related tests for the history endpoint implementation --- .../java/com/indix/client/IndixApiClient.java | 2 +- .../com/indix/client/ProductHistoryApi.java | 19 ------- .../indix/client/impl/IndixApiClientImpl.java | 43 +++------------ .../indix/client/impl/IndixApiConstants.java | 3 - .../client/IndixApiClientHistoryTest.java | 55 ------------------- 5 files changed, 8 insertions(+), 114 deletions(-) delete mode 100644 src/main/java/com/indix/client/ProductHistoryApi.java delete mode 100644 src/test/java/com/indix/client/IndixApiClientHistoryTest.java diff --git a/src/main/java/com/indix/client/IndixApiClient.java b/src/main/java/com/indix/client/IndixApiClient.java index eea5758..3944205 100644 --- a/src/main/java/com/indix/client/IndixApiClient.java +++ b/src/main/java/com/indix/client/IndixApiClient.java @@ -5,5 +5,5 @@ /** * Indix Api Client */ -public interface IndixApiClient extends SearchApi, ProductDetailsApi, MetadataApi, SuggestionsApi, ProductHistoryApi, BulkQueryApi, Closeable { +public interface IndixApiClient extends SearchApi, ProductDetailsApi, MetadataApi, SuggestionsApi, BulkQueryApi, Closeable { } diff --git a/src/main/java/com/indix/client/ProductHistoryApi.java b/src/main/java/com/indix/client/ProductHistoryApi.java deleted file mode 100644 index 111d258..0000000 --- a/src/main/java/com/indix/client/ProductHistoryApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.indix.client; - -import com.indix.exception.IndixApiException; -import com.indix.models.productHistoryResponse.ProductHistoryResult; -import com.indix.query.ProductHistoryQuery; - -import java.io.IOException; -import java.net.URISyntaxException; - -public interface ProductHistoryApi { - /** - * Product History - Returns the historical price information recorded for the product - * @param query Instance of {@link ProductHistoryQuery} with appropriate parameters - * @return {@link ProductHistoryResult} - * @throws {@link IndixApiException} - */ - ProductHistoryResult getProductHistory(ProductHistoryQuery query) - throws IndixApiException, IOException, URISyntaxException; -} diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index cef5872..7595c8a 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -1,27 +1,28 @@ package com.indix.client.impl; import com.fasterxml.jackson.core.JsonProcessingException; -import com.indix.client.IndixApiClient; -import com.indix.client.ProductsViewType; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.indix.client.IndixApiClient; +import com.indix.client.ProductsViewType; import com.indix.exception.IndixApiException; import com.indix.exception.InternalServerException; import com.indix.httpClient.HttpClient; import com.indix.httpClient.impl.HttpClientFactory; import com.indix.models.jobs.JobInfo; -import com.indix.models.metadataResult.*; +import com.indix.models.metadataResult.BrandsResult; +import com.indix.models.metadataResult.CategoriesResult; +import com.indix.models.metadataResult.StoresResult; import com.indix.models.productDetailsResult.*; -import com.indix.models.productHistoryResponse.ProductHistoryResult; import com.indix.models.searchResult.*; import com.indix.models.suggestions.SuggestionsResult; +import com.indix.query.*; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.indix.query.*; import java.io.File; import java.io.IOException; @@ -167,10 +168,6 @@ private String buildProductDetailsPath(ProductsViewType resourceView, String mpi return buildPath(buildSearchResourcePath(resourceView), mpid); } - private String buildProductHistoryPath(String mpid) { - return buildPath(PRODUCT_HISTORY_RESOURCE, mpid); - } - private String buildBulkSearchResourcePath(ProductsViewType resourceView) { return buildPath(VERSION, String.valueOf(resourceView), BULK, PRODUCTS_RESOURCE); } @@ -609,32 +606,6 @@ public SuggestionsResult getSuggestions(Query query) } } - /** - * Product History - Returns the historical price information recorded for the product - * - * @param query Instance of {@link ProductHistoryQuery} with appropriate parameters - * @return {@link ProductHistoryResult} - * @throws {@link IndixApiException} - */ - public ProductHistoryResult getProductHistory(ProductHistoryQuery query) - throws IndixApiException, IOException, URISyntaxException { - - String resource = buildProductHistoryPath(query.getMpid()); - try { - String content = executeGET(resource, query); - IndixApiResponse productHistoryIndixApiResponse = jsonMapper.readValue(content, - new TypeReference>() { - }); - return productHistoryIndixApiResponse.getResult(); - } catch (IndixApiException iae) { - logger.error("getProductHistory failed: " + iae.getMessage()); - throw iae; - } catch (JsonProcessingException e) { - logger.error("getProductHistory failed: " + e.getMessage()); - throw new InternalServerException(e); - } - } - /** * Posts a bulk job for the appropriate resource type for search cases * diff --git a/src/main/java/com/indix/client/impl/IndixApiConstants.java b/src/main/java/com/indix/client/impl/IndixApiConstants.java index 65a6069..8f73faa 100644 --- a/src/main/java/com/indix/client/impl/IndixApiConstants.java +++ b/src/main/java/com/indix/client/impl/IndixApiConstants.java @@ -12,7 +12,6 @@ class IndixApiConstants { static final String JOB_VIEW = "jobs"; static final String DOWNLOAD_PATH = "download"; static final String LOOKUP_VIEW = "lookup"; - static final String HISTORY_VIEW = "history"; static final String PRODUCTS_RESOURCE = "products"; static final String STORES_RESOURCE = buildPath(VERSION, "stores"); @@ -20,8 +19,6 @@ class IndixApiConstants { static final String CATEGORIES_RESOURCE = buildPath(VERSION, "categories"); static final String SUGGESTIONS_RESOURCE = buildPath(VERSION, PRODUCTS_RESOURCE, "suggestions"); - public static final String PRODUCT_HISTORY_RESOURCE = buildPath(VERSION, HISTORY_VIEW, PRODUCTS_RESOURCE); - public static final String BULK_JOB_RESOURCE = buildPath(VERSION, BULK, JOB_VIEW); } diff --git a/src/test/java/com/indix/client/IndixApiClientHistoryTest.java b/src/test/java/com/indix/client/IndixApiClientHistoryTest.java deleted file mode 100644 index 252b012..0000000 --- a/src/test/java/com/indix/client/IndixApiClientHistoryTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.indix.client; - - -import com.indix.client.impl.IndixApiClientFactory; -import com.indix.exception.IndixApiException; -import com.indix.httpClient.HttpClient; -import com.indix.models.product.productAtStore.ProductHistoryAtStore; -import com.indix.models.product.productAtStore.offer.ProductOfferHistory; -import org.junit.Test; -import com.indix.query.ProductHistoryQuery; -import com.indix.query.QueryFactory; - -import java.io.IOException; -import java.net.URISyntaxException; - -import static org.hamcrest.CoreMatchers.hasItems; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -public class IndixApiClientHistoryTest { - - @Test - public void getProductHistory() - throws IndixApiException, IOException, URISyntaxException { - - MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); - HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("productHistory-json-responses0/productHistory.json"); - - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); - - try { - ProductHistoryQuery productHistoryQuery = QueryFactory.newProductHistoryQuery() - .withCountryCode("US") - .withStoreId(271) - .withMpid("mpid1"); - ProductHistoryAtStore productHistoryRecord = indixApiClient.getProductHistory(productHistoryQuery).getProduct().getStores().get("271"); - ProductOfferHistory productOfferHistory = productHistoryRecord.getOffers().get(0); - - assertThat(productOfferHistory.getListPriceHistory(), hasItems(18.98, 19.98, 20.98)); - assertThat(productOfferHistory.getSalePriceHistory(), hasItems(18.00, 19.00, 20.00)); - assertThat(productOfferHistory.getPid(), is("pid1")); - assertThat(productOfferHistory.getSeller(), is("seller")); - assertThat(productOfferHistory.getTimestampHistory(), hasItems(1395644011000L, 1395415299000L, 1394371160000L)); - - assertThat(productHistoryRecord.getStoreId(), is(111)); - assertThat(productHistoryRecord.getStoreName(), is("storename")); - assertThat(indixApiClient.getProductHistory(productHistoryQuery).getProduct().getBrandId(), is(1547)); - assertThat(indixApiClient.getProductHistory(productHistoryQuery).getProduct().getCategoryId(), is(12345)); - - - } finally { - indixApiClient.close(); - } - } -} From 9adb556214247a75d697863d31dfa0786ae4ac97 Mon Sep 17 00:00:00 2001 From: shreya Date: Wed, 15 Jun 2016 09:33:35 +0530 Subject: [PATCH 04/32] Remove price history response type and additional features --- .../indix/models/product/ProductHistory.java | 25 ----------- .../productAtStore/ProductHistoryAtStore.java | 26 ------------ .../offer/ProductOfferHistory.java | 42 ------------------- .../ProductHistoryResult.java | 12 ------ 4 files changed, 105 deletions(-) delete mode 100644 src/main/java/com/indix/models/product/ProductHistory.java delete mode 100644 src/main/java/com/indix/models/product/productAtStore/ProductHistoryAtStore.java delete mode 100644 src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferHistory.java delete mode 100644 src/main/java/com/indix/models/productHistoryResponse/ProductHistoryResult.java diff --git a/src/main/java/com/indix/models/product/ProductHistory.java b/src/main/java/com/indix/models/product/ProductHistory.java deleted file mode 100644 index 1a1593d..0000000 --- a/src/main/java/com/indix/models/product/ProductHistory.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.indix.models.product; - -import com.indix.models.product.productAtStore.ProductHistoryAtStore; - -import java.util.Map; - -public class ProductHistory { - - private int categoryId; - private int brandId; - private Map stores; - - public int getCategoryId(){ - return categoryId; - } - - public int getBrandId(){ - return brandId; - } - - public Map getStores() { - return stores; - } - -} diff --git a/src/main/java/com/indix/models/product/productAtStore/ProductHistoryAtStore.java b/src/main/java/com/indix/models/product/productAtStore/ProductHistoryAtStore.java deleted file mode 100644 index 34e9918..0000000 --- a/src/main/java/com/indix/models/product/productAtStore/ProductHistoryAtStore.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.indix.models.product.productAtStore; - -import com.indix.models.product.productAtStore.offer.ProductOfferHistory; - -import java.util.List; - -public class ProductHistoryAtStore { - - private List offers; - private int storeId; - private String storeName; - - - public List getOffers() { - return offers; - } - - public int getStoreId(){ - return storeId; - } - - public String getStoreName(){ - return storeName; - } - -} diff --git a/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferHistory.java b/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferHistory.java deleted file mode 100644 index f2dd4a5..0000000 --- a/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferHistory.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.indix.models.product.productAtStore.offer; - -import java.util.List; - -public class ProductOfferHistory { - - private List timestampHistory; - private List salePriceHistory; - private List listPriceHistory; - private String pid; - private String seller; - - public String getPid(){ - return pid; - } - - /** - * @return The timestamp for when the product's data was crawled on the store's website - * including the historic prices - */ - public List getTimestampHistory(){ - return timestampHistory; - } - - /** - * @return The array of sale prices of the product at this store afetr promotions including historic prices - */ - public List getSalePriceHistory(){ - return salePriceHistory; - } - - /** - * @return The array of list prices of the product at this store including historic prices - */ - public List getListPriceHistory(){ - return listPriceHistory; - } - - public String getSeller(){ - return seller; - } -} diff --git a/src/main/java/com/indix/models/productHistoryResponse/ProductHistoryResult.java b/src/main/java/com/indix/models/productHistoryResponse/ProductHistoryResult.java deleted file mode 100644 index 2d52e55..0000000 --- a/src/main/java/com/indix/models/productHistoryResponse/ProductHistoryResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.indix.models.productHistoryResponse; - -import com.indix.models.product.ProductHistory; - -public class ProductHistoryResult { - - private ProductHistory product; - - public ProductHistory getProduct() { - return product; - } -} From b01605573ec71eb8c91fb9252ed23aa7cf318551 Mon Sep 17 00:00:00 2001 From: shreya Date: Wed, 15 Jun 2016 09:35:44 +0530 Subject: [PATCH 05/32] Remove Price History query availability from client --- .../com/indix/query/ProductHistoryQuery.java | 41 ------------------- .../java/com/indix/query/QueryFactory.java | 7 ---- .../indix/query/ProductHistoryQueryTest.java | 30 -------------- 3 files changed, 78 deletions(-) delete mode 100644 src/main/java/com/indix/query/ProductHistoryQuery.java delete mode 100644 src/test/java/com/indix/query/ProductHistoryQueryTest.java diff --git a/src/main/java/com/indix/query/ProductHistoryQuery.java b/src/main/java/com/indix/query/ProductHistoryQuery.java deleted file mode 100644 index a2c6323..0000000 --- a/src/main/java/com/indix/query/ProductHistoryQuery.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.indix.query; - -import org.apache.http.message.BasicNameValuePair; - -public class ProductHistoryQuery extends QueryBase { - String mpid; - - public ProductHistoryQuery() { - super(); - mpid = ""; - } - - /** - * Limits results to products of the geography with this code. Example: 'US', 'GB', etc - * If the user doesn’t pass a value, the default option returns the US countryCode data - */ - public ProductHistoryQuery withCountryCode(String cc) { - parameters.add(new BasicNameValuePair("countryCode", cc)); - return this; - } - - /** - * The product identifier - should be a 32-digit HEX value retrieved via the Product Search API - */ - public ProductHistoryQuery withMpid(String mpid) { - this.mpid = mpid; - return this; - } - - /** - * Limit result to price history of the product at this store - */ - public ProductHistoryQuery withStoreId(int storeId) { - parameters.add(new BasicNameValuePair("storeId", String.valueOf(storeId))); - return this; - } - - public String getMpid() { - return mpid; - } -} diff --git a/src/main/java/com/indix/query/QueryFactory.java b/src/main/java/com/indix/query/QueryFactory.java index 1120eb9..63d747c 100644 --- a/src/main/java/com/indix/query/QueryFactory.java +++ b/src/main/java/com/indix/query/QueryFactory.java @@ -37,13 +37,6 @@ public static BulkProductsQuery newBulkQuery() { return new SearchQuery(); } - /** - * @return {@link ProductHistoryQuery} - */ - public static ProductHistoryQuery newProductHistoryQuery() { - return new ProductHistoryQuery(); - } - /** * @return {@link BulkLookupQuery} */ diff --git a/src/test/java/com/indix/query/ProductHistoryQueryTest.java b/src/test/java/com/indix/query/ProductHistoryQueryTest.java deleted file mode 100644 index 06de2a4..0000000 --- a/src/test/java/com/indix/query/ProductHistoryQueryTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.indix.query; - -import org.apache.http.NameValuePair; -import org.apache.http.message.BasicNameValuePair; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class ProductHistoryQueryTest { - - @Test - public void testBasicQuery() { - List expectedValue = new ArrayList(); - expectedValue.add(new BasicNameValuePair("countryCode", "US")); - expectedValue.add(new BasicNameValuePair("storeId", "2345")); - - ProductHistoryQuery productHistoryQuery = QueryFactory.newProductHistoryQuery() - .withCountryCode("US") - .withStoreId(2345) - .withMpid("mpid1"); - List actualParameters = productHistoryQuery.getParameters(); - - assertTrue(actualParameters.containsAll(expectedValue)); - assertEquals("mpid1", productHistoryQuery.getMpid()); - } -} From 337e680b3b079b46f138d430a801470bc06e39c6 Mon Sep 17 00:00:00 2001 From: shreya Date: Fri, 17 Jun 2016 09:03:45 +0530 Subject: [PATCH 06/32] update version in pom --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59b8fd3..335e332 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Add the following dependency to your pom file com.indix.api apiv2-java-client - 1.0.1 + 1.0.2 ``` diff --git a/pom.xml b/pom.xml index 838ca51..5f7e7a6 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api apiv2-java-client - 1.0.1 + 1.0.2 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From 33822a36992ac7cdbcd1db6e9de5426f2810f66c Mon Sep 17 00:00:00 2001 From: shreya Date: Fri, 17 Jun 2016 09:38:22 +0530 Subject: [PATCH 07/32] Upgrade minor version. Removal of history endpoint is a breaking change --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 335e332..065a8ae 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Add the following dependency to your pom file com.indix.api apiv2-java-client - 1.0.2 + 1.1.0 ``` diff --git a/pom.xml b/pom.xml index 5f7e7a6..c33c09c 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api apiv2-java-client - 1.0.2 + 1.1.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From 21599ad355d2181af32c807e2c7d57e9571a2f26 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 12:21:52 +0530 Subject: [PATCH 08/32] Updating the github handles in pom --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 838ca51..1542ec0 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints - https://github.com/ind9/apiv2-java-client/ + https://github.com/indix-eng/apiv2-java-client/ The Apache License, Version 2.0 @@ -30,9 +30,9 @@ - scm:git:git@github.com:ind9/apiv2-java-client.git - scm:git:git@github.com:ind9/apiv2-java-client.git - git@github.com:ind9/apiv2-java-client.git + scm:git:git@github.com:indix-eng/apiv2-java-client.git + scm:git:git@github.com:indix-eng/apiv2-java-client.git + git@github.com:indix-eng/apiv2-java-client.git From 7dd32acc54810412eaeff35ae0e699d09a1a4f81 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 12:34:26 +0530 Subject: [PATCH 09/32] Making CloseableHttpClient pluggable on default HttpClientImpl --- .../com/indix/httpClient/impl/HttpClientImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java b/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java index 13a6dce..a99a3bd 100644 --- a/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java +++ b/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java @@ -35,7 +35,16 @@ class HttpClientImpl implements HttpClient { * configuration. */ public HttpClientImpl() { - closeableHttpClient = HttpClients.createDefault(); + this(HttpClients.createDefault()); + } + + /** + * Creates with a custom {@link CloseableHttpClient} instance. + * + * @param closableHttpClient + */ + public HttpClientImpl(CloseableHttpClient closableHttpClient) { + closeableHttpClient = closableHttpClient; objectMapper = new ObjectMapper(); } From bfeab5cce2c3cefaf8cbda0c82478a4438709448 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 12:37:58 +0530 Subject: [PATCH 10/32] Adding constructor to HttpClientFactory for ClosableHttpClient --- .../java/com/indix/httpClient/impl/HttpClientFactory.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/indix/httpClient/impl/HttpClientFactory.java b/src/main/java/com/indix/httpClient/impl/HttpClientFactory.java index f00ac94..9b9d534 100644 --- a/src/main/java/com/indix/httpClient/impl/HttpClientFactory.java +++ b/src/main/java/com/indix/httpClient/impl/HttpClientFactory.java @@ -1,6 +1,7 @@ package com.indix.httpClient.impl; import com.indix.httpClient.HttpClient; +import org.apache.http.impl.client.CloseableHttpClient; /** * Instantiates http client instances @@ -10,4 +11,8 @@ public class HttpClientFactory { public static HttpClient newHttpClient() { return new HttpClientImpl(); } + + public static HttpClient newHttpClient(CloseableHttpClient httpClient) { + return new HttpClientImpl(httpClient); + } } From 81a94e31728eab0f0f6505719194b7e739c57873 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 14:35:07 +0530 Subject: [PATCH 11/32] Fixes SSL handshake issue while accessing api.indix.com We trust the LetsEncrypt's root certificate as part of the http client's init --- .../indix/httpClient/impl/HttpClientImpl.java | 3 +- src/main/java/com/indix/tools/SSLTrustCA.java | 85 ++++++++++++++++++ src/main/resources/ca/DSTRootCAX3.der | Bin 0 -> 846 bytes 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/indix/tools/SSLTrustCA.java create mode 100644 src/main/resources/ca/DSTRootCAX3.der diff --git a/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java b/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java index a99a3bd..8f69702 100644 --- a/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java +++ b/src/main/java/com/indix/httpClient/impl/HttpClientImpl.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.indix.exception.*; import com.indix.httpClient.HttpClient; +import com.indix.tools.SSLTrustCA; import org.apache.http.*; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; @@ -35,7 +36,7 @@ class HttpClientImpl implements HttpClient { * configuration. */ public HttpClientImpl() { - this(HttpClients.createDefault()); + this(HttpClients.custom().setSSLContext(SSLTrustCA.trustLetsEncryptRootCA()).build()); } /** diff --git a/src/main/java/com/indix/tools/SSLTrustCA.java b/src/main/java/com/indix/tools/SSLTrustCA.java new file mode 100644 index 0000000..dbf8076 --- /dev/null +++ b/src/main/java/com/indix/tools/SSLTrustCA.java @@ -0,0 +1,85 @@ +package com.indix.tools; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +/** + * Forked off from https://github.com/micw/ArduinoProjekte/blob/b7e308533d20c9d23fda5e08899c22afd1dc1303/java/ArduinoHomeServer/src/main/java/tools/SSLTrustCa.java + *

+ * Helps to add LetsEncrypt to current JVM instance's keystore so we can access api.indix.com. This change has no effect + * if the host JVM is >= JDK8u101, since this is already part of them. + *

+ * References + * - http://stackoverflow.com/questions/3508050/how-can-i-get-a-list-of-trusted-root-certificates-in-java/3508175#3508175 + * - http://stackoverflow.com/questions/34110426/does-java-support-lets-encrypt-certificates + * - https://community.letsencrypt.org/t/will-the-cross-root-cover-trust-by-the-default-list-in-the-jdk-jre/134/37 + */ +public final class SSLTrustCA { + + public static SSLContext trustLetsEncryptRootCA() { + return trustCa(SSLTrustCA.class.getResource("/ca/DSTRootCAX3.der")); + } + + private static KeyStore keyStore; + private final static Logger LOG = LoggerFactory.getLogger(SSLTrustCA.class); + + private synchronized static KeyStore initialize(boolean loadJavaDefaultKeytore) + throws GeneralSecurityException, IOException { + + if (SSLTrustCA.keyStore == null) { + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + + if (loadJavaDefaultKeytore) { + // Load the java default keystore + Path ksPath = Paths.get(System.getProperty("java.home"), "lib", "security", "cacerts"); + try (InputStream in = Files.newInputStream(ksPath)) { + keyStore.load(in, "changeit".toCharArray()); + } + } + + SSLTrustCA.keyStore = keyStore; + } + + return SSLTrustCA.keyStore; + } + + private synchronized static SSLContext trustCa(URL caFile) { + try { + LOG.debug("Trusting CAFile: " + caFile.toExternalForm()); + Certificate crt; + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + try (InputStream caInput = new BufferedInputStream(caFile.openStream())) { + crt = cf.generateCertificate(caInput); + } + + String certName = ((X509Certificate) crt).getSubjectDN().getName(); + KeyStore keyStore = initialize(true); + keyStore.setCertificateEntry(certName, crt); + + // Set this as the default keystore + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(keyStore); + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, tmf.getTrustManagers(), null); + SSLContext.setDefault(sslContext); + return sslContext; + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/src/main/resources/ca/DSTRootCAX3.der b/src/main/resources/ca/DSTRootCAX3.der new file mode 100644 index 0000000000000000000000000000000000000000..95500f6bd1373c2dce681e3779ac7647a84ef251 GIT binary patch literal 846 zcmXqLV)imbp7(EZg*cIAj~}vT2q`KpE>UpK*E1A15Cy4X7Upva4p9io z&j$)SDnu9?$cghB7#LU@8yFcH8W~zfiSrs6g1Ckz28M>FQIuQI#HfVqXhv2B<|amd z27@L>E~X|%Muz+AUrrC;Xb#_UCMosXgr+ygFY9C*oQi&P^Kk8Phl3I#-49+Emw9SE zwpa9=yvC1jy`9JD)OUX_EAppa(zNRcy4j_*@^4P z-Bq|BeN3xswcg%>wMV(7R40@a9j(q&NgLp&$0Xa zPdXO75i7c?_QoRA()q%lzY;MHAE&>*I%{^X?5ss6 zTx-sJA~0K0Ynx{H=YL>|WnyMzU|j5E;9$THj3HTJM#ldvtOm?L%770fzz-5& z0j35v16dHCk420{Az=xANbwf&S15*z;pelr>~hlUS#T)JUzuK&f|!LT!du298=T>o{t;X zuDlc3)}8lq;@7rQzjme>uZoO5_h`9TvHNN5Gcz}sdz^n9=Kb|NKTnZS`>_u$yMv2z zoxiGi%nC~19kT+H`dpb@E zJ-bvpvHPd3QE%#&mo*#1%U&JbreV2XG*#xrxAJLOT)pMoHzsnk^s(R8+{X28Zj-60 F004`~O?LnQ literal 0 HcmV?d00001 From 42d8e90fa6770f0c0031f6c3f30b6530c2dbbe65 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 19:47:56 +0530 Subject: [PATCH 12/32] Removing java.nio related classes Apparently they are not supported on Android. Ref - http://stackoverflow.com/a/24869904 --- src/main/java/com/indix/tools/SSLTrustCA.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/indix/tools/SSLTrustCA.java b/src/main/java/com/indix/tools/SSLTrustCA.java index dbf8076..db4521c 100644 --- a/src/main/java/com/indix/tools/SSLTrustCA.java +++ b/src/main/java/com/indix/tools/SSLTrustCA.java @@ -5,13 +5,8 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.cert.Certificate; @@ -46,8 +41,9 @@ private synchronized static KeyStore initialize(boolean loadJavaDefaultKeytore) if (loadJavaDefaultKeytore) { // Load the java default keystore - Path ksPath = Paths.get(System.getProperty("java.home"), "lib", "security", "cacerts"); - try (InputStream in = Files.newInputStream(ksPath)) { + String SEP = File.pathSeparator; + File ksPath = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security" + SEP + "cacerts"); + try (InputStream in = new FileInputStream(ksPath)) { keyStore.load(in, "changeit".toCharArray()); } } From eeb9347b5bb4c6b820214c3166edb39025c85dc0 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Thu, 22 Sep 2016 19:49:29 +0530 Subject: [PATCH 13/32] Fixing the separator for files --- src/main/java/com/indix/tools/SSLTrustCA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/indix/tools/SSLTrustCA.java b/src/main/java/com/indix/tools/SSLTrustCA.java index db4521c..31de287 100644 --- a/src/main/java/com/indix/tools/SSLTrustCA.java +++ b/src/main/java/com/indix/tools/SSLTrustCA.java @@ -41,7 +41,7 @@ private synchronized static KeyStore initialize(boolean loadJavaDefaultKeytore) if (loadJavaDefaultKeytore) { // Load the java default keystore - String SEP = File.pathSeparator; + String SEP = File.separator; File ksPath = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security" + SEP + "cacerts"); try (InputStream in = new FileInputStream(ksPath)) { keyStore.load(in, "changeit".toCharArray()); From 242c71f30914a2d277b77d364854fbc1ac85ec75 Mon Sep 17 00:00:00 2001 From: Ashwanth Kumar Date: Tue, 27 Sep 2016 12:21:29 +0530 Subject: [PATCH 14/32] Not loading default JVM's truststore, since it's not available on android platforms --- README.md | 22 +++++++++++++++++++ src/main/java/com/indix/tools/SSLTrustCA.java | 15 +++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 065a8ae..e594336 100644 --- a/README.md +++ b/README.md @@ -189,3 +189,25 @@ The following example shows how to obtain the output of a bulk job, as requested indixApiClient.close(); } ``` + +## Known issue(s) +If you're using the client on Android you might see the following error +``` +java.lang.NoSuchMethodError: No virtual method setSSLContext(Ljavax/net/ssl/SSLContext;)Lorg/apache/http/impl/client/HttpClientBuilder; +``` + +That's because the HttpClient that comes with this client is little newer than the one that's generally used in Android. The fix is to do the following + +``` +import com.indix.httpClient.HttpClient; +import com.indix.httpClient.impl.HttpClientFactory; +import com.indix.tools.SSLTrustCA; + +import org.apache.http.impl.client.HttpClients; + +HttpClient client = HttpClientFactory.newHttpClient(HttpClients.custom() + .setSslcontext(SSLTrustCA.trustLetsEncryptRootCA()) + .build()); +IndixApiClient indixApiClient = IndixApiClientFactory + .newIndixApiClient(appId, appKey, client); +``` diff --git a/src/main/java/com/indix/tools/SSLTrustCA.java b/src/main/java/com/indix/tools/SSLTrustCA.java index 31de287..180f3e0 100644 --- a/src/main/java/com/indix/tools/SSLTrustCA.java +++ b/src/main/java/com/indix/tools/SSLTrustCA.java @@ -26,6 +26,8 @@ */ public final class SSLTrustCA { + private static final char[] KEYSTORE_DEFAULT_PASSWORD = "changeit".toCharArray(); + public static SSLContext trustLetsEncryptRootCA() { return trustCa(SSLTrustCA.class.getResource("/ca/DSTRootCAX3.der")); } @@ -33,20 +35,13 @@ public static SSLContext trustLetsEncryptRootCA() { private static KeyStore keyStore; private final static Logger LOG = LoggerFactory.getLogger(SSLTrustCA.class); - private synchronized static KeyStore initialize(boolean loadJavaDefaultKeytore) + private synchronized static KeyStore initialize() throws GeneralSecurityException, IOException { if (SSLTrustCA.keyStore == null) { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - if (loadJavaDefaultKeytore) { - // Load the java default keystore - String SEP = File.separator; - File ksPath = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security" + SEP + "cacerts"); - try (InputStream in = new FileInputStream(ksPath)) { - keyStore.load(in, "changeit".toCharArray()); - } - } + keyStore.load(null, KEYSTORE_DEFAULT_PASSWORD); SSLTrustCA.keyStore = keyStore; } @@ -64,7 +59,7 @@ private synchronized static SSLContext trustCa(URL caFile) { } String certName = ((X509Certificate) crt).getSubjectDN().getName(); - KeyStore keyStore = initialize(true); + KeyStore keyStore = initialize(); keyStore.setCertificateEntry(certName, crt); // Set this as the default keystore From 9a13774e0ae44c4646b9c6130c11aeb2f374c1d9 Mon Sep 17 00:00:00 2001 From: Rajesh Muppalla Date: Thu, 20 Oct 2016 05:15:22 +0530 Subject: [PATCH 15/32] Fixing snap-ci badge link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e594336..ffb0cb6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Apiv2-Java-Client [![Build Status](https://snap-ci.com/ind9/apiv2-java-client/branch/master/build_image)](https://snap-ci.com/ind9/apiv2-java-client/branch/master) +# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/apiv2-java-client/branch/master/build_image)](https://snap-ci.com/indix/apiv2-java-client/branch/master) Indix API Java client Requirements From 23a38914afe8914cc58a294b67e7f2137c6f2a97 Mon Sep 17 00:00:00 2001 From: Manoj Date: Wed, 26 Oct 2016 09:42:16 +0530 Subject: [PATCH 16/32] Changing scm url to indix org --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 5c484a1..7036d2f 100644 --- a/pom.xml +++ b/pom.xml @@ -30,8 +30,8 @@ - scm:git:git@github.com:indix-eng/apiv2-java-client.git - scm:git:git@github.com:indix-eng/apiv2-java-client.git + scm:git:git@github.com:indix/apiv2-java-client.git + scm:git:git@github.com:indix/apiv2-java-client.git git@github.com:indix-eng/apiv2-java-client.git @@ -142,4 +142,4 @@ - \ No newline at end of file + From f6a996dafe652873ed3069c3185442d2cdb2c2b2 Mon Sep 17 00:00:00 2001 From: Manoj Date: Wed, 26 Oct 2016 09:50:04 +0530 Subject: [PATCH 17/32] Fix the project urls --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 7036d2f..9011ad3 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints - https://github.com/indix-eng/apiv2-java-client/ + https://github.com/indix/indix-api-java The Apache License, Version 2.0 @@ -30,9 +30,9 @@ - scm:git:git@github.com:indix/apiv2-java-client.git - scm:git:git@github.com:indix/apiv2-java-client.git - git@github.com:indix-eng/apiv2-java-client.git + scm:git:git@github.com:indix/indix-api-java.git + scm:git:git@github.com:indix/indix-api-java.git + git@github.com:indix/indix-api-java.git From 23f619154c04b68653b9b0b7af7531b1d20815f5 Mon Sep 17 00:00:00 2001 From: Balasubramaniam B Date: Thu, 3 Nov 2016 19:01:53 +0530 Subject: [PATCH 18/32] log request uri --- src/main/java/com/indix/client/impl/IndixApiClientImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index 7595c8a..a715485 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -122,24 +122,28 @@ private URI buildURI(String resource, Query searchQuery) throws URISyntaxExcepti private String executeGET(String resource, Query searchQuery) throws URISyntaxException, IOException, IndixApiException { URI uri = buildURI(resource, searchQuery); + logger.debug(uri.toString()); return httpClient.GET(uri); } private InputStream executeGETStream(String resource, Query searchQuery) throws URISyntaxException, IOException, IndixApiException { URI uri = buildURI(resource, searchQuery); + logger.debug(uri.toString()); return httpClient.GETStream(uri); } private String executePOST(String resource, Query searchQuery) throws URISyntaxException, IOException, IndixApiException { URI uri = buildURI(resource, searchQuery); + logger.debug(uri.toString()); return httpClient.POST(uri, searchQuery.getParameters()); } private String executePOST(String resource, Query searchQuery, File file) throws URISyntaxException, IOException, IndixApiException { URI uri = buildURI(resource, searchQuery); + logger.debug(uri.toString()); // populate app_id and app_key // From 1f616be5026498f91442d44478eeba82067fc5b5 Mon Sep 17 00:00:00 2001 From: jeevan Date: Wed, 16 Nov 2016 09:26:24 +0530 Subject: [PATCH 19/32] Renamed artifactId and version in align to repo name --- README.md | 4 ++-- pom.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ffb0cb6..5c8447e 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ Add the following dependency to your pom file ```xml com.indix.api - apiv2-java-client - 1.1.0 + indix-api-java + 1.0.0 ``` diff --git a/pom.xml b/pom.xml index 9011ad3..ebed777 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ com.indix.api - apiv2-java-client - 1.1.0 + indix-api-java + 1.0.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From d2c9860816195e469d2b1411e264649a7b2cca42 Mon Sep 17 00:00:00 2001 From: Jeevan Date: Wed, 16 Nov 2016 09:53:07 +0530 Subject: [PATCH 20/32] Renamed snap-ci build status --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c8447e..0bb21ee 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/apiv2-java-client/branch/master/build_image)](https://snap-ci.com/indix/apiv2-java-client/branch/master) +# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/indix-api-java/branch/master/build_image)](https://snap-ci.com/indix/indix-api-java/branch/master) Indix API Java client Requirements From b1793fd9986e244074a54d027816c74fbfc4c17d Mon Sep 17 00:00:00 2001 From: jeevan Date: Wed, 16 Nov 2016 13:54:55 +0530 Subject: [PATCH 21/32] incorporated ashwanth comments --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5c8447e..a8d27a1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Add the following dependency to your pom file com.indix.api indix-api-java - 1.0.0 + 2.0.0 ``` diff --git a/pom.xml b/pom.xml index ebed777..ac1ca8b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api indix-api-java - 1.0.0 + 2.0.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From 2b63102240df6772cda43ec09f45b5df7efb7780 Mon Sep 17 00:00:00 2001 From: Raja Date: Fri, 9 Dec 2016 16:49:41 +0530 Subject: [PATCH 22/32] Removing appId from API Client (#19) * Removing appId dependency with api-client * Test spec updated after removing appId dependency * README updated after removing appId dependency * README updated * README.md updated as per review comment * Verison bumped to 3.0.0 --- README.md | 10 ++++----- pom.xml | 2 +- .../client/impl/IndixApiClientFactory.java | 15 +++++-------- .../indix/client/impl/IndixApiClientImpl.java | 21 ++++++------------ .../client/IndixApiClientBulkQueryTest.java | 8 +++---- .../IndixApiClientHandleExceptionsTest.java | 12 +++++----- .../client/IndixApiClientMetadataTest.java | 6 ++--- .../IndixApiClientProductDetailsTest.java | 22 +++++++++---------- .../client/IndixApiClientSearchTest.java | 22 +++++++++---------- .../client/IndixApiClientSuggestionsTest.java | 2 +- .../com/indix/tools/SubmitBulkLookup.java | 3 +-- 11 files changed, 55 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 61b69b9..de63f0d 100644 --- a/README.md +++ b/README.md @@ -15,19 +15,17 @@ Add the following dependency to your pom file com.indix.api indix-api-java - 2.0.0 + 3.0.0 ``` ##Usage : -The client needs to be first instantiated with the appropriate application id and key to be able to use -the different api endpoints. It can be done as follows: +First, the client must be instantiated with the appropriate application key (appKey). It can be done as follows: ```java - String appId = "__app_id__"; String appKey = "__app_key__"; IndixApiClient indixApiClient = IndixApiClientFactory - .newIndixApiClient(appId, appKey); + .newIndixApiClient(appKey); ``` This instance can then used to query the different endpoints and obtain responses. Different types @@ -209,5 +207,5 @@ HttpClient client = HttpClientFactory.newHttpClient(HttpClients.custom() .setSslcontext(SSLTrustCA.trustLetsEncryptRootCA()) .build()); IndixApiClient indixApiClient = IndixApiClientFactory - .newIndixApiClient(appId, appKey, client); + .newIndixApiClient(appKey, client); ``` diff --git a/pom.xml b/pom.xml index ac1ca8b..d67c02b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api indix-api-java - 2.0.0 + 3.0.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints diff --git a/src/main/java/com/indix/client/impl/IndixApiClientFactory.java b/src/main/java/com/indix/client/impl/IndixApiClientFactory.java index ffeb742..1de9c7e 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientFactory.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientFactory.java @@ -9,35 +9,32 @@ public class IndixApiClientFactory { /** - * @param appId application id * @param appKey application key * @return {@link IndixApiClient} */ - public static IndixApiClient newIndixApiClient(String appId, String appKey) { - return new IndixApiClientImpl(appId, appKey); + public static IndixApiClient newIndixApiClient(String appKey) { + return new IndixApiClientImpl(appKey); } /** * Used for mocking http client for testing purpose. - * @param appId application id * @param appKey application key * @param httpClient mock http client * @return {@link IndixApiClient} */ - public static IndixApiClient newIndixApiClient(String appId, String appKey, HttpClient httpClient) { - return new IndixApiClientImpl(appId, appKey, httpClient); + public static IndixApiClient newIndixApiClient(String appKey, HttpClient httpClient) { + return new IndixApiClientImpl(appKey, httpClient); } /** * Used for setting server scheme and host for testing purpose. - * @param appId application id * @param appKey application key * @param scheme http scheme * @param host api host to be queried * @return {@link IndixApiClient} */ - public static IndixApiClient newIndixApiClient(String appId, String appKey, String scheme, String host) { - return new IndixApiClientImpl(appId, appKey, scheme, host); + public static IndixApiClient newIndixApiClient(String appKey, String scheme, String host) { + return new IndixApiClientImpl(appKey, scheme, host); } } diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index a715485..b0a41e9 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -57,16 +57,14 @@ class IndixApiClientImpl implements IndixApiClient { // Authorization parameters // - String appId; String appKey; final static Logger logger = LoggerFactory.getLogger(IndixApiClientImpl.class); // constructors // - private IndixApiClientImpl(String appId, String appKey, HttpClient httpClient, ObjectMapper jsonMapper, + private IndixApiClientImpl(String appKey, HttpClient httpClient, ObjectMapper jsonMapper, String scheme, String host) { - this.appId = appId; this.appKey = appKey; this.httpClient = httpClient; this.jsonMapper = jsonMapper; @@ -75,27 +73,24 @@ private IndixApiClientImpl(String appId, String appKey, HttpClient httpClient, O } /** - * @param appId application id * @param appKey application key */ - public IndixApiClientImpl(String appId, String appKey) { - this(appId, appKey, HttpClientFactory.newHttpClient(), getNewObjectMapper(), SCHEME, HOST); + public IndixApiClientImpl(String appKey) { + this(appKey, HttpClientFactory.newHttpClient(), getNewObjectMapper(), SCHEME, HOST); } /** - * @param appId application id * @param appKey application key */ - public IndixApiClientImpl(String appId, String appKey, String scheme, String host) { - this(appId, appKey, HttpClientFactory.newHttpClient(), getNewObjectMapper(), scheme, host); + public IndixApiClientImpl(String appKey, String scheme, String host) { + this(appKey, HttpClientFactory.newHttpClient(), getNewObjectMapper(), scheme, host); } /** - * @param appId application id * @param appKey application key */ - public IndixApiClientImpl(String appId, String appKey, HttpClient httpClient) { - this(appId, appKey, httpClient, getNewObjectMapper(), SCHEME, HOST); + public IndixApiClientImpl(String appKey, HttpClient httpClient) { + this(appKey, httpClient, getNewObjectMapper(), SCHEME, HOST); } // getter methods @@ -114,7 +109,6 @@ private URI buildURI(String resource, Query searchQuery) throws URISyntaxExcepti .setHost(host) .setPath(resource) .setParameters(searchQuery.getParameters()) - .addParameter(APP_ID, appId) .addParameter(APP_KEY, appKey) .build(); } @@ -148,7 +142,6 @@ private String executePOST(String resource, Query searchQuery, File file) // populate app_id and app_key // List params = searchQuery.getParameters(); - params.add(new BasicNameValuePair(APP_ID, appId)); params.add(new BasicNameValuePair(APP_KEY, appKey)); return httpClient.POST(uri, params, file); diff --git a/src/test/java/com/indix/client/IndixApiClientBulkQueryTest.java b/src/test/java/com/indix/client/IndixApiClientBulkQueryTest.java index 030cfb8..798fa33 100644 --- a/src/test/java/com/indix/client/IndixApiClientBulkQueryTest.java +++ b/src/test/java/com/indix/client/IndixApiClientBulkQueryTest.java @@ -35,7 +35,7 @@ public void getBulkJobId() MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("bulkQuery-json-responses0/bulkQueryResponse.json"); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); List storeIdList = new ArrayList(); storeIdList.add(68); @@ -64,7 +64,7 @@ public void getBulkLookupJobId() MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("bulkQuery-json-responses0/bulkQueryResponse.json"); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { for (ProductsViewType resource : ProductsViewType.values()) { @@ -92,7 +92,7 @@ public void getBulkJobStatus() MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("bulkQuery-json-responses0/bulkQueryJobStatus.json"); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { JobQuery jobQuery = QueryFactory.newJobQuery() @@ -116,7 +116,7 @@ public void getBulkJobFile() MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("bulkQuery-json-responses0/bulkQueryJobOutput.jsonl.tar.gz"); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { JobQuery jobQuery = QueryFactory.newJobQuery() diff --git a/src/test/java/com/indix/client/IndixApiClientHandleExceptionsTest.java b/src/test/java/com/indix/client/IndixApiClientHandleExceptionsTest.java index 680cdbb..89eb7dd 100644 --- a/src/test/java/com/indix/client/IndixApiClientHandleExceptionsTest.java +++ b/src/test/java/com/indix/client/IndixApiClientHandleExceptionsTest.java @@ -22,7 +22,7 @@ public void handleUnauthorizedException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.UNAUTHORIZED); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); @@ -42,7 +42,7 @@ public void handleTooManyRequestsException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.TOO_MANY_REQUESTS); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); @@ -62,7 +62,7 @@ public void handlePaymentRequiredException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.PAYMENT_REQUIRED); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); @@ -82,7 +82,7 @@ public void handleIndixApiException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.INDIX_API); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); @@ -102,7 +102,7 @@ public void handleInternalServerException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.INTERNAL_SERVER); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); @@ -122,7 +122,7 @@ public void handleBadRequestException() MockExceptionHttpClient mockClientInstance = new MockExceptionHttpClient(); HttpClient mockHttpClient = mockClientInstance.getMockClient(MockExceptionHttpClient.ExceptionName.BAD_REQUEST); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SearchQuery searchQuery = QueryFactory.newSearchQuery(); diff --git a/src/test/java/com/indix/client/IndixApiClientMetadataTest.java b/src/test/java/com/indix/client/IndixApiClientMetadataTest.java index 8ff8a0f..1dd0716 100644 --- a/src/test/java/com/indix/client/IndixApiClientMetadataTest.java +++ b/src/test/java/com/indix/client/IndixApiClientMetadataTest.java @@ -28,7 +28,7 @@ public HttpClient getMockHttpClient(String resource) public void getStores() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("metadata-json-responses0/storesResponse.json")); try { @@ -48,7 +48,7 @@ public void getStores() public void getBrands() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("metadata-json-responses0/brandsResponse.json")); try { @@ -67,7 +67,7 @@ public void getBrands() public void getCategories() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("metadata-json-responses0/categoriesResponse.json")); try { diff --git a/src/test/java/com/indix/client/IndixApiClientProductDetailsTest.java b/src/test/java/com/indix/client/IndixApiClientProductDetailsTest.java index a408668..bb88c0b 100644 --- a/src/test/java/com/indix/client/IndixApiClientProductDetailsTest.java +++ b/src/test/java/com/indix/client/IndixApiClientProductDetailsTest.java @@ -26,7 +26,7 @@ public HttpClient getMockHttpClient(String resource) public void getProductDetailsSummary() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/summaryProductDetailsResponse.json")); try { @@ -46,7 +46,7 @@ public void getProductDetailsSummary() public void getProductDetailsOffersStandard() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/offersStandardProductDetailsResponse.json")); try { @@ -67,7 +67,7 @@ public void getProductDetailsOffersStandard() public void getProductDetailsOffersPremium() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/offersPremiumProductDetailsResponse.json")); try { @@ -87,7 +87,7 @@ public void getProductDetailsOffersPremium() public void getProductDetailsCatalogStandard() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/catalogStandardProductDetailsResponse.json")); try { @@ -107,7 +107,7 @@ public void getProductDetailsCatalogStandard() public void getProductDetailsCatalogPremium() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/catalogPremiumProductDetailsResponse.json")); try { @@ -129,7 +129,7 @@ public void getProductDetailsCatalogPremium() public void getProductDetailsUniversal() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { @@ -151,7 +151,7 @@ public void getProductDetailsUniversal() public void getProductDetailsSummaryShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { @@ -171,7 +171,7 @@ public void getProductDetailsSummaryShouldNotFailIfInputHasAdditionalFields() public void getProductDetailsOffersStandardShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { @@ -192,7 +192,7 @@ public void getProductDetailsOffersStandardShouldNotFailIfInputHasAdditionalFiel public void getProductDetailsOffersPremiumShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { @@ -212,7 +212,7 @@ public void getProductDetailsOffersPremiumShouldNotFailIfInputHasAdditionalField public void getProductDetailsCatalogStandardShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { @@ -232,7 +232,7 @@ public void getProductDetailsCatalogStandardShouldNotFailIfInputHasAdditionalFie public void getProductDetailsCatalogPremiumShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("productDetails-json-responses0/universalProductDetailsResponse.json")); try { diff --git a/src/test/java/com/indix/client/IndixApiClientSearchTest.java b/src/test/java/com/indix/client/IndixApiClientSearchTest.java index 50f7287..fcf4d06 100644 --- a/src/test/java/com/indix/client/IndixApiClientSearchTest.java +++ b/src/test/java/com/indix/client/IndixApiClientSearchTest.java @@ -31,7 +31,7 @@ public HttpClient getMockHttpClient(String resource) public void getProductsUniversal() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { @@ -56,7 +56,7 @@ public void getProductsUniversal() public void getProductsOffersPremium() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/offersPremiumSearchResponse.json")); try { @@ -79,7 +79,7 @@ public void getProductsOffersPremium() public void getProductsOffersStandard() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/offersStandardSearchResponse.json")); try { @@ -103,7 +103,7 @@ public void getProductsOffersStandard() public void getProductsCatalogStandard() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/catalogStandardSearchResponse.json")); try { @@ -126,7 +126,7 @@ public void getProductsCatalogStandard() public void getProductsCatalogPremium() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/catalogPremiumSearchResponse.json")); try { @@ -151,7 +151,7 @@ public void getProductsCatalogPremium() public void getProductsSummary() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/summarySearchResponse.json")); try { @@ -174,7 +174,7 @@ public void getProductsSummary() public void getProductsCatalogPremiumShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { Query searchQuery = QueryFactory.newSearchQuery() @@ -196,7 +196,7 @@ public void getProductsCatalogPremiumShouldNotFailIfInputHasAdditionalFields() public void getProductsCatalogStandardShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { @@ -219,7 +219,7 @@ public void getProductsCatalogStandardShouldNotFailIfInputHasAdditionalFields() public void getProductsOffersPremiumShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { @@ -242,7 +242,7 @@ public void getProductsOffersPremiumShouldNotFailIfInputHasAdditionalFields() public void getProductsOffersStandardShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { @@ -265,7 +265,7 @@ public void getProductsOffersStandardShouldNotFailIfInputHasAdditionalFields() public void getProductsSummaryShouldNotFailIfInputHasAdditionalFields() throws IndixApiException, IOException, URISyntaxException { - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", getMockHttpClient("search-json-responses0/universalSearchResponse.json")); try { diff --git a/src/test/java/com/indix/client/IndixApiClientSuggestionsTest.java b/src/test/java/com/indix/client/IndixApiClientSuggestionsTest.java index 19823c7..161b447 100644 --- a/src/test/java/com/indix/client/IndixApiClientSuggestionsTest.java +++ b/src/test/java/com/indix/client/IndixApiClientSuggestionsTest.java @@ -20,7 +20,7 @@ public void getSuggestions() throws IndixApiException, IOException, URISyntaxException { MockResourceHttpClient mockHttpClientInstance = new MockResourceHttpClient(); HttpClient mockHttpClient = mockHttpClientInstance.getMockClient("suggestions-json-responses0/suggestionsResponse.json"); - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", "123", mockHttpClient); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient("123", mockHttpClient); try { SuggestionsQuery suggestionsQuery = QueryFactory.newSuggestionsQuery() diff --git a/src/test/java/com/indix/tools/SubmitBulkLookup.java b/src/test/java/com/indix/tools/SubmitBulkLookup.java index db10f1d..8641030 100644 --- a/src/test/java/com/indix/tools/SubmitBulkLookup.java +++ b/src/test/java/com/indix/tools/SubmitBulkLookup.java @@ -24,9 +24,8 @@ public static void main(String[] args) throws IndixApiException, URISyntaxExcept // Create Api client // - String appId = args[0]; String appKey = args[1]; - IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient(appId, appKey); + IndixApiClient indixApiClient = IndixApiClientFactory.newIndixApiClient(appKey); // Validate input file's presence // From c19e7ba87cc8492bcced99fa52576587b90ca15e Mon Sep 17 00:00:00 2001 From: Manoj Date: Thu, 12 Jan 2017 23:43:22 +0530 Subject: [PATCH 23/32] Add maven central badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de63f0d..8306b20 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/indix-api-java/branch/master/build_image)](https://snap-ci.com/indix/indix-api-java/branch/master) +# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/indix-api-java/branch/master/build_image)](https://snap-ci.com/indix/indix-api-java/branch/master) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.indix/indix-api-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.indix/indix-api-java) Indix API Java client Requirements From 24395ee0040fb4150f904884c3e3cc8b806a68cb Mon Sep 17 00:00:00 2001 From: Manoj Date: Thu, 12 Jan 2017 23:44:13 +0530 Subject: [PATCH 24/32] Fix group id --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8306b20..e358f44 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/indix-api-java/branch/master/build_image)](https://snap-ci.com/indix/indix-api-java/branch/master) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.indix/indix-api-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.indix/indix-api-java) +# Apiv2-Java-Client [![Build Status](https://snap-ci.com/indix/indix-api-java/branch/master/build_image)](https://snap-ci.com/indix/indix-api-java/branch/master) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.indix.api/indix-api-java/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.indix.api/indix-api-java) Indix API Java client Requirements From 2aa560ec08499fe0a0140546160bd4e6e12468a2 Mon Sep 17 00:00:00 2001 From: anithakathir Date: Mon, 20 Feb 2017 18:17:38 +0530 Subject: [PATCH 25/32] Add appId in client for internal testing purposes --- .../indix/client/impl/IndixApiClientFactory.java | 5 +++-- .../com/indix/client/impl/IndixApiClientImpl.java | 14 +++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/indix/client/impl/IndixApiClientFactory.java b/src/main/java/com/indix/client/impl/IndixApiClientFactory.java index 1de9c7e..f4027d9 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientFactory.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientFactory.java @@ -29,12 +29,13 @@ public static IndixApiClient newIndixApiClient(String appKey, HttpClient httpCli /** * Used for setting server scheme and host for testing purpose. + * @param appId application id * @param appKey application key * @param scheme http scheme * @param host api host to be queried * @return {@link IndixApiClient} */ - public static IndixApiClient newIndixApiClient(String appKey, String scheme, String host) { - return new IndixApiClientImpl(appKey, scheme, host); + public static IndixApiClient newIndixApiClient(String appId, String appKey, String scheme, String host) { + return new IndixApiClientImpl(appId, appKey, scheme, host); } } diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index b0a41e9..f3d39ac 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -57,6 +57,7 @@ class IndixApiClientImpl implements IndixApiClient { // Authorization parameters // + String appId; String appKey; final static Logger logger = LoggerFactory.getLogger(IndixApiClientImpl.class); @@ -80,10 +81,12 @@ public IndixApiClientImpl(String appKey) { } /** + * @param appId application id * @param appKey application key */ - public IndixApiClientImpl(String appKey, String scheme, String host) { + public IndixApiClientImpl(String appId, String appKey, String scheme, String host) { this(appKey, HttpClientFactory.newHttpClient(), getNewObjectMapper(), scheme, host); + this.appId = appId; } /** @@ -104,11 +107,16 @@ private static ObjectMapper getNewObjectMapper() { // utility functions // private URI buildURI(String resource, Query searchQuery) throws URISyntaxException { + + List params = searchQuery.getParameters(); + if(appId != null) + params.add(new BasicNameValuePair(APP_ID, appId)); + return new URIBuilder() .setScheme(scheme) .setHost(host) .setPath(resource) - .setParameters(searchQuery.getParameters()) + .setParameters(params) .addParameter(APP_KEY, appKey) .build(); } @@ -139,7 +147,7 @@ private String executePOST(String resource, Query searchQuery, File file) URI uri = buildURI(resource, searchQuery); logger.debug(uri.toString()); - // populate app_id and app_key + // populate app_key // List params = searchQuery.getParameters(); params.add(new BasicNameValuePair(APP_KEY, appKey)); From 71888dc38072063aaad9dbaed9ea789775f6ad9e Mon Sep 17 00:00:00 2001 From: anithakathir Date: Mon, 20 Feb 2017 18:20:40 +0530 Subject: [PATCH 26/32] Bumping up minor version for appId inclusion --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e358f44..b5ce84d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Add the following dependency to your pom file com.indix.api indix-api-java - 3.0.0 + 3.1.0 ``` diff --git a/pom.xml b/pom.xml index d67c02b..dde423a 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api indix-api-java - 3.0.0 + 3.1.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From 0d0844fe6cace56e086ea23445f17611133e4c3d Mon Sep 17 00:00:00 2001 From: anithakathir Date: Tue, 21 Feb 2017 10:13:50 +0530 Subject: [PATCH 27/32] Minor update: Removing a blank line --- src/main/java/com/indix/client/impl/IndixApiClientImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java index f3d39ac..d95a1cf 100644 --- a/src/main/java/com/indix/client/impl/IndixApiClientImpl.java +++ b/src/main/java/com/indix/client/impl/IndixApiClientImpl.java @@ -107,7 +107,6 @@ private static ObjectMapper getNewObjectMapper() { // utility functions // private URI buildURI(String resource, Query searchQuery) throws URISyntaxException { - List params = searchQuery.getParameters(); if(appId != null) params.add(new BasicNameValuePair(APP_ID, appId)); From dfaf68cc416555a0cbb0d1d9b452d411f0bd9558 Mon Sep 17 00:00:00 2001 From: iambalajive Date: Wed, 18 Apr 2018 12:18:43 +0530 Subject: [PATCH 28/32] capture last recorded date for offers premium --- .../product/productAtStore/offer/ProductOfferPricing.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferPricing.java b/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferPricing.java index dbc0533..7c486e3 100644 --- a/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferPricing.java +++ b/src/main/java/com/indix/models/product/productAtStore/offer/ProductOfferPricing.java @@ -20,6 +20,7 @@ public class ProductOfferPricing extends ProductOfferBase { private String shippingText; private int maxRating; private int salesRank; + private long lastRecordedAt; public double getSalePrice() { @@ -85,4 +86,7 @@ public int getMaxRating() { public int getSalesRank() { return salesRank; } + + public long getLastRecordedAt() { return lastRecordedAt; } + } From a5cbb648e194b26456fc1a75c64c52a64f32f975 Mon Sep 17 00:00:00 2001 From: iambalajive Date: Wed, 18 Apr 2018 12:55:33 +0530 Subject: [PATCH 29/32] Adding title to offerProduct --- .../java/com/indix/models/product/OffersProduct.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/indix/models/product/OffersProduct.java b/src/main/java/com/indix/models/product/OffersProduct.java index de732e6..431b56c 100644 --- a/src/main/java/com/indix/models/product/OffersProduct.java +++ b/src/main/java/com/indix/models/product/OffersProduct.java @@ -7,7 +7,14 @@ public class OffersProduct extends SummaryProduct { private Map stores; - public Map getStores() { + public String getTitle() { + return title; + } + + private String title; + + + public Map getStores() { return stores; } } From b03e5a0fa0bc15ed44e07eddda96f0b40e8e3c80 Mon Sep 17 00:00:00 2001 From: iambalajive Date: Wed, 18 Apr 2018 13:52:17 +0530 Subject: [PATCH 30/32] Increase artifact version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dde423a..3883972 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.indix.api indix-api-java - 3.1.0 + 3.3.0 jar Indix API-V2 Java Client Java client which is used to access API V2 endpoints From e10c9b99bbcd043092ec9614ce498cab00d22805 Mon Sep 17 00:00:00 2001 From: Anithapraba Kathir Date: Wed, 18 Apr 2018 14:23:21 +0530 Subject: [PATCH 31/32] Add travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f5c99a7 --- /dev/null +++ b/.travis.yml @@ -0,0 +1 @@ +language: java \ No newline at end of file From 7553fedfc868b6336f9ce68e72c487975a92a692 Mon Sep 17 00:00:00 2001 From: Raja Date: Fri, 19 Jul 2019 09:06:46 +0530 Subject: [PATCH 32/32] Upgrade com.fasterxml.jackson.core:jackson-databind to version 2.9.9.1 or later --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3883972..677dedf 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ com.fasterxml.jackson.core jackson-databind - 2.5.4 + [2.9.9.1,)