From 2bc2d5ed3454912d317c1f48449f900d04abbd25 Mon Sep 17 00:00:00 2001 From: Samuel Bouic Date: Tue, 13 Jun 2017 11:43:37 +0200 Subject: [PATCH] Using SearchResult instance as result of searchSpecifications & scrollSpecifications --- .../java/io/kuzzle/sdk/core/Collection.java | 74 +++++++++++++++++-- .../scrollSpecificationsTest.java | 12 +-- .../searchSpecificationsTest.java | 19 +++-- 3 files changed, 86 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/kuzzle/sdk/core/Collection.java b/src/main/java/io/kuzzle/sdk/core/Collection.java index f8af2a9..1f7a1d0 100644 --- a/src/main/java/io/kuzzle/sdk/core/Collection.java +++ b/src/main/java/io/kuzzle/sdk/core/Collection.java @@ -228,7 +228,7 @@ public void onError(JSONObject error) { * @param scrollId string * @param listener Response callback */ - public void scrollSpecifications(@NonNull final String scrollId, @NonNull final ResponseListener listener) { + public void scrollSpecifications(@NonNull final String scrollId, @NonNull final ResponseListener listener) { this.scrollSpecifications(scrollId, new Options(), listener); } @@ -239,7 +239,7 @@ public void scrollSpecifications(@NonNull final String scrollId, @NonNull final * @param options Options Optional parameters * @param listener Response callback */ - public void scrollSpecifications(@NonNull final String scrollId, final Options options, @NonNull final ResponseListener listener) { + public void scrollSpecifications(@NonNull final String scrollId, final Options options, @NonNull final ResponseListener listener) { this.kuzzle.isValid(); JSONObject data = new JSONObject(); @@ -261,7 +261,36 @@ public void scrollSpecifications(@NonNull final String scrollId, final Options o @Override public void onSuccess(JSONObject response) { try { - listener.onSuccess(response.getJSONObject("result")); + JSONArray hits = response.getJSONObject("result").getJSONArray("hits"); + List docs = new ArrayList<>(); + JSONObject aggregations = null; + + for (int i = 0; i < hits.length(); i++) { + JSONObject hit = hits.getJSONObject(i); + Document doc = new Document(Collection.this, hit.getString("_id"), hit.getJSONObject("_source")); + + docs.add(doc); + } + + if (response.getJSONObject("result").has("scrollId")) { + options.setScrollId(response.getJSONObject("result").getString("scrollId")); + } + + if (response.getJSONObject("result").has("aggregations")) { + aggregations = response.getJSONObject("result").getJSONObject("aggregations"); + } + + SearchResult result = new SearchResult( + Collection.this, + response.getJSONObject("result").getInt("total"), + docs, + aggregations, + options, + new JSONObject(), + options.getPrevious() + ); + + listener.onSuccess(result); } catch (JSONException e) { throw new RuntimeException(e); } @@ -282,7 +311,7 @@ public void onError(JSONObject error) { * * @param listener Response callback */ - public void searchSpecifications(@NonNull final ResponseListener listener) { + public void searchSpecifications(@NonNull final ResponseListener listener) { this.searchSpecifications(null, new Options(), listener); } @@ -292,7 +321,7 @@ public void searchSpecifications(@NonNull final ResponseListener lis * @param filters JSONObject Optional filters in ElasticSearch Query DSL format * @param listener Response callback */ - public void searchSpecifications(final JSONObject filters, @NonNull final ResponseListener listener) { + public void searchSpecifications(final JSONObject filters, @NonNull final ResponseListener listener) { this.searchSpecifications(filters, new Options(), listener); } @@ -302,7 +331,7 @@ public void searchSpecifications(final JSONObject filters, @NonNull final Respon * @param options Options Optional parameters * @param listener Response callback */ - public void searchSpecifications(final Options options, @NonNull final ResponseListener listener) { + public void searchSpecifications(final Options options, @NonNull final ResponseListener listener) { this.searchSpecifications(null, options, listener); } @@ -313,7 +342,7 @@ public void searchSpecifications(final Options options, @NonNull final ResponseL * @param options Options Optional parameters * @param listener Response callback */ - public void searchSpecifications(final JSONObject filters, final Options options, @NonNull final ResponseListener listener) { + public void searchSpecifications(final JSONObject filters, final Options options, @NonNull final ResponseListener listener) { this.kuzzle.isValid(); JSONObject data = new JSONObject(); @@ -335,7 +364,36 @@ public void searchSpecifications(final JSONObject filters, final Options options @Override public void onSuccess(JSONObject response) { try { - listener.onSuccess(response.getJSONObject("result")); + JSONArray hits = response.getJSONObject("result").getJSONArray("hits"); + List docs = new ArrayList<>(); + JSONObject aggregations = null; + + for (int i = 0; i < hits.length(); i++) { + JSONObject hit = hits.getJSONObject(i); + Document doc = new Document(Collection.this, hit.getString("_id"), hit.getJSONObject("_source")); + + docs.add(doc); + } + + if (response.getJSONObject("result").has("scrollId")) { + options.setScrollId(response.getJSONObject("result").getString("scrollId")); + } + + if (response.getJSONObject("result").has("aggregations")) { + aggregations = response.getJSONObject("result").getJSONObject("aggregations"); + } + + SearchResult result = new SearchResult( + Collection.this, + response.getJSONObject("result").getInt("total"), + docs, + aggregations, + options, + filters, + options.getPrevious() + ); + + listener.onSuccess(result); } catch (JSONException e) { throw new RuntimeException(e); } diff --git a/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/scrollSpecificationsTest.java b/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/scrollSpecificationsTest.java index 56fc980..01bd1f4 100644 --- a/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/scrollSpecificationsTest.java +++ b/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/scrollSpecificationsTest.java @@ -16,6 +16,7 @@ import io.kuzzle.sdk.enums.Mode; import io.kuzzle.sdk.listeners.OnQueryDoneListener; import io.kuzzle.sdk.listeners.ResponseListener; +import io.kuzzle.sdk.responses.SearchResult; import io.kuzzle.sdk.state.States; import io.kuzzle.test.testUtils.KuzzleExtend; import io.socket.client.Socket; @@ -132,7 +133,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { " }\n" + " }\n" + " ],\n" + - " \"total\": 2,\n" + + " \"total\": 3,\n" + " \"scrollId\": \"1337\"\n" + " }" + "}"); @@ -143,12 +144,13 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(kuzzle).query(any(Kuzzle.QueryArgs.class), any(JSONObject.class), any(Options.class), any(OnQueryDoneListener.class)); - collection.scrollSpecifications(scrollId, new ResponseListener() { + collection.scrollSpecifications(scrollId, new ResponseListener() { @Override - public void onSuccess(JSONObject result) { + public void onSuccess(SearchResult result) { try { - assertEquals(result.getJSONArray("hits").length(), 2); - assertEquals(result.getJSONArray("hits").getJSONObject(1).getJSONObject("_source").getJSONObject("validation").getBoolean("strict"), false); + assertEquals(result.getTotal(), 3); + assertEquals(result.getDocuments().size(), 2); + assertEquals(result.getDocuments().get(1).getContent().getJSONObject("validation").getBoolean("strict"), false); } catch (JSONException e) { throw new RuntimeException(e); } diff --git a/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/searchSpecificationsTest.java b/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/searchSpecificationsTest.java index c2227e3..bd1a1bd 100644 --- a/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/searchSpecificationsTest.java +++ b/src/test/java/io/kuzzle/test/core/KuzzleDataCollection/searchSpecificationsTest.java @@ -132,7 +132,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { " }\n" + " }\n" + " ],\n" + - " \"total\": 2,\n" + + " \"total\": 3,\n" + " \"scrollId\": \"1337\"\n" + " }" + "}"); @@ -143,13 +143,20 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(kuzzle).query(any(io.kuzzle.sdk.core.Kuzzle.QueryArgs.class), any(JSONObject.class), any(Options.class), any(OnQueryDoneListener.class)); - collection.searchSpecifications(filters, new ResponseListener() { + Options options = new Options(); + options + .setFrom((long) 0) + .setSize((long) 2) + .setScroll("1m"); + + collection.searchSpecifications(filters, new ResponseListener() { @Override - public void onSuccess(JSONObject result) { + public void onSuccess(SearchResult result) { try { - assertEquals(result.getJSONArray("hits").length(), 2); - assertEquals(result.getJSONArray("hits").getJSONObject(1).getJSONObject("_source").getJSONObject("validation").getBoolean("strict"), false); - assertEquals(result.getString("scrollId"), "1337"); + assertEquals(result.getTotal(), 3); + assertEquals(result.getDocuments().size(), 2); + assertEquals(result.getDocuments().get(1).getContent().getJSONObject("validation").getBoolean("strict"), false); + assertEquals(result.getOptions().getScrollId(), "1337"); } catch (JSONException e) { throw new RuntimeException(e); }