Only show results of the current search query.
http://gwt-code-reviews.appspot.com/270801/show


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7788 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockQueryWidget.java b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockQueryWidget.java
index 552f692..1a6ef7a 100644
--- a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockQueryWidget.java
+++ b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockQueryWidget.java
@@ -25,6 +25,7 @@
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiFactory;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Widget;
@@ -59,10 +60,17 @@
     queryField.setText("G");
 
     // Add a handler to send the name to the server
+    final Timer requestTimer = new Timer() {
+      @Override
+      public void run() {
+        updater.update();
+      }
+    };
     queryField.addKeyUpHandler(new KeyUpHandler() {
       public void onKeyUp(KeyUpEvent event) {
         Columns.nameCell.setHighlightRegex(getSearchQuery());
-        updater.update();
+        // Delay the request until the user stops typing.
+        requestTimer.schedule(250);
       }
     });
   }
diff --git a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockSample.java b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockSample.java
index 30d76ef..2aad2f7 100644
--- a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockSample.java
+++ b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/client/StockSample.java
@@ -177,11 +177,14 @@
    * @param response the stock response
    */
   public void processStockResponse(StockResponse response) {
-    // Update the search list.
+    // Update the search list if the query has not changed.
     StockQuoteList searchResults = response.getSearchResults();
-    searchListModel.updateDataSize(response.getNumSearchResults(), true);
-    searchListModel.updateViewData(searchResults.getStartIndex(),
-        searchResults.size(), searchResults);
+    String searchQuery = queryWidget.getSearchQuery();
+    if (searchQuery != null && searchQuery.equals(response.getSearchQuery())) {
+      searchListModel.updateDataSize(response.getNumSearchResults(), true);
+      searchListModel.updateViewData(searchResults.getStartIndex(),
+          searchResults.size(), searchResults);
+    }
 
     // Update the favorites list.
     updateFavorites(response);
diff --git a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/server/StockServiceImpl.java b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/server/StockServiceImpl.java
index 6af69bb..ccaed91 100644
--- a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/server/StockServiceImpl.java
+++ b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/server/StockServiceImpl.java
@@ -158,8 +158,9 @@
     PlayerStatus player = ensurePlayer();
     player.addFavorite(ticker);
     Result favorites = queryFavorites(favoritesRange);
-    player.addStatus(player.getDisplayName() + " added " + ticker + " to favorites");
-    return createStockResponse(player, null, favorites, null, null);
+    player.addStatus(player.getDisplayName() + " added " + ticker
+        + " to favorites");
+    return createStockResponse(player, null, null, favorites, null, null);
   }
 
   public Result getSectorQuotes(String sector, Range sectorRange) {
@@ -187,19 +188,20 @@
     Result searchResults = getSearchQuotes(query, searchRange);
     Result favorites = queryFavorites(favoritesRange);
     String sectorName = request.getSector();
-    Result sector = sectorRange != null ?
-        getSectorQuotes(sectorName, sectorRange) : null;
+    Result sector = sectorRange != null ? getSectorQuotes(sectorName,
+        sectorRange) : null;
 
-    return createStockResponse(player, searchResults, favorites, sectorName,
-        sector);
+    return createStockResponse(player, request.getSearchQuery(), searchResults,
+        favorites, sectorName, sector);
   }
 
   public StockResponse removeFavorite(String ticker, Range favoritesRange) {
     PlayerStatus player = ensurePlayer();
     player.removeFavorite(ticker);
     Result favorites = queryFavorites(favoritesRange);
-    player.addStatus(player.getDisplayName() + " removed " + ticker + " from favorites");
-    return createStockResponse(player, null, favorites, null, null);
+    player.addStatus(player.getDisplayName() + " removed " + ticker
+        + " from favorites");
+    return createStockResponse(player, null, null, favorites, null, null);
   }
 
   public Transaction transact(Transaction transaction)
@@ -238,6 +240,7 @@
    * Create a stock response, updating the current user's net worth.
    * 
    * @param player the player info
+   * @param searchQuery the original search query
    * @param searchResults the search results
    * @param favorites the users favorites
    * @param sectorName the name of the sector
@@ -245,8 +248,8 @@
    * @return a {@link StockResponse}
    */
   private StockResponse createStockResponse(PlayerStatus player,
-      Result searchResults, Result favorites, String sectorName,
-      Result sectorResults) {
+      String searchQuery, Result searchResults, Result favorites,
+      String sectorName, Result sectorResults) {
     // Default to no search results.
     if (searchResults == null) {
       searchResults = new Result(null, 0);
@@ -271,7 +274,7 @@
         return o2.getNetWorth() - o1.getNetWorth();
       }
     });
-    StockResponse response = new StockResponse(player.copy(),
+    StockResponse response = new StockResponse(player.copy(), searchQuery,
         searchResults.quotes, favorites.quotes, sectorName != null ? sectorName
             : null, sectorResults.quotes, searchResults.numRows,
         favorites.numRows, sectorResults.numRows, playerInfo);
diff --git a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/shared/StockResponse.java b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/shared/StockResponse.java
index 56db23e..7f940fa 100644
--- a/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/shared/StockResponse.java
+++ b/bikeshed/src/com/google/gwt/sample/bikeshed/stocks/shared/StockResponse.java
@@ -26,6 +26,7 @@
   /**
    * The amount of available cash in pennies.
    */
+  private String searchQuery;
   private StockQuoteList favorites;
   private int numFavorites;
   private int numSearchResults;
@@ -36,11 +37,12 @@
   private PlayerInfo player;
   private List<PlayerInfo> playerInfo;
 
-  public StockResponse(PlayerInfo player, StockQuoteList searchResults,
-      StockQuoteList favorites, String sectorName, StockQuoteList sector,
-      int numSearchResults, int numFavorites, int numSector,
-      List<PlayerInfo> playerInfo) {
+  public StockResponse(PlayerInfo player, String searchQuery,
+      StockQuoteList searchResults, StockQuoteList favorites,
+      String sectorName, StockQuoteList sector, int numSearchResults,
+      int numFavorites, int numSector, List<PlayerInfo> playerInfo) {
     this.player = player;
+    this.searchQuery = searchQuery;
     this.searchResults = searchResults;
     this.favorites = favorites;
     this.sectorName = sectorName;
@@ -93,6 +95,10 @@
     return playerInfo;
   }
 
+  public String getSearchQuery() {
+    return searchQuery;
+  }
+
   public StockQuoteList getSearchResults() {
     return searchResults;
   }