package org.rhq.enterprise.gui.navigation.resource; import java.util.ArrayList; import java.util.List; import javax.faces.context.FacesContext; import org.richfaces.component.UITree; import org.richfaces.event.NodeSelectedEvent; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.MeasurementSchedule; import org.rhq.core.domain.operation.OperationDefinition; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.composite.ResourceWithAvailability; 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.MeasurementScheduleManagerLocal; import org.rhq.enterprise.server.operation.OperationManagerLocal; import org.rhq.enterprise.server.resource.ResourceManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; public class ResourceTreeContextMenuUIBean extends TreeContextMenuBase { private OperationManagerLocal operationManager = LookupUtil.getOperationManager(); private MeasurementScheduleManagerLocal measurementScheduleManager = LookupUtil.getMeasurementScheduleManager(); private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager(); private Resource currentResource; private List<MenuItemDescriptor> menuItemDescriptorsForView; private List<MetricMenuItemDescriptor> metricMenuItemDescriptorsForGraph; private List<MenuItemDescriptor> menuItemDescriptorsForOperations; @Override protected void init() throws Exception { Subject subject = EnterpriseFacesContextUtility.getSubject(); String resourceIdString = FacesContextUtility.getOptionalRequestParameter("contextResourceId"); if (resourceIdString != null) { int resourceId = Integer.parseInt(resourceIdString); //The resource is taken from ResourceManager because of error when the AutoGroup is selected in the menu // the resource is not in Faces Context //Resource res = EnterpriseFacesContextUtility.getResource(); currentResource = resourceManager.getResourceById(subject, resourceId); List<MeasurementSchedule> schedules = measurementScheduleManager.findSchedulesForResourceAndType( subject, resourceId, DataType.MEASUREMENT, null, true); // operations menu, lazy-loaded entries because only name/id are needed for display List<OperationDefinition> operations = operationManager.findSupportedResourceTypeOperations(subject, currentResource.getResourceType().getId(), false); menuItemDescriptorsForView = createViewMenuItemDescriptors(resourceId, schedules); metricMenuItemDescriptorsForGraph = createGraphMenuItemDescriptors(resourceId, schedules); menuItemDescriptorsForOperations = createOperationMenuItemDescriptors(resourceId, operations); } else { currentResource = null; menuItemDescriptorsForView = null; metricMenuItemDescriptorsForGraph = null; menuItemDescriptorsForOperations = null; } } @Override protected List<String> getMenuHeaders() { List<String> ret = new ArrayList<String>(); ret.add(currentResource.getName()); ret.add(currentResource.getResourceType().getName()); return ret; } @Override protected QuickLinksDescriptor getMenuQuickLinks() { int resourceId = currentResource.getId(); QuickLinksDescriptor descriptor = new QuickLinksDescriptor(); descriptor.setMenuItemId("menu_res_" + resourceId); descriptor.setMonitoringUrl("/rhq/resource/monitor/graphs.xhtml?id=" + resourceId); descriptor.setInventoryUrl("/rhq/resource/inventory/view.xhtml?id=" + resourceId); descriptor.setAlertsUrl("/rhq/resource/alert/listAlertDefinitions.xhtml?id=" + resourceId); descriptor.setConfigurationUrl("/rhq/resource/configuration/view.xhtml?id=" + resourceId); descriptor.setOperationUrl("/rhq/resource/operation/resourceOperationScheduleNew.xhtml?id=" + resourceId); descriptor.setEventUrl("/rhq/resource/events/history.xhtml?id=" + resourceId); descriptor.setContentUrl("/rhq/resource/content/view.xhtml?id=" + resourceId); return descriptor; } @Override protected List<MenuItemDescriptor> getViewChartsMenuItems() { return menuItemDescriptorsForView; } @Override protected List<MetricMenuItemDescriptor> getGraphToViewMenuItems() { return metricMenuItemDescriptorsForGraph; } @Override protected List<MenuItemDescriptor> getOperationsMenuItems() { return menuItemDescriptorsForOperations; } @Override protected int getResourceTypeId() { return currentResource.getResourceType().getId(); } @Override protected boolean shouldCreateMenu() { return currentResource != null; } private List<MetricMenuItemDescriptor> createGraphMenuItemDescriptors(int resourceId, List<MeasurementSchedule> schedules) { List<MetricMenuItemDescriptor> ret = new ArrayList<MetricMenuItemDescriptor>(); for (MeasurementSchedule schedule : schedules) { MetricMenuItemDescriptor descriptor = new MetricMenuItemDescriptor(); fillBasicMetricMenuItemDescriptor(descriptor, resourceId, "measurementGraphMenuItem_", schedule); descriptor.setMetricToken(resourceId + "," + schedule.getId()); ret.add(descriptor); } return ret; } private List<MenuItemDescriptor> createViewMenuItemDescriptors(int resourceId, List<MeasurementSchedule> schedules) { List<MenuItemDescriptor> ret = new ArrayList<MenuItemDescriptor>(); for (MeasurementSchedule schedule : schedules) { MenuItemDescriptor descriptor = new MenuItemDescriptor(); fillBasicMetricMenuItemDescriptor(descriptor, resourceId, "measurementChartMenuItem_", schedule); ret.add(descriptor); } return ret; } private List<MenuItemDescriptor> createOperationMenuItemDescriptors(int resourceId, List<OperationDefinition> operations) { List<MenuItemDescriptor> ret = new ArrayList<MenuItemDescriptor>(); for (OperationDefinition def : operations) { MenuItemDescriptor descriptor = new MenuItemDescriptor(); descriptor.setMenuItemId("operation_" + def.getId()); descriptor.setName(def.getDisplayName()); String url = "/rhq/resource/operation/resourceOperationScheduleNew.xhtml"; url += "?id=" + resourceId; url += "&opId=" + def.getId(); descriptor.setUrl(url); ret.add(descriptor); } return ret; } private void fillBasicMetricMenuItemDescriptor(MenuItemDescriptor descriptor, int resourceId, String idPrefix, MeasurementSchedule schedule) { descriptor.setMenuItemId(idPrefix + schedule.getId()); descriptor.setName(schedule.getDefinition().getDisplayName()); String url = "/resource/common/monitor/Visibility.do"; url += "?mode=chartSingleMetricSingleResource"; url += "&m=" + schedule.getDefinition().getId(); url += "&id=" + resourceId; descriptor.setUrl(url); } //XXX what is this for? public void processSelection(NodeSelectedEvent event) { UITree tree = (UITree) event.getComponent(); try { Object node = tree.getRowData(); ResourceTreeNode selectedNode = (ResourceTreeNode) node; Object data = selectedNode.getData(); if (data instanceof ResourceWithAvailability) { FacesContext.getCurrentInstance(); } } catch (Exception e) { e.printStackTrace(); } } }