modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java | 8 modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java | 6 modules/core/domain/src/main/java/org/rhq/core/domain/util/CriteriaUtils.java | 58 +++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupDataSourceField.java | 71 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java | 32 --- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDataSourceField.java | 10 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java | 82 +--------- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java | 77 ++++++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 64 +++++++ 9 files changed, 286 insertions(+), 122 deletions(-)
New commits: commit 9a36c9d68e27aead173d141e7819b2a16d6c9236 Author: Joseph Marques joseph@redhat.com Date: Thu Sep 23 07:49:43 2010 -0400
simplify the process of creating Criteria objects from a DSRequest
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupDataSourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupDataSourceField.java new file mode 100644 index 0000000..d7deadd --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupDataSourceField.java @@ -0,0 +1,71 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2008 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.rhq.enterprise.gui.coregui.client.inventory.groups; + +import com.smartgwt.client.widgets.grid.ListGridField; + +public enum ResourceGroupDataSourceField { + + NAME("name", "Name"), + + DESCRIPTION("description", "Description"), + + TYPE("typeName", "Type"), + + PLUGIN("pluginName", "Plugin"), + + CATEGORY("category", "Category"); + + /** + * Corresponds to a property name of Resource + */ + private String propertyName; + + /** + * The display name for the field or property + */ + private String title; + + private ResourceGroupDataSourceField(String propertyName, String title) { + this.propertyName = propertyName; + this.title = title; + } + + public String propertyName() { + return propertyName; + } + + public String title() { + return title; + } + + public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(int width) { + return new ListGridField(propertyName, title, width); + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java index 91bf412..2a02c99 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java @@ -18,6 +18,9 @@ */ package org.rhq.enterprise.gui.coregui.client.inventory.groups;
+import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.CATEGORY; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.NAME; + import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; @@ -93,32 +96,13 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup> {
protected ResourceGroupCriteria getFetchCriteria(final DSRequest request) { ResourceGroupCriteria criteria = new ResourceGroupCriteria(); - criteria.setPageControl(getPageControl(request));
- if (request.getCriteria().getValues().get("name") != null) { - criteria.addFilterName((String) request.getCriteria().getValues().get("name")); - } - - if (request.getCriteria().getValues().get("category") != null) { - criteria.addFilterGroupCategory(GroupCategory.valueOf(((String) request.getCriteria().getValues().get( - "category")).toUpperCase())); - } - - if (request.getCriteria().getValues().get("downMemberCount") != null) { - criteria.addFilterDownMemberCount(Integer.parseInt((String) request.getCriteria().getValues().get( - "downMemberCount"))); - } - - if (request.getCriteria().getValues().get("explicitResourceId") != null) { - criteria.addFilterExplicitResourceIds(Integer.parseInt((String) request.getCriteria().getValues().get( - "explicitResourceId"))); - } - - if (request.getCriteria().getValues().get("groupDefinitionId") != null) { - criteria.addFilterGroupDefinitionId(Integer.parseInt((String) request.getCriteria().getValues().get( - "groupDefinitionId"))); - } + criteria.addFilterName(getFilter(request, NAME.propertyName(), String.class)); + criteria.addFilterGroupCategory(getFilter(request, CATEGORY.propertyName(), GroupCategory.class)); + criteria.addFilterDownMemberCount(getFilter(request, "downMemberCount", Integer.class)); + criteria.addFilterExplicitResourceIds(getFilter(request, "explicitResourceId", Integer.class)); + criteria.addFilterGroupDefinitionId(getFilter(request, "groupDefinitionId", Integer.class));
return criteria; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDataSourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDataSourceField.java index 8b81f4c..59b55e9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDataSourceField.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDataSourceField.java @@ -23,6 +23,8 @@
package org.rhq.enterprise.gui.coregui.client.inventory.resource;
+import com.smartgwt.client.widgets.grid.ListGridField; + public enum ResourceDataSourceField {
NAME("name", "Name"), @@ -60,4 +62,12 @@ public enum ResourceDataSourceField { return title; }
+ public ListGridField getListGridField() { + return new ListGridField(propertyName, title); + } + + public ListGridField getListGridField(int width) { + return new ListGridField(propertyName, title, width); + } + } 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 71e6eee..766df27 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 @@ -25,8 +25,6 @@ import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceD import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.PLUGIN; import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.TYPE;
-import java.util.Map; - import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; @@ -41,7 +39,6 @@ import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCategory; -import org.rhq.core.domain.tagging.Tag; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -101,75 +98,22 @@ public class ResourceDatasource extends RPCDataSource<Resource> { }); }
- @SuppressWarnings("unchecked") protected ResourceCriteria getFetchCriteria(final DSRequest request) { - ResourceCriteria criteria = new ResourceCriteria(); criteria.setPageControl(getPageControl(request)); - // TODO: This call is broken in 2.2, http://code.google.com/p/smartgwt/issues/detail?id=490 - // when using AdvancedCriteria - Map<String, Object> criteriaMap = request.getCriteria().getValues(); - - if (criteriaMap.get("parentId") != null) { - criteria.addFilterParentResourceId(Integer.parseInt((String) criteriaMap.get("parentId"))); - } - - if (criteriaMap.get("id") != null) { - criteria.addFilterId(Integer.parseInt(request.getCriteria().getAttribute("id"))); - } - - if (criteriaMap.get("resourceIds") != null) { - int[] ids = request.getCriteria().getAttributeAsIntArray("resourceIds"); - Integer[] oids = new Integer[ids.length]; - for (int i = 0; i < ids.length; i++) { - oids[i] = ids[i++]; - } - criteria.addFilterIds(oids); - } - - // Fetch member Resources of the group with the specified id. - if (criteriaMap.get("groupId") != null) { - int groupId = Integer.parseInt((String) criteriaMap.get("groupId")); - criteria.addFilterImplicitGroupIds(groupId); - } - - if (criteriaMap.get(NAME.propertyName()) != null) { - criteria.addFilterName((String) criteriaMap.get(NAME.propertyName())); - } - - if (criteriaMap.get(CATEGORY.propertyName()) != null) { - criteria.addFilterResourceCategory(ResourceCategory.valueOf(((String) criteriaMap.get(CATEGORY - .propertyName())).toUpperCase())); - } - - if (criteriaMap.get(AVAILABILITY.propertyName()) != null) { - criteria.addFilterCurrentAvailability(AvailabilityType.valueOf(((String) criteriaMap.get(AVAILABILITY - .propertyName())).toUpperCase())); - } - - if (criteriaMap.get(TYPE.propertyName()) != null) { - criteria.addFilterResourceTypeId(Integer.parseInt(((String) criteriaMap.get(TYPE.propertyName())))); - } - - if (criteriaMap.get(PLUGIN.propertyName()) != null) { - criteria.addFilterPluginName((String) criteriaMap.get(PLUGIN.propertyName())); - } - - if (criteriaMap.get("tag") != null) { - criteria.addFilterTag((Tag) criteriaMap.get("tag")); - } - - if (criteriaMap.get("tagNamespace") != null) { - criteria.addFilterTagNamespace((String) criteriaMap.get("tagNamespace")); - } - - if (criteriaMap.get("tagSemantic") != null) { - criteria.addFilterTagSemantic((String) criteriaMap.get("tagSemantic")); - } - - if (criteriaMap.get("tagName") != null) { - criteria.addFilterTagName((String) criteriaMap.get("tagName")); - } + + criteria.addFilterId(getFilter(request, "id", Integer.class)); + criteria.addFilterParentResourceId(getFilter(request, "parentId", Integer.class)); + criteria.addFilterCurrentAvailability(getFilter(request, AVAILABILITY.propertyName(), AvailabilityType.class)); + criteria.addFilterResourceCategory(getFilter(request, CATEGORY.propertyName(), ResourceCategory.class)); + criteria.addFilterIds(getArrayFilter(request, "resourceIds", Integer.class)); + criteria.addFilterImplicitGroupIds(getFilter(request, "groupId", Integer.class)); + criteria.addFilterName(getFilter(request, NAME.propertyName(), String.class)); + criteria.addFilterResourceTypeId(getFilter(request, TYPE.propertyName(), Integer.class)); + criteria.addFilterPluginName(getFilter(request, PLUGIN.propertyName(), String.class)); + criteria.addFilterTagNamespace(getFilter(request, "tagNamespace", String.class)); + criteria.addFilterTagSemantic(getFilter(request, "tagSemantic", String.class)); + criteria.addFilterTagName(getFilter(request, "tagName", String.class));
return criteria; } 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 5b3ecf7..b61458f 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 @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map;
import com.google.gwt.core.client.JavaScriptObject; +import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSource; @@ -241,4 +242,67 @@ public abstract class RPCDataSource<T> extends DataSource { JSOHelper.apply(data, newRecord.getJsObj()); return newRecord; } + + @SuppressWarnings("unchecked") + public static <S> S[] getArrayFilter(DSRequest request, String paramName, Class<S> type) { + System.out.println("Fetching array " + paramName + " (" + type + ")"); + Criteria criteria = request.getCriteria(); + Map<String, Object> criteriaMap = criteria.getValues(); + + S[] resultArray = null; + + Object value = (String) criteriaMap.get(paramName); + if (value == null) { + // nothing to do, result is already null + } else if (type == Integer.class) { + int[] intermediates = criteria.getAttributeAsIntArray(paramName); + resultArray = (S[]) new Integer[intermediates.length]; + int index = 0; + for (int next : intermediates) { + resultArray[index++] = (S) (Integer) next; + } + } else if (type == String.class) { + String[] intermediates = criteria.getAttributeAsStringArray(paramName); + resultArray = (S[]) new String[intermediates.length]; + int index = 0; + for (String next : intermediates) { + resultArray[index++] = (S) next; + } + } else { + throw new IllegalArgumentException("No support for passing array filters of type " + type); + } + + System.out.println("Result array = " + resultArray); + + return resultArray; + } + + @SuppressWarnings("unchecked") + public static <S> S getFilter(DSRequest request, String paramName, Class<S> type) { + System.out.println("Fetching " + paramName + " (" + type + ")"); + Criteria criteria = request.getCriteria(); + Map<String, Object> criteriaMap = criteria.getValues(); + + S result = null; + + Object value = criteriaMap.get(paramName); + if (value == null) { + // nothing to do, result is already null + } else { + String strValue = value.toString(); + if (type == String.class) { + result = (S) strValue; + } else if (type == Integer.class) { + result = (S) Integer.valueOf(strValue); + } else if (type.isEnum()) { + result = (S) Enum.valueOf((Class<? extends Enum>) type, strValue.toUpperCase()); + } else { + result = (S) value; // otherwise presume the object is already that type, and just cast it + } + } + + System.out.println("Result = " + result); + + return result; + } }
commit fb3843196fe9fa6c29b90f9cf8ba5e510e19fa97 Author: Joseph Marques joseph@redhat.com Date: Thu Sep 23 07:48:54 2010 -0400
greater resiliance when passing null-"ish" values to addFilterXXX Criteria methods
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java index 1eae4a3..0fd3a0a 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java @@ -22,7 +22,6 @@ */ package org.rhq.core.domain.criteria;
-import java.util.Arrays; import java.util.List;
import javax.xml.bind.annotation.XmlAccessType; @@ -33,6 +32,7 @@ import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCategory; +import org.rhq.core.domain.util.CriteriaUtils; import org.rhq.core.domain.util.PageOrdering;
/** @@ -213,15 +213,15 @@ public class ResourceCriteria extends TaggedCriteria { }
public void addFilterIds(Integer... filterIds) { - this.filterIds = Arrays.asList(filterIds); + this.filterIds = CriteriaUtils.getListIgnoringNulls(filterIds); }
public void addFilterExplicitGroupIds(Integer... filterExplicitGroupIds) { - this.filterExplicitGroupIds = Arrays.asList(filterExplicitGroupIds); + this.filterExplicitGroupIds = CriteriaUtils.getListIgnoringNulls(filterExplicitGroupIds); }
public void addFilterImplicitGroupIds(Integer... filterImplicitGroupIds) { - this.filterImplicitGroupIds = Arrays.asList(filterImplicitGroupIds); + this.filterImplicitGroupIds = CriteriaUtils.getListIgnoringNulls(filterImplicitGroupIds); }
public void addFilterRootResourceId(Integer filterRootResourceId) { diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java index 1a54f0f..6f5c259 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java @@ -22,7 +22,6 @@ */ package org.rhq.core.domain.criteria;
-import java.util.Arrays; import java.util.List;
import javax.xml.bind.annotation.XmlAccessType; @@ -31,6 +30,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.core.domain.resource.group.ResourceGroup; +import org.rhq.core.domain.util.CriteriaUtils; import org.rhq.core.domain.util.PageOrdering;
/** @@ -155,11 +155,11 @@ public class ResourceGroupCriteria extends TaggedCriteria { }
public void addFilterExplicitResourceIds(Integer... filterExplicitResourceIds) { - this.filterExplicitResourceIds = Arrays.asList(filterExplicitResourceIds); + this.filterExplicitResourceIds = CriteriaUtils.getListIgnoringNulls(filterExplicitResourceIds); }
public void addFilterImplicitResourceIds(Integer... filterImplicitResourceIds) { - this.filterImplicitResourceIds = Arrays.asList(filterImplicitResourceIds); + this.filterImplicitResourceIds = CriteriaUtils.getListIgnoringNulls(filterImplicitResourceIds); }
/** A somewhat special case filter that ensures that all explicit group members diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/util/CriteriaUtils.java b/modules/core/domain/src/main/java/org/rhq/core/domain/util/CriteriaUtils.java new file mode 100644 index 0000000..d6ca5e2 --- /dev/null +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/util/CriteriaUtils.java @@ -0,0 +1,58 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2008 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.core.domain.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * A dumping ground for utility methods used by Criteria objects. We specifically don't want to put these into the + * Criteria abstract class because they would become part of the auto-completion candidate list in the interactive CLI. + * Putting them here (in core/domain versus, say, core/util) will provide the necessary utility without requiring + * further module inheritance at the coregui layer. + * + * @author Joseph Marques + */ +public class CriteriaUtils { + /* + * remove nulls from the passed items, and return the resultant list. return null if no non-null items exist. + * this is useful in criteria addFilterXXX methods which take varargs, where a single null argument should be + * interpreted as a null collection (instead of one-item collection whose first value is null). + */ + public static <T> List<T> getListIgnoringNulls(T[] items) { + if (items == null) { + return null; + } + + List<T> results = new ArrayList<T>(); + for (T next : items) { + if (next != null) { + results.add(next); + } + } + if (results.size() == 0) { + return null; + } + return results; + } +}
commit 260db28def8e9f080f3cf4bda8df8a75e3bd81be Author: Joseph Marques joseph@redhat.com Date: Thu Sep 23 07:45:41 2010 -0400
fix SearchBarPane so it searches for both resources and groups
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java index 81abe79..0d920ef 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java @@ -18,13 +18,6 @@ */ package org.rhq.enterprise.gui.coregui.client.menu;
-import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.AVAILABILITY; -import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.CATEGORY; -import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.DESCRIPTION; -import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME; -import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.PLUGIN; -import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.TYPE; - import com.google.gwt.user.client.History; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.TextMatchStyle; @@ -42,7 +35,9 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.grid.ListGridField;
import org.rhq.enterprise.gui.coregui.client.LinkManager; +import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField; import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource; +import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField; import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout; @@ -69,8 +64,14 @@ public class SearchBarPane extends LocatableHLayout {
final SelectItem searchType = new SelectItem("searchType", "Search"); searchType.setWidth(120); - searchType.setValueMap("Resources", "Resource Groups", "Bundles", "Packages", "Users", "Roles"); + searchType.setValueMap("Resources", "Resource Groups"/*, "Bundles", "Packages", "Users", "Roles"*/); searchType.setValue("Resources"); + searchType.addChangedHandler(new ChangedHandler() { + @Override + public void onChanged(ChangedEvent event) { + markForRedraw(); + } + });
ComboBoxItem resourceSearch = getResourceComboBox(); resourceSearch.setShowIfCondition(new FormItemIfFunction() { @@ -79,6 +80,13 @@ public class SearchBarPane extends LocatableHLayout { } });
+ ComboBoxItem groupSearch = getGroupComboBox(); + groupSearch.setShowIfCondition(new FormItemIfFunction() { + public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) { + return form.getValueAsString("searchType").equals("Resource Groups"); + } + }); + TextItem query = new TextItem("query"); query.setShowTitle(false);
@@ -88,7 +96,7 @@ public class SearchBarPane extends LocatableHLayout { search.setShowTitle(false); search.setIcon(Window.getImgURL("[SKIN]/actions/view.png"));
- form.setItems(searchType, resourceSearch, search, new SpacerItem()); + form.setItems(searchType, resourceSearch, groupSearch, search, new SpacerItem());
addMember(form); } @@ -103,19 +111,19 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.setOptionDataSource(new ResourceDatasource());
- ListGridField nameField = new ListGridField(NAME.propertyName(), NAME.title(), 250); - ListGridField descriptionField = new ListGridField(DESCRIPTION.propertyName(), DESCRIPTION.title()); - ListGridField typeNameField = new ListGridField(TYPE.propertyName(), TYPE.title(), 130); - ListGridField pluginNameField = new ListGridField(PLUGIN.propertyName(), PLUGIN.title(), 100); - ListGridField categoryField = new ListGridField(CATEGORY.propertyName(), CATEGORY.title(), 60); - ListGridField availabilityField = new ListGridField(AVAILABILITY.propertyName(), AVAILABILITY.title(), 55); + ListGridField nameField = ResourceDataSourceField.NAME.getListGridField(250); + ListGridField descriptionField = ResourceDataSourceField.DESCRIPTION.getListGridField(); + ListGridField typeNameField = ResourceDataSourceField.TYPE.getListGridField(130); + ListGridField pluginNameField = ResourceDataSourceField.PLUGIN.getListGridField(100); + ListGridField categoryField = ResourceDataSourceField.CATEGORY.getListGridField(60); + ListGridField availabilityField = ResourceDataSourceField.AVAILABILITY.getListGridField(55); availabilityField.setAlign(Alignment.CENTER);
comboBox.setPickListFields(nameField, descriptionField, typeNameField, pluginNameField, categoryField, availabilityField);
comboBox.setValueField("id"); - comboBox.setDisplayField("name"); + comboBox.setDisplayField(ResourceDataSourceField.NAME.propertyName()); comboBox.setPickListWidth(800); comboBox.setTextMatchStyle(TextMatchStyle.SUBSTRING); comboBox.setCompleteOnTab(true); @@ -141,19 +149,44 @@ public class SearchBarPane extends LocatableHLayout { }
private ComboBoxItem getGroupComboBox() { - ComboBoxItem comboBox = new ComboBoxItem("query", "Query"); + final ComboBoxItem comboBox = new ComboBoxItem("query", "Query"); comboBox.setWidth(400); comboBox.setShowTitle(false); + comboBox.setHint("group search"); + comboBox.setShowHintInField(true);
comboBox.setOptionDataSource(new ResourceGroupsDataSource()); - ListGridField nameField = new ListGridField("name"); - ListGridField descriptionField = new ListGridField("description"); - comboBox.setPickListFields(nameField, descriptionField); + + ListGridField nameField = ResourceGroupDataSourceField.NAME.getListGridField(250); + ListGridField descriptionField = ResourceGroupDataSourceField.DESCRIPTION.getListGridField(); + ListGridField typeNameField = ResourceGroupDataSourceField.TYPE.getListGridField(130); + ListGridField pluginNameField = ResourceGroupDataSourceField.PLUGIN.getListGridField(100); + ListGridField categoryField = ResourceGroupDataSourceField.CATEGORY.getListGridField(105); + + comboBox.setPickListFields(nameField, descriptionField, typeNameField, pluginNameField, categoryField);
comboBox.setValueField("id"); - comboBox.setDisplayField("name"); - comboBox.setPickListWidth(600); + comboBox.setDisplayField(ResourceGroupDataSourceField.NAME.propertyName()); + comboBox.setPickListWidth(800); comboBox.setTextMatchStyle(TextMatchStyle.SUBSTRING); + comboBox.setCompleteOnTab(true); + + comboBox.addChangedHandler(new ChangedHandler() { + public void onChanged(ChangedEvent changedEvent) { + try { + Integer groupId = (Integer) changedEvent.getValue(); + comboBox.setValue(""); + + String link = LinkManager.getResourceGroupLink(groupId); + if (!link.contains("#")) { + com.google.gwt.user.client.Window.Location.assign(link); + } else { + History.newItem(link.substring(1)); + } + } catch (Exception e) { + } + } + });
return comboBox; }
rhq-commits@lists.fedorahosted.org