modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/SearchBarItem.java
| 8 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
| 38 +++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/FlexSearchBar.java
| 53 +++-------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/inventory/TestSearchBarView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
| 22 +++-
6 files changed, 73 insertions(+), 53 deletions(-)
New commits:
commit dca49573ece14274b2184a1046420e217784fa9a
Author: Joseph Marques <joseph(a)redhat.com>
Date: Wed Dec 22 23:04:01 2010 -0500
initial integration of search bar contained within a smartgwt form
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/SearchBarItem.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/SearchBarItem.java
index abc0958..83793e4 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/SearchBarItem.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/SearchBarItem.java
@@ -32,8 +32,8 @@ public class SearchBarItem extends CanvasItem {
private Canvas canvas = new Canvas();
private FlexSearchBar searchBar;
- public SearchBarItem(SearchSubsystem subsystem) {
- super("Search");
+ public SearchBarItem(String name, String title, SearchSubsystem subsystem) {
+ super(name, title);
searchBar = new FlexSearchBar();
searchBar.setSearchSubsystem(subsystem);
@@ -50,4 +50,8 @@ public class SearchBarItem extends CanvasItem {
return canvas;
}
+ public FlexSearchBar getSearchBar() {
+ return searchBar;
+ }
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index a99ff5a..c569234 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.google.gwt.event.dom.client.KeyCodes;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
@@ -51,6 +52,7 @@ import com.smartgwt.client.widgets.events.DoubleClickEvent;
import com.smartgwt.client.widgets.events.DoubleClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.HiddenItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
@@ -715,9 +717,12 @@ public class Table<DS extends RPCDataSource> extends
LocatableHLayout implements
*
* @author Joseph Marques
*/
- private static class TableFilter extends DynamicForm implements KeyPressHandler,
ChangedHandler {
+ private static class TableFilter extends DynamicForm implements KeyPressHandler,
ChangedHandler,
+ com.google.gwt.event.dom.client.KeyPressHandler {
private Table table;
+ private SearchBarItem searchBarItem;
+ private HiddenItem hiddenItem;
public TableFilter(Table table) {
super();
@@ -728,12 +733,7 @@ public class Table<DS extends RPCDataSource> extends
LocatableHLayout implements
@Override
public void setItems(FormItem... items) {
- super.setItems(items);
- setupFormItems(items);
- }
-
- private void setupFormItems(FormItem... formItems) {
- for (FormItem nextFormItem : formItems) {
+ for (FormItem nextFormItem : items) {
nextFormItem.setWrapTitle(false);
nextFormItem.setWidth(300); // wider than default
if (nextFormItem instanceof TextItem) {
@@ -741,9 +741,22 @@ public class Table<DS extends RPCDataSource> extends
LocatableHLayout implements
} else if (nextFormItem instanceof SelectItem) {
nextFormItem.addChangedHandler(this);
} else if (nextFormItem instanceof SearchBarItem) {
- nextFormItem.addKeyPressHandler(this);
+ searchBarItem = (SearchBarItem) nextFormItem;
+ searchBarItem.getSearchBar().addKeyPressHandler(this);
+ String name = searchBarItem.getName();
+ searchBarItem.setName(name + "_hidden");
+ hiddenItem = new HiddenItem(name);
}
}
+
+ if (hiddenItem != null) {
+ FormItem[] tmpItems = new FormItem[items.length + 1];
+ System.arraycopy(items, 0, tmpItems, 0, items.length);
+ tmpItems[items.length] = hiddenItem;
+ items = tmpItems;
+ }
+
+ super.setItems(items);
}
private void fetchFilteredTableData() {
@@ -765,6 +778,15 @@ public class Table<DS extends RPCDataSource> extends
LocatableHLayout implements
return super.getFields().length != 0;
}
+ @Override
+ public void onKeyPress(com.google.gwt.event.dom.client.KeyPressEvent event) {
+ if (event.getCharCode() != KeyCodes.KEY_ENTER) {
+ return;
+ }
+ // TODO: figure out why this event is being sent twice
+ hiddenItem.setValue(searchBarItem.getSearchBar().getValue());
+ fetchFilteredTableData();
+ }
}
public static class TableActionInfo {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
index 8d0ac24..2590ea3 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
@@ -164,7 +164,7 @@ public class ResourceDatasource extends RPCDataSource<Resource>
{
protected ResourceCriteria getFetchCriteria(final DSRequest request) {
ResourceCriteria criteria = new ResourceCriteria();
criteria.setPageControl(getPageControl(request));
-
+ //printRequestCriteria(request);
criteria.addFilterId(getFilter(request, "id", Integer.class));
criteria.addFilterParentResourceId(getFilter(request, "parentId",
Integer.class));
criteria.addFilterCurrentAvailability(getFilter(request,
AVAILABILITY.propertyName(), AvailabilityType.class));
@@ -177,6 +177,7 @@ public class ResourceDatasource extends RPCDataSource<Resource>
{
criteria.addFilterTagNamespace(getFilter(request, "tagNamespace",
String.class));
criteria.addFilterTagSemantic(getFilter(request, "tagSemantic",
String.class));
criteria.addFilterTagName(getFilter(request, "tagName",
String.class));
+ criteria.setSearchExpression(getFilter(request, "search",
String.class));
return criteria;
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/FlexSearchBar.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/FlexSearchBar.java
index 9e3e6eb..2284b78 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/FlexSearchBar.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/FlexSearchBar.java
@@ -34,11 +34,6 @@ import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Element;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
@@ -94,23 +89,6 @@ public class FlexSearchBar extends AbstractSearchBar {
private String defaultSearchText;
private String defaultSavedSearchPatternId;
- private Element searchButton;
-
- public void setupButton() {
- searchButton = DOM.createButton();
- Event.addNativePreviewHandler(new NativePreviewHandler() {
- public void onPreviewNativeEvent(NativePreviewEvent event) {
- if (event.getNativeEvent() != null &&
event.getNativeEvent().getEventTarget() != null) {
-
- if (event.getNativeEvent().getEventTarget().equals(searchButton)
- && event.getTypeInt() == Event.ONMOUSEDOWN) {
- //prepareSearchExecution();
- }
- }
- }
- });
- }
-
HorizontalPanel sbc;
HorizontalPanel sbc_sbbgc;
HorizontalPanel sbc_sbbgc_sbcc;
@@ -143,6 +121,14 @@ public class FlexSearchBar extends AbstractSearchBar {
sbc_sbbc = createHPanel(sbc, "searchBarButtonContainer",
"searchButtonContainer");
sbc_pfsc = createHPanel(sbc, null,
"patternFieldSuggestionsContainer");
sbc_ssc = createHPanel(sbc, null, "savedSearchesContainer");
+
+ sbc_sbbgc_sbcc_sbclhs_pfc.add(autoCompletePatternField);
+ sbc_sbbgc_sbcc_sbcrhs_pnfc.add(patternNameField);
+ sbc_sbbgc_sbcc_sbcrhs_pnlc.add(patternNameLabel);
+ sbc_sbbgc_sbcc_sbcrhs_sic.add(starImage);
+ sbc_sbbgc_sbcc_sbcrhs_aic.add(arrowImage);
+ sbc_ssc.add(savedSearchesPanel);
+
initWidget(sbc);
savedSearchManager = new SavedSearchManager(this);
@@ -163,13 +149,6 @@ public class FlexSearchBar extends AbstractSearchBar {
}
public void onSavedSearchManagerLoaded() {
- sbc_sbbgc_sbcc_sbclhs_pfc.add(autoCompletePatternField);
- sbc_sbbgc_sbcc_sbcrhs_pnfc.add(patternNameField);
- sbc_sbbgc_sbcc_sbcrhs_pnlc.add(patternNameLabel);
- sbc_sbbgc_sbcc_sbcrhs_sic.add(starImage);
- sbc_sbbgc_sbcc_sbcrhs_aic.add(arrowImage);
- sbc_ssc.add(savedSearchesPanel);
-
setupAutoCompletingPatternField();
setupPatternNameField();
setupPatternNameLabel();
@@ -179,14 +158,12 @@ public class FlexSearchBar extends AbstractSearchBar {
if (defaultSearchText != null) {
this.autoCompletePatternField.setText(defaultSearchText);
- click(searchButton); // execute the search with this default search
expression
} else if (defaultSavedSearchPatternId != null) {
try {
Integer savedSearchId = Integer.valueOf(defaultSavedSearchPatternId);
activateSavedSearch(savedSearchId);
} catch (Exception e) {
this.autoCompletePatternField.setText(MSG.view_searchBar_error_selectSavedSearch());
- click(searchButton); // execute the search, which will help to further
highlight the error
}
}
@@ -475,11 +452,6 @@ public class FlexSearchBar extends AbstractSearchBar {
}
}
- private static native void click(Element button)
- /*-{
- button.click();
- }-*/;
-
public void activateSavedSearch(Integer savedSearchId) {
SavedSearch savedSearch = savedSearchManager.getSavedSearchById(savedSearchId);
if (savedSearch == null) {
@@ -505,11 +477,18 @@ public class FlexSearchBar extends AbstractSearchBar {
Log.debug("search results change: [" + savedSearch.getName() +
"," + savedSearch.getPattern() + "]");
turnNameFieldIntoLabel();
savedSearchesPanel.hide();
- click(searchButton);
}
public String getSelectedTab() {
return null;
}
+ public void addKeyPressHandler(KeyPressHandler handler) {
+ autoCompletePatternField.addKeyPressHandler(handler);
+ }
+
+ public String getValue() {
+ return autoCompletePatternField.getValue();
+ }
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/inventory/TestSearchBarView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/inventory/TestSearchBarView.java
index d58197d..234d775 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/inventory/TestSearchBarView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/inventory/TestSearchBarView.java
@@ -21,7 +21,7 @@ public class TestSearchBarView extends ResourceSearchView {
final TextItem nameFilter = new TextItem(NAME.propertyName(), NAME.title());
final EnumSelectItem categoryFilter = new EnumSelectItem(CATEGORY.propertyName(),
CATEGORY.title(),
ResourceCategory.class);
- final SearchBarItem searchFilter = new SearchBarItem(SearchSubsystem.RESOURCE);
+ final SearchBarItem searchFilter = new SearchBarItem("search",
"Search", SearchSubsystem.RESOURCE);
setFilterFormItems(nameFilter, categoryFilter, searchFilter);
}
commit d897f1dbb0d5744c64b22c828f8f449e385b6597
Author: Joseph Marques <joseph(a)redhat.com>
Date: Wed Dec 22 22:55:24 2010 -0500
more robust handling around filter parameters with multiple values
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index a7bd459..f43417f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -29,6 +29,7 @@ import java.util.Set;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.Window;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
@@ -425,7 +426,7 @@ public abstract class RPCDataSource<T> extends DataSource {
// nothing to do, result is already null
} else if (type == Integer.class) {
int[] intermediates;
- if (type.getClass().isArray()) {
+ if (isArray(value)) {
intermediates = criteria.getAttributeAsIntArray(paramName);
} else { // want array return, but only single instance of the type in the
request
intermediates = new int[] { criteria.getAttributeAsInt(paramName) };
@@ -437,7 +438,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
} else if (type == String.class) {
String[] intermediates;
- if (type.getClass().isArray()) {
+ if (isArray(value)) {
intermediates = criteria.getAttributeAsStringArray(paramName);
} else { // want array return, but only single instance of the type in the
request
intermediates = new String[] { criteria.getAttributeAsString(paramName)
};
@@ -449,7 +450,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
} else if (type.isEnum()) {
String[] intermediates;
- if (type.getClass().isArray()) {
+ if (isArray(value)) {
intermediates = criteria.getAttributeAsStringArray(paramName);
} else { // want array return, but only single instance of the type in the
request
intermediates = new String[] { criteria.getAttributeAsString(paramName)
};
@@ -468,6 +469,10 @@ public abstract class RPCDataSource<T> extends DataSource {
return resultArray;
}
+ private static boolean isArray(Object value) {
+ return value.getClass().isArray() || value.getClass().equals(ArrayList.class);
+ }
+
@SuppressWarnings("unchecked")
private static <S> S[] getEnumArray(Class<S> genericEnumType, int size)
{
// workaround until GWT implements reflection APIs, so we can do:
@@ -484,8 +489,17 @@ public abstract class RPCDataSource<T> extends DataSource {
}
@SuppressWarnings("unchecked")
+ public static void printRequestCriteria(DSRequest request) {
+ Criteria criteria = request.getCriteria();
+ Map<String, Object> criteriaMap = criteria.getValues();
+
+ for (Map.Entry<String, Object> nextEntry : criteriaMap.entrySet()) {
+ Window.alert(nextEntry.getKey() + ":" + nextEntry.getValue());
+ }
+ }
+
+ @SuppressWarnings("unchecked")
public static <S> S getFilter(DSRequest request, String paramName,
Class<S> type) {
- Log.debug("Fetching " + paramName + " (" + type +
")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();