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


Reply via email to