modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/FavoriteGroupsPortlet.java | 151 ++++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupCompositeDataSource.java | 32 +- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java | 8 5 files changed, 184 insertions(+), 13 deletions(-)
New commits: commit 1174064a0372d31199d75939b64d36eaa2232d02 Author: John Mazzitelli mazz@redhat.com Date: Thu Jan 12 16:51:18 2012 -0500
[BZ 672947] add favorite groups portlet
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java index b2aa035..67937b0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java @@ -30,6 +30,7 @@ import org.rhq.core.domain.common.EntityContext; import org.rhq.core.domain.dashboard.DashboardPortlet; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ImageManager; +import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.FavoriteGroupsPortlet; import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupAlertsPortlet; import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupBundleDeploymentsPortlet; import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupConfigurationUpdatesPortlet; @@ -105,6 +106,7 @@ public class PortletFactory { globalPortletFactoryMap.put(TagCloudPortlet.KEY, TagCloudPortlet.Factory.INSTANCE); } globalPortletFactoryMap.put(FavoriteResourcesPortlet.KEY, FavoriteResourcesPortlet.Factory.INSTANCE); + globalPortletFactoryMap.put(FavoriteGroupsPortlet.KEY, FavoriteGroupsPortlet.Factory.INSTANCE); globalPortletFactoryMap.put(MashupPortlet.KEY, MashupPortlet.Factory.INSTANCE); globalPortletFactoryMap.put(MessagePortlet.KEY, MessagePortlet.Factory.INSTANCE); globalPortletFactoryMap.put(ProblemResourcesPortlet.KEY, ProblemResourcesPortlet.Factory.INSTANCE); @@ -125,6 +127,7 @@ public class PortletFactory { globalPortletNameMap.put(TagCloudPortlet.NAME, TagCloudPortlet.KEY); } globalPortletNameMap.put(FavoriteResourcesPortlet.NAME, FavoriteResourcesPortlet.KEY); + globalPortletNameMap.put(FavoriteGroupsPortlet.NAME, FavoriteGroupsPortlet.KEY); globalPortletNameMap.put(MashupPortlet.NAME, MashupPortlet.KEY); globalPortletNameMap.put(MessagePortlet.NAME, MessagePortlet.KEY); globalPortletNameMap.put(ProblemResourcesPortlet.NAME, ProblemResourcesPortlet.KEY); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/FavoriteGroupsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/FavoriteGroupsPortlet.java new file mode 100644 index 0000000..b438071 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/FavoriteGroupsPortlet.java @@ -0,0 +1,151 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2010 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.dashboard.portlets.groups; + +import java.util.Set; + +import com.google.gwt.user.client.Timer; +import com.smartgwt.client.data.Criteria; +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.HTMLFlow; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.events.FieldStateChangedEvent; +import com.smartgwt.client.widgets.grid.events.FieldStateChangedHandler; + +import org.rhq.core.domain.common.EntityContext; +import org.rhq.core.domain.configuration.PropertySimple; +import org.rhq.core.domain.dashboard.DashboardPortlet; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; +import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet; +import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil; +import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet; +import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory; +import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow; +import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupCompositeDataSource; +import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupListView; + +public class FavoriteGroupsPortlet extends ResourceGroupListView implements AutoRefreshPortlet { + + // A non-displayed, persisted identifier for the portlet + public static final String KEY = "FavoriteGroups"; + // A default displayed, persisted name for the portlet + public static final String NAME = MSG.favorites_groups(); + + public static final String CFG_TABLE_PREFS = "tablePreferences"; + + // set on initial configuration, the window for this portlet view. + private PortletWindow portletWindow; + + private Timer refreshTimer; + + public FavoriteGroupsPortlet(String locatorId) { + super(locatorId, createInitialCriteria(), NAME); + setOverflow(Overflow.VISIBLE); + + setShowHeader(false); + setShowFooter(false); + } + + private static Criteria createInitialCriteria() { + Set<Integer> favoriteIds = UserSessionManager.getUserPreferences().getFavoriteResourceGroups(); + + Integer[] favArray = favoriteIds.toArray(new Integer[favoriteIds.size()]); + + Criteria criteria = new Criteria(); + if (favoriteIds.isEmpty()) { + criteria.addCriteria("id", -1); + } else { + criteria.addCriteria(ResourceGroupCompositeDataSource.FILTER_GROUP_IDS, favArray); + } + + return criteria; + } + + @Override + protected void configureTable() { + super.configureTable(); + + getListGrid().addFieldStateChangedHandler(new FieldStateChangedHandler() { + public void onFieldStateChanged(FieldStateChangedEvent fieldStateChangedEvent) { + String state = getListGrid().getViewState(); + + portletWindow.getStoredPortlet().getConfiguration().put(new PropertySimple(CFG_TABLE_PREFS, state)); + portletWindow.save(); + } + }); + + DashboardPortlet storedPortlet = portletWindow.getStoredPortlet(); + if ((null != storedPortlet && null != storedPortlet.getConfiguration())) { + + PropertySimple tablePrefs = storedPortlet.getConfiguration().getSimple(CFG_TABLE_PREFS); + ListGrid listGrid = getListGrid(); + if (null != tablePrefs && null != listGrid) { + String state = tablePrefs.getStringValue(); + listGrid.setViewState(state); + } + } + } + + public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) { + if (null == this.portletWindow && null != portletWindow) { + this.portletWindow = portletWindow; + } + } + + public Canvas getHelpCanvas() { + return new HTMLFlow(MSG.view_portlet_help_favoriteResources()); + } + + public static final class Factory implements PortletViewFactory { + public static PortletViewFactory INSTANCE = new Factory(); + + public final Portlet getInstance(String locatorId, EntityContext context) { + + return new FavoriteGroupsPortlet(locatorId); + } + } + + public void startRefreshCycle() { + refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer); + } + + @Override + protected void onDestroy() { + AutoRefreshPortletUtil.onDestroy(this, refreshTimer); + + super.onDestroy(); + } + + public boolean isRefreshing() { + return false; + } + + @Override + public void refresh() { + if (!isRefreshing()) { + super.refresh(); + } + } + +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java index b9f7e31..7d94624 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java @@ -42,6 +42,7 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil; import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet; import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory; import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow; +import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource; import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSearchView;
/** @@ -78,7 +79,7 @@ public class FavoriteResourcesPortlet extends ResourceSearchView implements Auto if (favoriteIds.isEmpty()) { criteria.addCriteria("id", -1); } else { - criteria.addCriteria("resourceIds", favArray); + criteria.addCriteria(ResourceDatasource.FILTER_RESOURCE_IDS, favArray); }
return criteria; diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupCompositeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupCompositeDataSource.java index 17b2b56..4a87378 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupCompositeDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupCompositeDataSource.java @@ -18,6 +18,14 @@ */ package org.rhq.enterprise.gui.coregui.client.inventory.groups;
+import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.AVAIL_CHILDREN; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.AVAIL_DESCENDANTS; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.CATEGORY; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.DESCRIPTION; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.NAME; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.PLUGIN; +import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.TYPE; + import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; @@ -43,13 +51,13 @@ import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import static org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupDataSourceField.*; - /** * @author Joseph Marques */ public class ResourceGroupCompositeDataSource extends RPCDataSource<ResourceGroupComposite, ResourceGroupCriteria> {
+ public static final String FILTER_GROUP_IDS = "resourceGroupIds"; + ResourceGroupGWTServiceAsync groupService = GWTServiceLookup.getResourceGroupService();
private static ResourceGroupCompositeDataSource INSTANCE; @@ -80,8 +88,8 @@ public class ResourceGroupCompositeDataSource extends RPCDataSource<ResourceGrou nameDataField.setCanEdit(false); fields.add(nameDataField);
- DataSourceTextField descriptionDataField = new DataSourceTextField(DESCRIPTION.propertyName(), DESCRIPTION - .title()); + DataSourceTextField descriptionDataField = new DataSourceTextField(DESCRIPTION.propertyName(), + DESCRIPTION.title()); descriptionDataField.setCanEdit(false); fields.add(descriptionDataField);
@@ -125,12 +133,14 @@ public class ResourceGroupCompositeDataSource extends RPCDataSource<ResourceGrou ResourceGroupCriteria criteria = new ResourceGroupCriteria(); criteria.setPageControl(getPageControl(request));
+ criteria.addFilterId(getFilter(request, "id", Integer.class)); criteria.addFilterName(getFilter(request, NAME.propertyName(), String.class)); criteria.addFilterGroupCategory(getFilter(request, CATEGORY.propertyName(), GroupCategory.class)); criteria.addFilterDownMemberCount(getFilter(request, "downMemberCount", Long.class)); criteria.addFilterExplicitResourceIds(getFilter(request, "explicitResourceId", Integer.class)); criteria.addFilterGroupDefinitionId(getFilter(request, "groupDefinitionId", Integer.class)); criteria.setSearchExpression(getFilter(request, "search", String.class)); + criteria.addFilterIds(getArrayFilter(request, FILTER_GROUP_IDS, Integer.class));
return criteria; } @@ -202,14 +212,15 @@ public class ResourceGroupCompositeDataSource extends RPCDataSource<ResourceGrou StringBuilder results = new StringBuilder(); results.append("<table width="120px"><tr>"); if (up == 0 && down == 0) { - results.append(getColumn(false, "<img src="" - + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(null)) + "" /> 0")); + results.append(getColumn(false, + "<img src="" + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(null)) + "" /> 0")); results.append(getColumn(true)); results.append(getColumn(false)); } else { if (up > 0) { - results.append(getColumn(false, " <img src="" - + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(Boolean.TRUE)) + "" />", up)); + results.append(getColumn(false, + " <img src="" + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(Boolean.TRUE)) + + "" />", up)); }
if (up > 0 && down > 0) { @@ -217,8 +228,9 @@ public class ResourceGroupCompositeDataSource extends RPCDataSource<ResourceGrou }
if (down > 0) { - results.append(getColumn(false, " <img src="" - + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(Boolean.FALSE)) + "" />", down)); + results.append(getColumn(false, + " <img src="" + ImageManager.getFullImagePath(ImageManager.getAvailabilityIcon(Boolean.FALSE)) + + "" />", down)); } else { results.append(getColumn(false, " <img src="/images/blank.png" width="16px" height="16px" />")); 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 83c356f..9f2cd03 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 @@ -51,6 +51,8 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; */ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup, ResourceGroupCriteria> {
+ public static final String FILTER_GROUP_IDS = "resourceGroupIds"; + private ResourceGroupGWTServiceAsync groupService = GWTServiceLookup.getResourceGroupService();
private static ResourceGroupsDataSource INSTANCE; @@ -79,8 +81,8 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup, Resou DataSourceTextField nameDataField = new DataSourceTextField(NAME.propertyName(), NAME.title(), 200); fields.add(nameDataField);
- DataSourceTextField descriptionDataField = new DataSourceTextField(DESCRIPTION.propertyName(), DESCRIPTION - .title()); + DataSourceTextField descriptionDataField = new DataSourceTextField(DESCRIPTION.propertyName(), + DESCRIPTION.title()); fields.add(descriptionDataField);
DataSourceTextField typeNameDataField = new DataSourceTextField(TYPE.propertyName(), TYPE.title()); @@ -117,12 +119,14 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup, Resou ResourceGroupCriteria criteria = new ResourceGroupCriteria(); criteria.setPageControl(getPageControl(request));
+ criteria.addFilterId(getFilter(request, "id", Integer.class)); criteria.addFilterName(getFilter(request, NAME.propertyName(), String.class)); criteria.addFilterGroupCategory(getFilter(request, CATEGORY.propertyName(), GroupCategory.class)); criteria.addFilterDownMemberCount(getFilter(request, "downMemberCount", Long.class)); criteria.addFilterExplicitResourceIds(getFilter(request, "explicitResourceId", Integer.class)); criteria.addFilterGroupDefinitionId(getFilter(request, "groupDefinitionId", Integer.class)); criteria.setSearchExpression(getFilter(request, "search", String.class)); + criteria.addFilterIds(getArrayFilter(request, FILTER_GROUP_IDS, Integer.class));
return criteria; }
rhq-commits@lists.fedorahosted.org