Author: al Date: Tue Sep 25 12:28:16 2012 New Revision: 1389831 URL: http://svn.apache.org/viewvc?rev=1389831&view=rev Log: Set some timeout to webclient search requests
By Vincente J. Ruiz Jurado (https://reviews.apache.org/r/6885/) Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/JsoSearchBuilderImpl.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/RemoteSearchService.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchBuilder.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchService.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchServiceImpl.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SimpleSearch.java incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/testing/FakeSearchService.java Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/JsoSearchBuilderImpl.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/JsoSearchBuilderImpl.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/JsoSearchBuilderImpl.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/JsoSearchBuilderImpl.java Tue Sep 25 12:28:16 2012 @@ -89,7 +89,7 @@ public final class JsoSearchBuilderImpl } @Override - public void search(final Callback callback) { + public Request search(final Callback callback) { Preconditions.checkArgument(searchRequest != null, "call SearchBuilder.newSearch method to construct a new query"); Preconditions.checkArgument(searchRequest.getQuery() != null, "new query should be set"); @@ -130,9 +130,10 @@ public final class JsoSearchBuilderImpl }); try { - requestBuilder.send(); + return requestBuilder.send(); } catch (RequestException e) { callback.onFailure(e.getMessage()); + return null; } } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/RemoteSearchService.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/RemoteSearchService.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/RemoteSearchService.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/RemoteSearchService.java Tue Sep 25 12:28:16 2012 @@ -17,6 +17,8 @@ package org.waveprotocol.box.webclient.search; +import com.google.gwt.http.client.Request; + /** * Implementation of {@link SearchService}. * @@ -35,8 +37,8 @@ public final class RemoteSearchService i } @Override - public void search(String query, int index, int numResults, Callback callback) { - searcher.newSearch().setQuery(query).setIndex(index).setNumResults(numResults) + public Request search(String query, int index, int numResults, Callback callback) { + return searcher.newSearch().setQuery(query).setIndex(index).setNumResults(numResults) .search(callback); } } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchBuilder.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchBuilder.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchBuilder.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchBuilder.java Tue Sep 25 12:28:16 2012 @@ -17,6 +17,8 @@ package org.waveprotocol.box.webclient.search; +import com.google.gwt.http.client.Request; + import org.waveprotocol.box.webclient.search.SearchService.Callback; /** @@ -52,7 +54,8 @@ public interface SearchBuilder { * Performs a full text search on the waves. * * @param callback the callback through which the search query results are returned. + * @return the http request */ - void search(final Callback callback); + Request search(final Callback callback); } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchService.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchService.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchService.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchService.java Tue Sep 25 12:28:16 2012 @@ -17,6 +17,8 @@ package org.waveprotocol.box.webclient.search; +import com.google.gwt.http.client.Request; + import org.waveprotocol.wave.model.id.WaveId; import org.waveprotocol.wave.model.util.ValueUtils; import org.waveprotocol.wave.model.wave.ParticipantId; @@ -157,5 +159,5 @@ public interface SearchService { * @param callback callback through which the search query results are * returned. */ - void search(String query, int index, int numResults, Callback callback); + Request search(String query, int index, int numResults, Callback callback); } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchServiceImpl.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchServiceImpl.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchServiceImpl.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SearchServiceImpl.java Tue Sep 25 12:28:16 2012 @@ -18,6 +18,8 @@ package org.waveprotocol.box.webclient.search; +import com.google.gwt.http.client.Request; + /** * Implementation of {@link SearchService}. * @@ -26,10 +28,10 @@ package org.waveprotocol.box.webclient.s public class SearchServiceImpl implements SearchService { public static SearchBuilder SEARCH_BUILDER = JsoSearchBuilderImpl.create(); - + @Override - public void search(String query, int index, int numResults, Callback callback) { - SEARCH_BUILDER.newSearch().setQuery(query).setIndex(index).setNumResults(numResults) + public Request search(String query, int index, int numResults, Callback callback) { + return SEARCH_BUILDER.newSearch().setQuery(query).setIndex(index).setNumResults(numResults) .search(callback); } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SimpleSearch.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SimpleSearch.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SimpleSearch.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/SimpleSearch.java Tue Sep 25 12:28:16 2012 @@ -18,6 +18,8 @@ package org.waveprotocol.box.webclient.s import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.gwt.http.client.Request; +import com.google.gwt.user.client.Window; import org.waveprotocol.box.webclient.search.SearchService.Callback; import org.waveprotocol.box.webclient.search.SearchService.DigestSnapshot; @@ -200,6 +202,12 @@ public final class SimpleSearch implemen /** Total size of the search result. */ private int total = 0; + private Request previousRequest; + + private String previousQuery; + + private int previousSize; + @VisibleForTesting SimpleSearch(SearchService searcher, WaveStore store) { this.searcher = searcher; @@ -245,11 +253,20 @@ public final class SimpleSearch implemen @Override public void find(String query, int size) { - Callback request = new Callback() { + if (previousRequest != null && previousRequest.isPending()) { + if (query.equals(previousQuery) && size == previousSize) { + // Same query, we should wait to the response + return; + } + } + previousQuery = query; + previousSize = size; + Callback callback = new Callback() { @Override public void onFailure(String message) { if (outstanding == this) { outstanding = null; + previousRequest = null; handleFailure(message); } } @@ -258,18 +275,19 @@ public final class SimpleSearch implemen public void onSuccess(int total, List<DigestSnapshot> snapshots) { if (outstanding == this) { outstanding = null; + previousRequest = null; handleSuccess(total, 0, snapshots); } } }; if (outstanding == null) { - outstanding = request; - searcher.search(query, 0, size, request); + outstanding = callback; + previousRequest = searcher.search(query, 0, size, callback); fireOnStateChanged(); } else { - outstanding = request; - searcher.search(query, 0, size, request); + outstanding = callback; + previousRequest = searcher.search(query, 0, size, callback); } } Modified: incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/testing/FakeSearchService.java URL: http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/testing/FakeSearchService.java?rev=1389831&r1=1389830&r2=1389831&view=diff ============================================================================== --- incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/testing/FakeSearchService.java (original) +++ incubator/wave/trunk/src/org/waveprotocol/box/webclient/search/testing/FakeSearchService.java Tue Sep 25 12:28:16 2012 @@ -16,6 +16,7 @@ package org.waveprotocol.box.webclient.search.testing; import com.google.common.base.Joiner; +import com.google.gwt.http.client.Request; import org.waveprotocol.box.webclient.search.SearchService; import org.waveprotocol.wave.client.scheduler.Scheduler.Task; @@ -98,7 +99,7 @@ public final class FakeSearchService imp } @Override - public void search(String query, final int index, final int numResults, final Callback callback) { + public Request search(String query, final int index, final int numResults, final Callback callback) { timer.scheduleDelayed(new Task() { @Override public void execute() { @@ -107,5 +108,6 @@ public final class FakeSearchService imp callback.onSuccess(canned.size(), canned.subList(from, to)); } }, FAKE_DELAY_MS); + return null; } }
