.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(a)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(a)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);
}
+
}