/* * 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 as published by * the Free Software Foundation version 2 of the License. * * 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 for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.navigation.resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.MeasurementDefinition; import org.rhq.core.domain.resource.group.composite.AutoGroupComposite; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.enterprise.gui.navigation.contextmenu.MenuItemDescriptor; import org.rhq.enterprise.gui.navigation.contextmenu.MetricMenuItemDescriptor; import org.rhq.enterprise.gui.navigation.contextmenu.QuickLinksDescriptor; import org.rhq.enterprise.gui.navigation.contextmenu.TreeContextMenuBase; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerLocal; import org.rhq.enterprise.server.resource.ResourceManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; /** * Backing bean for the tree context menu of auto groups. * * @author Lukas Krejci */ public class AutoGroupTreeContextMenuUIBean extends TreeContextMenuBase { private AutoGroupComposite currentAutoGroup; private List<MenuItemDescriptor> metricMenuItemDescriptorsForView; private List<MetricMenuItemDescriptor> metricMenuItemDescriptorsForGraph; private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager(); private MeasurementDefinitionManagerLocal measurementDefinitionManager = LookupUtil .getMeasurementDefinitionManager(); @Override protected void init() throws Exception { Subject subject = EnterpriseFacesContextUtility.getSubject(); String parentIdString = FacesContextUtility.getOptionalRequestParameter("contextParentResourceId"); String resourceTypeIdString = FacesContextUtility.getOptionalRequestParameter("contextAutoGroupResourceTypeId"); if (parentIdString != null && resourceTypeIdString != null) { int parentId = Integer.parseInt(parentIdString); int resourceTypeId = Integer.parseInt(resourceTypeIdString); currentAutoGroup = getAutoGroupForResourceType(subject, parentId, resourceTypeId); List<MeasurementDefinition> definitions = measurementDefinitionManager .findMeasurementDefinitionsByResourceType(subject, resourceTypeId, DataType.MEASUREMENT, null); metricMenuItemDescriptorsForView = createViewMenuItemDescriptors(currentAutoGroup, definitions); metricMenuItemDescriptorsForGraph = createGraphMenuItemDescriptors(currentAutoGroup, definitions); } else { currentAutoGroup = null; metricMenuItemDescriptorsForView = null; metricMenuItemDescriptorsForGraph = null; } } @Override protected List<String> getMenuHeaders() { String name = currentAutoGroup.getResourceType().getName(); return Collections.singletonList(name + " (" + currentAutoGroup.getMemberCount() + ")"); } @Override protected QuickLinksDescriptor getMenuQuickLinks() { int parentId = currentAutoGroup.getParentResource().getId(); int resourceTypeId = currentAutoGroup.getResourceType().getId(); QuickLinksDescriptor descriptor = new QuickLinksDescriptor(); descriptor.setMenuItemId("menu_ag_" + parentId + "_" + resourceTypeId); descriptor.setMonitoringUrl("/rhq/autogroup/monitor/graphs.xhtml?parent=" + parentId + "&type=" + resourceTypeId); descriptor.setEventUrl("/rhq/autogroup/events/history.xhtml?parent=" + parentId + "&type=" + resourceTypeId); return descriptor; } @Override protected List<MenuItemDescriptor> getViewChartsMenuItems() { return metricMenuItemDescriptorsForView; } @Override protected List<MetricMenuItemDescriptor> getGraphToViewMenuItems() { return metricMenuItemDescriptorsForGraph; } @Override protected List<MenuItemDescriptor> getOperationsMenuItems() { //autogroups don't support operations return null; } @Override protected int getResourceTypeId() { return currentAutoGroup.getResourceType().getId(); } @Override protected boolean shouldCreateMenu() { return currentAutoGroup != null; } private AutoGroupComposite getAutoGroupForResourceType(Subject subject, int parentId, int resourceTypeId) { List<AutoGroupComposite> autogroups = resourceManager.findChildrenAutoGroups(subject, parentId, new int[] { resourceTypeId }); for (AutoGroupComposite autogroup : autogroups) { // The list could contain two items if the ResourceType belongs to a subcategory - the auto-group // AutoGroupComposite and a subcategory AutoGroupComposite - we want the auto-group, which will have a // non-null resourceType. if (autogroup.getResourceType() != null) { return autogroup; } } return null; } private List<MetricMenuItemDescriptor> createGraphMenuItemDescriptors(AutoGroupComposite autoGroup, List<MeasurementDefinition> definitions) { List<MetricMenuItemDescriptor> ret = new ArrayList<MetricMenuItemDescriptor>(); int parentId = autoGroup.getParentResource().getId(); int resourceTypeId = autoGroup.getResourceType().getId(); for (MeasurementDefinition definition : definitions) { MetricMenuItemDescriptor descriptor = new MetricMenuItemDescriptor(); fillBasicMetricMenuItemDescriptor(descriptor, parentId, resourceTypeId, "measurementGraphMenuItem_ag_", definition); descriptor.setMetricToken("ag," + parentId + "," + definition.getId() + "," + resourceTypeId); ret.add(descriptor); } return ret; } private List<MenuItemDescriptor> createViewMenuItemDescriptors(AutoGroupComposite autoGroup, List<MeasurementDefinition> definitions) { List<MenuItemDescriptor> ret = new ArrayList<MenuItemDescriptor>(); int parentId = autoGroup.getParentResource().getId(); int resourceTypeId = autoGroup.getResourceType().getId(); for (MeasurementDefinition definition : definitions) { MenuItemDescriptor descriptor = new MenuItemDescriptor(); fillBasicMetricMenuItemDescriptor(descriptor, parentId, resourceTypeId, "measurementChartMenuItem_ag_", definition); ret.add(descriptor); } return ret; } private void fillBasicMetricMenuItemDescriptor(MenuItemDescriptor descriptor, int parentId, int resourceTypeId, String idPrefix, MeasurementDefinition definition) { descriptor.setMenuItemId(idPrefix + definition.getId()); descriptor.setName(definition.getDisplayName()); String url = "/resource/common/monitor/Visibility.do"; url += "?mode=chartSingleMetricMultiResource"; url += "&m=" + definition.getId(); url += "&type=" + resourceTypeId; url += "&parent=" + parentId; descriptor.setUrl(url); } }