.classpath | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/AbstractSearchStrategy.java | 11 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java | 204 ++++------ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/EnhancedSearchBar.java | 81 ++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/FavoritesSearchStrategy.java | 16 5 files changed, 153 insertions(+), 161 deletions(-)
New commits: commit 46060c5ceb4b90f87ba735ae59fc2863da6ffa33 Author: Jay Shaughnessy jshaughn@redhat.com Date: Thu Jun 21 12:57:04 2012 -0400
Add FocusHandler in an attempt to get the picklist to display on first click. This didn't work, what we really need is a keypress. But simulating a KeyPressEvent didn't work in my initial attempt.
The FocusHandler replaced the need for the initialize logic. We can add that back in if we need it later.
Removed the unnecessary getSearchSuggestions().
Turned off autoFetch, we fetch manually.
diff --git a/.classpath b/.classpath index 76e080c..48c3a33 100644 --- a/.classpath +++ b/.classpath @@ -241,7 +241,7 @@ <classpathentry exported="true" kind="var" path="M2_REPO/org/jboss/jbossws/jbossws-native-core/3.1.1.GA/jbossws-native-core-3.1.1.GA.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/org/apache/maven/maven-project/2.0.8/maven-project-2.0.8.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/org/apache/maven/maven-plugin-api/2.0.8/maven-plugin-api-2.0.8.jar"/> - <classpathentry exported="true" kind="var" path="M2_REPO/org/codehaus/swizzle/1.6.1/swizzle-confluence-1.6.1.jar"/> + <classpathentry kind="var" path="M2_REPO/org/codehaus/swizzle/swizzle-confluence/1.6.1/swizzle-confluence-1.6.1.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/org/jvnet/inflector/0.7.0/inflector-0.7.0.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/net/augeas/augeas/0.0.2/augeas-0.0.2.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/org/json/json/20080701/json-20080701.jar"/> diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/AbstractSearchStrategy.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/AbstractSearchStrategy.java index 4718fd1..bfd0bd7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/AbstractSearchStrategy.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/AbstractSearchStrategy.java @@ -18,9 +18,11 @@ */ package org.rhq.enterprise.gui.coregui.client.searchbar;
+import com.smartgwt.client.widgets.form.fields.events.FocusEvent; import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; + import org.rhq.core.domain.auth.Subject; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.Messages; @@ -56,9 +58,6 @@ public abstract class AbstractSearchStrategy implements RecordClickHandler, Cel subject = UserSessionManager.getSessionSubject(); }
- - public abstract void initialize(); - /** * Handle the key press event in the search bar. Must be overridden in subclass. * @param keyUpEvent @@ -66,6 +65,12 @@ public abstract class AbstractSearchStrategy implements RecordClickHandler, Cel public abstract void searchKeyUpHandler(KeyUpEvent keyUpEvent);
/** + * Handle the focus event in the search bar. Must be overridden in subclass. + * @param focusEvent + */ + public abstract void searchFocusHandler(FocusEvent focusEvent); + + /** * Search results can have different heights (i.e. 1 row or 2 rows). Must be overridden * in subclass. * @return height in pixels diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java index 787144e..1e61737 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java @@ -24,6 +24,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.widgets.form.fields.ComboBoxItem; +import com.smartgwt.client.widgets.form.fields.events.FocusEvent; import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; @@ -97,7 +98,7 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { String clickedExpression = event.getRecord().getAttribute(ATTR_NAME); searchBar.getSearchComboboxItem().setValue(clickedExpression); if (null != clickedExpression && clickedExpression.length() > 0) { - getSearchSuggestions(SearchSubsystem.RESOURCE, clickedExpression, clickedExpression.length()); + getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, clickedExpression, clickedExpression.length()); } } } @@ -132,6 +133,19 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { }
@Override + public void searchFocusHandler(FocusEvent event) { + Log.debug("focus in BasicSearchStrategy"); + String searchExpression = searchBar.getSearchComboboxItem().getValueAsString(); + if (null != searchExpression && searchExpression.length() > 0) { + getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, + searchBar.getSearchComboboxItem().getValueAsString(), searchBar.getSearchComboboxItem() + .getValueAsString().length()); + } else { + getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); + } + } + + @Override public void searchKeyUpHandler(KeyUpEvent keyUpEvent) { Log.debug("Keyup in BasicSearchStrategy: " + keyUpEvent.getKeyName()); String searchExpression = searchBar.getSearchComboboxItem().getValueAsString(); @@ -140,7 +154,7 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { searchBar.getSearchComboboxItem().getValueAsString(), searchBar.getSearchComboboxItem() .getValueAsString().length()); } else { - getSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); + getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); }
} @@ -165,7 +179,6 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { public void onSuccess(List<SearchSuggestion> results) { ComboBoxItem comboBox = searchBar.getSearchComboboxItem(); DataSource ds = comboBox.getOptionDataSource(); - boolean dofetch = false;
if (null == ds) { ds = new DataSource(); @@ -181,7 +194,6 @@ public class BasicSearchStrategy extends AbstractSearchStrategy {
} else { ds.invalidateCache(); - dofetch = true; }
for (SearchSuggestion searchSuggestion : results) { @@ -197,65 +209,10 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { ds.addData(record); }
- if (dofetch) { - comboBox.fetchData(); - } - - long suggestFetchTime = System.currentTimeMillis() - suggestStart; - Log.debug(results.size() + " suggestions searches fetched in: " + suggestFetchTime + "ms"); - } - - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to retrieve search suggestion", caught); - } - - }); - } - - public void getSearchSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition) { - - final long suggestStart = System.currentTimeMillis(); - - searchService.getTabAwareSuggestions(searchSubsystem, expression, caretPosition, null, - new AsyncCallback<List<SearchSuggestion>>() { - - public void onSuccess(List<SearchSuggestion> results) { - ComboBoxItem comboBox = searchBar.getSearchComboboxItem(); - DataSource ds = comboBox.getOptionDataSource(); - boolean newDs = false; - - if (null == ds) { - ds = new DataSource(); - ds.setClientOnly(true); - DataSourceTextField idField = new DataSourceTextField(ATTR_ID, "Id"); - idField.setPrimaryKey(true); - DataSourceTextField valueField = new DataSourceTextField(ATTR_VALUE, "Value"); - DataSourceTextField kindField = new DataSourceTextField(ATTR_KIND, "Kind"); - DataSourceTextField nameField = new DataSourceTextField(ATTR_NAME, "Name"); - ds.setFields(valueField, kindField, nameField); - - comboBox.setOptionDataSource(ds); - newDs = true; - - } else { - ds.invalidateCache(); - } - - for (SearchSuggestion searchSuggestion : results) { - Log.debug("search Suggestions: " + searchSuggestion.getKind() + ", " - + searchSuggestion.getValue() + ", " + searchSuggestion.getLabel()); - ListGridRecord record = new ListGridRecord(); - record.setAttribute(ATTR_ID, searchSuggestion.getValue()); - if (null != searchSuggestion.getKind()) { - record.setAttribute(ATTR_KIND, searchSuggestion.getKind().getDisplayName()); - } - record.setAttribute(ATTR_NAME, searchSuggestion.getLabel()); - record.setAttribute(ATTR_VALUE, searchSuggestion.getValue()); - ds.addData(record); - } - - if (!newDs) { + try { comboBox.fetchData(); + } catch (Exception e) { + Log.debug("Caught exception on fetchData: " + e); }
long suggestFetchTime = System.currentTimeMillis() - suggestStart; @@ -269,9 +226,4 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { }); }
- @Override - public void initialize() { - getSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); - } - } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/EnhancedSearchBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/EnhancedSearchBar.java index 7f33531..b4852d6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/EnhancedSearchBar.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/EnhancedSearchBar.java @@ -18,17 +18,22 @@ */ package org.rhq.enterprise.gui.coregui.client.searchbar;
+import java.util.EnumMap; + import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.TextMatchStyle; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.fields.ComboBoxItem; import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.form.fields.events.FocusEvent; +import com.smartgwt.client.widgets.form.fields.events.FocusHandler; import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.toolbar.ToolStripButton; + import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.search.SavedSearch; import org.rhq.core.domain.search.SearchSubsystem; @@ -41,8 +46,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.SearchGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import java.util.EnumMap; - /** * The class defines the UI component of the search bar. * Behavior related to the retrieving/saving of searches is delegated to the Search Strategies. @@ -54,7 +57,7 @@ import java.util.EnumMap; * @author Mike Thompson */ public class EnhancedSearchBar extends ToolStrip { - private static final Messages MSG = CoreGUI.getMessages(); + private static final Messages MSG = CoreGUI.getMessages(); private SearchSubsystem searchSubsystem; private Integer currentSearchId = 0; private ToolStripButton saveSearchButton; @@ -64,27 +67,29 @@ public class EnhancedSearchBar extends ToolStrip { private final FavoritesSearchStrategy favoritesSearchStrategy; private final BasicSearchStrategy basicSearchStrategy;
- private final SearchGWTServiceAsync searchService = GWTServiceLookup.getSearchService(); + private final SearchGWTServiceAsync searchService = GWTServiceLookup.getSearchService(); + + enum SearchMode { + BASIC_SEARCH_MODE, SAVED_SEARCH_MODE + }
- enum SearchMode {BASIC_SEARCH_MODE, SAVED_SEARCH_MODE} private SearchMode searchMode = SearchMode.BASIC_SEARCH_MODE;
/** * The enumMap will act as a simple state machine defining the mappings of search strategy behavior and * eliminating any if logic. */ - private EnumMap<SearchMode,AbstractSearchStrategy> searchStrategies = new EnumMap<SearchMode, AbstractSearchStrategy>(SearchMode.class); - - + private EnumMap<SearchMode, AbstractSearchStrategy> searchStrategies = new EnumMap<SearchMode, AbstractSearchStrategy>( + SearchMode.class);
public EnhancedSearchBar(SearchSubsystem searchSubsystem) { this(searchSubsystem, null); }
public EnhancedSearchBar(SearchSubsystem searchSubsystem, String initialSearchText) { - if(null == searchSubsystem){ + if (null == searchSubsystem) { this.searchSubsystem = SearchSubsystem.RESOURCE; // default to resource - }else { + } else { this.searchSubsystem = searchSubsystem; } setAutoHeight(); @@ -96,13 +101,13 @@ public class EnhancedSearchBar extends ToolStrip { favoritesSearchStrategy = new FavoritesSearchStrategy(this); basicSearchStrategy = new BasicSearchStrategy(this); // now we can fill our enumMap - searchStrategies.put(SearchMode.BASIC_SEARCH_MODE, basicSearchStrategy ); - searchStrategies.put(SearchMode.SAVED_SEARCH_MODE, favoritesSearchStrategy ); - + searchStrategies.put(SearchMode.BASIC_SEARCH_MODE, basicSearchStrategy); + searchStrategies.put(SearchMode.SAVED_SEARCH_MODE, favoritesSearchStrategy);
searchComboboxItem.setWidth(670); searchComboboxItem.setBrowserSpellCheck(false); - searchComboboxItem.setAutoFetchData(true); + //we manually fetch each time we update the picklist values + searchComboboxItem.setAutoFetchData(false); searchComboboxItem.setFetchDelay(300); searchComboboxItem.setCompleteOnTab(true);
@@ -117,7 +122,7 @@ public class EnhancedSearchBar extends ToolStrip { searchComboboxItem.addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent keyUpEvent) { - Log.debug("onKeyUp search Mode: "+ searchMode); + Log.debug("onKeyUp search Mode: " + searchMode);
getSearchStrategy().searchKeyUpHandler(keyUpEvent); if (keyUpEvent.getKeyName().equals("Enter")) { @@ -127,6 +132,15 @@ public class EnhancedSearchBar extends ToolStrip { } });
+ searchComboboxItem.addFocusHandler(new FocusHandler() { + @Override + public void onFocus(FocusEvent event) { + Log.debug("onFocus search Mode: " + searchMode); + + getSearchStrategy().searchFocusHandler(event); + } + }); + searchComboboxItem.setPickListProperties(pickListGrid); addFormItem(searchComboboxItem);
@@ -158,18 +172,14 @@ public class EnhancedSearchBar extends ToolStrip { // set the default search provider switchToBasicSearchMode();
- // do any initialization - getSearchStrategy().initialize(); - this.draw(); }
- - private void saveFavoriteSearch(){ - Log.debug("Saving Favorite Search: "+saveSearchTextItem.getValueAsString()); - createSavedSearch(saveSearchTextItem.getValueAsString(), searchComboboxItem.getValueAsString()); - toggleFavoriteSearch(); - } + private void saveFavoriteSearch() { + Log.debug("Saving Favorite Search: " + saveSearchTextItem.getValueAsString()); + createSavedSearch(saveSearchTextItem.getValueAsString(), searchComboboxItem.getValueAsString()); + toggleFavoriteSearch(); + }
public SearchMode getSearchMode() { return searchMode; @@ -179,30 +189,29 @@ public class EnhancedSearchBar extends ToolStrip { this.searchMode = searchMode; }
- /** * This is the one method where the searchMode state is allowed to change. */ - public void toggleFavoriteSearch(){ - if(getSearchMode().equals(SearchMode.SAVED_SEARCH_MODE)){ + public void toggleFavoriteSearch() { + if (getSearchMode().equals(SearchMode.SAVED_SEARCH_MODE)) { switchToBasicSearchMode(); - }else { + } else { switchToSavedSearchMode(); }
- Log.debug("toggleFavorites searchMode set to: "+searchMode); + Log.debug("toggleFavorites searchMode set to: " + searchMode); configureCommonHandlers();
}
- public void switchToBasicSearchMode(){ + public void switchToBasicSearchMode() { setSearchMode(SearchMode.BASIC_SEARCH_MODE); saveSearchButton.setIcon(IconEnum.STAR_OFF.getIcon16x16Path()); saveSearchTextItem.hide(); configureCommonHandlers(); }
- public void switchToSavedSearchMode(){ + public void switchToSavedSearchMode() { setSearchMode(SearchMode.SAVED_SEARCH_MODE); saveSearchButton.setIcon(IconEnum.STAR_ON.getIcon16x16Path()); saveSearchTextItem.show(); @@ -219,12 +228,10 @@ public class EnhancedSearchBar extends ToolStrip { pickListGrid.redraw(); }
- - public String getValue(){ + public String getValue() { return searchComboboxItem.getValueAsString(); }
- private void createSavedSearch(final String name, final String pattern) { Subject subject = UserSessionManager.getSessionSubject(); SavedSearch newSavedSearch = new SavedSearch(searchSubsystem, name, pattern, subject); @@ -232,24 +239,22 @@ public class EnhancedSearchBar extends ToolStrip { @Override public void onSuccess(Integer newSavedSearchId) { currentSearchId = newSavedSearchId; - Message message = new Message("Successfully Saved Search: "+ name, Message.Severity.Info); + Message message = new Message("Successfully Saved Search: " + name, Message.Severity.Info); CoreGUI.getMessageCenter().notify(message); }
@Override public void onFailure(Throwable caught) { - Message message = new Message("Failure to Save Search "+name, Message.Severity.Error); + Message message = new Message("Failure to Save Search " + name, Message.Severity.Error); CoreGUI.getMessageCenter().notify(message); } }); }
- public AbstractSearchStrategy getSearchStrategy() { return searchStrategies.get(searchMode); }
- public ComboBoxItem getSearchComboboxItem() { return searchComboboxItem; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/FavoritesSearchStrategy.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/FavoritesSearchStrategy.java index 2386785..a04a000 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/FavoritesSearchStrategy.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/FavoritesSearchStrategy.java @@ -18,13 +18,17 @@ */ package org.rhq.enterprise.gui.coregui.client.searchbar;
+import java.util.List; + import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceIntegerField; import com.smartgwt.client.data.fields.DataSourceTextField; +import com.smartgwt.client.widgets.form.fields.events.FocusEvent; import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; + import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.SavedSearchCriteria; import org.rhq.core.domain.search.SavedSearch; @@ -32,8 +36,6 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.util.Log;
-import java.util.List; - /** * Search Strategy for the Favorite Saved Searches. * If you wish to save your searches for later use this search strategy @@ -89,6 +91,11 @@ public class FavoritesSearchStrategy extends AbstractSearchStrategy { }
+ @Override + public void searchFocusHandler(FocusEvent focusEvent) { + // nothing currently + } + private void populateSearchComboboxSavedSearchesWithAutoComplete(){
SavedSearchCriteria savedSearchCriteria = new SavedSearchCriteria(); @@ -146,9 +153,4 @@ public class FavoritesSearchStrategy extends AbstractSearchStrategy { // do nothing Log.debug("return key in SavedSearchProvider"); } - - @Override - public void initialize() { - - } }
commit 6c382afd675216b53ab170d61cfd4819313ac224 Author: Jay Shaughnessy jshaughn@redhat.com Date: Thu Jun 21 11:03:54 2012 -0400
Hopefully a solution to the suggestion list refresh issue. In short the change is two-fold. First, don't create a new DataSource for every change. Just work with one and call invalidateCache when the values need to be updated. Second, call fetchData() after the values are updated to force the newly set DS data to be sucked into the picklist.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java index 9300f3f..787144e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/searchbar/BasicSearchStrategy.java @@ -18,6 +18,8 @@ */ package org.rhq.enterprise.gui.coregui.client.searchbar;
+import java.util.List; + import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.fields.DataSourceTextField; @@ -25,6 +27,7 @@ import com.smartgwt.client.widgets.form.fields.ComboBoxItem; import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; + import org.rhq.core.domain.criteria.SavedSearchCriteria; import org.rhq.core.domain.search.SavedSearch; import org.rhq.core.domain.search.SearchSubsystem; @@ -34,8 +37,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import java.util.List; - /** * This is the general search strategy implementation used for most searches. * These strategy classes operate by providing the standard functionality @@ -46,7 +47,7 @@ import java.util.List; */ public class BasicSearchStrategy extends AbstractSearchStrategy {
- public BasicSearchStrategy(EnhancedSearchBar searchBar){ + public BasicSearchStrategy(EnhancedSearchBar searchBar) { super(searchBar); }
@@ -61,12 +62,12 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { String style = "font-variant: small-caps; font-weight: bold; font-size: 11px; float: left; margin-left: 2px; width: 50px;"; StringBuilder sb = new StringBuilder(); sb.append("<div style='height:30px;width:400px;float:left;white-space:nowrap;overflow:hidden;' >"); - String color = (kind.equals(SearchSuggestion.Kind.GlobalSavedSearch.getDisplayName() ) - || kind.equals(SearchSuggestion.Kind.UserSavedSearch.getDisplayName()) ) ? "color:green;" : "color:grey"; - sb.append("<span style='"+style+color+"' >"); + String color = (kind.equals(SearchSuggestion.Kind.GlobalSavedSearch.getDisplayName()) || kind + .equals(SearchSuggestion.Kind.UserSavedSearch.getDisplayName())) ? "color:green;" : "color:grey"; + sb.append("<span style='" + style + color + "' >"); sb.append(kind); sb.append("</span>"); - sb.append("<span style='"+style+"' >"); + sb.append("<span style='" + style + "' >"); sb.append(name); sb.append("</span>"); sb.append("</div>"); @@ -74,7 +75,6 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { return sb.toString(); }
- /** * Executed when this field is clicked on. Note that if {@link * com.smartgwt.client.widgets.grid.ListGrid#addRecordClickHandler ListGrid.recordClick} is also defined, it will be fired @@ -87,24 +87,17 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { public void onRecordClick(RecordClickEvent event) { Log.debug("BasicSearchStrategy click"); String kind = event.getRecord().getAttribute(ATTR_KIND); - if(kind.equals("SAVED") || kind.equals("GLOBAL")){ + if (kind.equals("SAVED") || kind.equals("GLOBAL")) { searchBar.switchToSavedSearchMode(); String savedSearchName = event.getRecord().getAttribute(ATTR_VALUE); searchBar.getSaveSearchTextItem().setValue(savedSearchName); - assignSavedSearchExpression(savedSearchName, searchBar.getSearchComboboxItem()); - }else { + assignSavedSearchExpression(savedSearchName, searchBar.getSearchComboboxItem()); + } else {
String clickedExpression = event.getRecord().getAttribute(ATTR_NAME); searchBar.getSearchComboboxItem().setValue(clickedExpression); - if(null != clickedExpression && clickedExpression.length() > 0){ + if (null != clickedExpression && clickedExpression.length() > 0) { getSearchSuggestions(SearchSubsystem.RESOURCE, clickedExpression, clickedExpression.length()); - ///////////////////////////////////////////////////// - // PROBLEM: cant refresh the pickList grid dynamically - // click the down arrow button on combobox - ///////////////////////////////////////////////////// - //@todo: how refresh the pickList properties grid now to reflect new search - //searchComboBox.focusInItem(); - } } } @@ -116,35 +109,37 @@ public class BasicSearchStrategy extends AbstractSearchStrategy { criteria.setStrict(true);
GWTServiceLookup.getSearchService().findSavedSearchesByCriteria(criteria, - new AsyncCallback<List<SavedSearch>>() { - @Override - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError(MSG.view_searchBar_savedSearch_failFind(savedSearchName), - caught); - } + new AsyncCallback<List<SavedSearch>>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError(MSG.view_searchBar_savedSearch_failFind(savedSearchName), + caught); + }
- @Override - public void onSuccess(List<SavedSearch> results) { - if (results.size() == 0) { - CoreGUI.getMessageCenter().notify( - new Message(MSG.view_searchBar_savedSearch_failFind(savedSearchName), Message.Severity.Error)); - } else { - SavedSearch savedSearch = results.get(0); - searchComboBoxItem.setValue(savedSearch.getPattern()); - } + @Override + public void onSuccess(List<SavedSearch> results) { + if (results.size() == 0) { + CoreGUI.getMessageCenter().notify( + new Message(MSG.view_searchBar_savedSearch_failFind(savedSearchName), + Message.Severity.Error)); + } else { + SavedSearch savedSearch = results.get(0); + searchComboBoxItem.setValue(savedSearch.getPattern()); } - }); + } + });
}
@Override public void searchKeyUpHandler(KeyUpEvent keyUpEvent) { - Log.debug("Keyup in BasicSearchStrategy: "+keyUpEvent.getKeyName()); + Log.debug("Keyup in BasicSearchStrategy: " + keyUpEvent.getKeyName()); String searchExpression = searchBar.getSearchComboboxItem().getValueAsString(); - if(null != searchExpression && searchExpression.length() > 0){ - getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, searchBar.getSearchComboboxItem().getValueAsString(), - searchBar.getSearchComboboxItem().getValueAsString().length()); - }else { + if (null != searchExpression && searchExpression.length() > 0) { + getTabAwareSearchSuggestions(SearchSubsystem.RESOURCE, + searchBar.getSearchComboboxItem().getValueAsString(), searchBar.getSearchComboboxItem() + .getValueAsString().length()); + } else { getSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); }
@@ -164,86 +159,119 @@ public class BasicSearchStrategy extends AbstractSearchStrategy {
final long suggestStart = System.currentTimeMillis();
- searchService.getTabAwareSuggestions(searchSubsystem, expression, - caretPosition, null, new AsyncCallback<List<SearchSuggestion>>() { - - public void onSuccess(List<SearchSuggestion> results) { - DataSource ds = new DataSource(); - ds.setClientOnly(true); - DataSourceTextField idField = new DataSourceTextField(ATTR_ID, "Id"); - idField.setPrimaryKey(true); - DataSourceTextField valueField = new DataSourceTextField(ATTR_VALUE, "Value"); - DataSourceTextField kindField = new DataSourceTextField(ATTR_KIND, "Kind"); - DataSourceTextField nameField = new DataSourceTextField(ATTR_NAME, "Name"); - ds.setFields(idField,valueField, kindField, nameField ); - - for (SearchSuggestion searchSuggestion : results) { - Log.debug("search tab aware Suggestions: " + searchSuggestion.getKind() + ", " + searchSuggestion.getValue() + ", " + searchSuggestion.getLabel()); - ListGridRecord record = new ListGridRecord(); - record.setAttribute(ATTR_ID, searchSuggestion.getValue()); - if(null != searchSuggestion.getKind()){ - record.setAttribute(ATTR_KIND, searchSuggestion.getKind().getDisplayName()); + searchService.getTabAwareSuggestions(searchSubsystem, expression, caretPosition, null, + new AsyncCallback<List<SearchSuggestion>>() { + + public void onSuccess(List<SearchSuggestion> results) { + ComboBoxItem comboBox = searchBar.getSearchComboboxItem(); + DataSource ds = comboBox.getOptionDataSource(); + boolean dofetch = false; + + if (null == ds) { + ds = new DataSource(); + ds.setClientOnly(true); + DataSourceTextField idField = new DataSourceTextField(ATTR_ID, "Id"); + idField.setPrimaryKey(true); + DataSourceTextField valueField = new DataSourceTextField(ATTR_VALUE, "Value"); + DataSourceTextField kindField = new DataSourceTextField(ATTR_KIND, "Kind"); + DataSourceTextField nameField = new DataSourceTextField(ATTR_NAME, "Name"); + ds.setFields(idField, valueField, kindField, nameField); + + comboBox.setOptionDataSource(ds); + + } else { + ds.invalidateCache(); + dofetch = true; } - record.setAttribute(ATTR_NAME, searchSuggestion.getLabel()); - record.setAttribute(ATTR_VALUE, searchSuggestion.getValue()); - ds.addData(record); - } - searchBar.getSearchComboboxItem().setOptionDataSource(ds); - long suggestFetchTime = System.currentTimeMillis() - suggestStart; - Log.debug(results.size() + " suggestions searches fetched in: " + suggestFetchTime + "ms");
- } + for (SearchSuggestion searchSuggestion : results) { + Log.debug("search tab aware Suggestions: " + searchSuggestion.getKind() + ", " + + searchSuggestion.getValue() + ", " + searchSuggestion.getLabel()); + ListGridRecord record = new ListGridRecord(); + record.setAttribute(ATTR_ID, searchSuggestion.getValue()); + if (null != searchSuggestion.getKind()) { + record.setAttribute(ATTR_KIND, searchSuggestion.getKind().getDisplayName()); + } + record.setAttribute(ATTR_NAME, searchSuggestion.getLabel()); + record.setAttribute(ATTR_VALUE, searchSuggestion.getValue()); + ds.addData(record); + }
- public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to retrieve search suggestion", caught); - } + if (dofetch) { + comboBox.fetchData(); + } + + long suggestFetchTime = System.currentTimeMillis() - suggestStart; + Log.debug(results.size() + " suggestions searches fetched in: " + suggestFetchTime + "ms"); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to retrieve search suggestion", caught); + }
- }); + }); }
public void getSearchSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition) {
final long suggestStart = System.currentTimeMillis();
- searchService.getTabAwareSuggestions(searchSubsystem, expression, - caretPosition, null, new AsyncCallback<List<SearchSuggestion>>() { - - public void onSuccess(List<SearchSuggestion> results) { - DataSource ds = new DataSource(); - ds.setClientOnly(true); - DataSourceTextField idField = new DataSourceTextField(ATTR_ID, "Id"); - idField.setPrimaryKey(true); - DataSourceTextField valueField = new DataSourceTextField(ATTR_VALUE, "Value"); - DataSourceTextField kindField = new DataSourceTextField(ATTR_KIND, "Kind"); - DataSourceTextField nameField = new DataSourceTextField(ATTR_NAME, "Name"); - ds.setFields(valueField, kindField, nameField ); - - for (SearchSuggestion searchSuggestion : results) { - Log.debug("search Suggestions: " + searchSuggestion.getKind() + ", " + searchSuggestion.getValue() + ", " + searchSuggestion.getLabel()); - ListGridRecord record = new ListGridRecord(); - record.setAttribute(ATTR_ID, searchSuggestion.getValue()); - if(null != searchSuggestion.getKind()){ - record.setAttribute(ATTR_KIND, searchSuggestion.getKind().getDisplayName()); + searchService.getTabAwareSuggestions(searchSubsystem, expression, caretPosition, null, + new AsyncCallback<List<SearchSuggestion>>() { + + public void onSuccess(List<SearchSuggestion> results) { + ComboBoxItem comboBox = searchBar.getSearchComboboxItem(); + DataSource ds = comboBox.getOptionDataSource(); + boolean newDs = false; + + if (null == ds) { + ds = new DataSource(); + ds.setClientOnly(true); + DataSourceTextField idField = new DataSourceTextField(ATTR_ID, "Id"); + idField.setPrimaryKey(true); + DataSourceTextField valueField = new DataSourceTextField(ATTR_VALUE, "Value"); + DataSourceTextField kindField = new DataSourceTextField(ATTR_KIND, "Kind"); + DataSourceTextField nameField = new DataSourceTextField(ATTR_NAME, "Name"); + ds.setFields(valueField, kindField, nameField); + + comboBox.setOptionDataSource(ds); + newDs = true; + + } else { + ds.invalidateCache(); } - record.setAttribute(ATTR_NAME, searchSuggestion.getLabel()); - record.setAttribute(ATTR_VALUE, searchSuggestion.getValue()); - ds.addData(record); - } - searchBar.getSearchComboboxItem().setOptionDataSource(ds); - long suggestFetchTime = System.currentTimeMillis() - suggestStart; - Log.debug(results.size() + " suggestions searches fetched in: " + suggestFetchTime + "ms");
- } + for (SearchSuggestion searchSuggestion : results) { + Log.debug("search Suggestions: " + searchSuggestion.getKind() + ", " + + searchSuggestion.getValue() + ", " + searchSuggestion.getLabel()); + ListGridRecord record = new ListGridRecord(); + record.setAttribute(ATTR_ID, searchSuggestion.getValue()); + if (null != searchSuggestion.getKind()) { + record.setAttribute(ATTR_KIND, searchSuggestion.getKind().getDisplayName()); + } + record.setAttribute(ATTR_NAME, searchSuggestion.getLabel()); + record.setAttribute(ATTR_VALUE, searchSuggestion.getValue()); + ds.addData(record); + }
- public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to retrieve search suggestion", caught); - } + if (!newDs) { + comboBox.fetchData(); + } + + long suggestFetchTime = System.currentTimeMillis() - suggestStart; + Log.debug(results.size() + " suggestions searches fetched in: " + suggestFetchTime + "ms"); + } + + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to retrieve search suggestion", caught); + }
- }); + }); }
@Override public void initialize() { getSearchSuggestions(SearchSubsystem.RESOURCE, "", 0); } + }
rhq-commits@lists.fedorahosted.org