/* * RHQ Management Platform * Copyright (C) 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 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.coregui.client.inventory.groups.detail.monitoring.traits; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.CellFormatter; import com.smartgwt.client.widgets.grid.HoverCustomizer; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.criteria.MeasurementDataTraitCriteria; import org.rhq.core.domain.measurement.MeasurementData; import org.rhq.core.domain.util.collection.ArrayUtils; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.LinkManager; import org.rhq.coregui.client.components.table.TableAction; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.inventory.common.AbstractMeasurementDataTraitDataSource; import org.rhq.coregui.client.inventory.common.AbstractMeasurementDataTraitListView; import org.rhq.coregui.client.inventory.resource.AncestryUtil; /** * The group Monitoring>Traits subtab. * * @author Ian Springer */ public class TraitsView extends AbstractMeasurementDataTraitListView { private int groupId; public TraitsView(int groupId) { super(new TraitsDataSource(groupId), createCriteria(groupId)); this.groupId = groupId; } @Override protected void configureTable() { super.configureTable(); ListGrid listGrid = getListGrid(); listGrid.setShowAllRecords(true); //listGrid.setGroupStartOpen(GroupStartOpen.ALL); //listGrid.groupBy(MeasurementDataTraitCriteria.SORT_FIELD_DISPLAY_NAME); ListGridField resourceNameField = listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME); resourceNameField.setCellFormatter(new CellFormatter() { public String format(Object o, ListGridRecord listGridRecord, int i, int i1) { String url = LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); return LinkManager.getHref(url, o.toString()); } }); resourceNameField.setShowHover(true); resourceNameField.setHoverCustomizer(new HoverCustomizer() { public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) { return AncestryUtil.getResourceHoverHTML(listGridRecord, 0); } }); //resourceNameField.setCanGroupBy(true); AncestryUtil.setupAncestryListGridField(listGrid); } @Override public Canvas getDetailsView(Integer definitionId) { return new TraitsDetailView(this.groupId, definitionId); } private static Criteria createCriteria(int groupId) { Criteria criteria = new Criteria(); criteria.addCriteria(MeasurementDataTraitCriteria.FILTER_FIELD_GROUP_ID, groupId); criteria.addCriteria(MeasurementDataTraitCriteria.FILTER_FIELD_MAX_TIMESTAMP, true); return criteria; } @Override protected TableAction getLiveValueAction() { return new TableAction() { @Override public boolean isEnabled(ListGridRecord[] selection) { return selection != null && selection.length > 0; } @Override public void executeAction(ListGridRecord[] selection, Object actionValue) { if (selection == null || selection.length == 0) { return; } final Map<String, ListGridRecord> selectedRecords = new HashMap<String, ListGridRecord>(); int[] definitionIds = new int[selection.length]; int i = 0; Set<Integer> resourceIds = new HashSet<Integer>(); for (ListGridRecord record : selection) { Integer defId = record .getAttributeAsInt(AbstractMeasurementDataTraitDataSource.FIELD_METRIC_SCHED_ID); definitionIds[i++] = defId.intValue(); int resourceId = record.getAttributeAsInt(MeasurementDataTraitCriteria.FILTER_FIELD_RESOURCE_ID); resourceIds.add(resourceId); selectedRecords.put( resourceId + ":" + record.getAttribute(AbstractMeasurementDataTraitDataSource.FIELD_METRIC_NAME), record); } // actually go out and ask the agents for the data GWTServiceLookup.getMeasurementDataService(60000).findLiveDataForGroup(groupId, ArrayUtils.unwrapCollection(resourceIds), definitionIds, new AsyncCallback<Set<MeasurementData>>() { @Override public void onSuccess(Set<MeasurementData> result) { if (result == null) { result = new HashSet<MeasurementData>(0); } ArrayList<ListGridRecord> records = new ArrayList<ListGridRecord>(result.size()); for (MeasurementData data : result) { ListGridRecord record = selectedRecords.get(data.getName()); record.setAttribute("value", data.getValue()); records.add(record); } Collections.sort(records, new Comparator<ListGridRecord>() { public int compare(ListGridRecord o1, ListGridRecord o2) { return o1.getAttribute("name").compareTo(o2.getAttribute("name")); } }); showLiveData(records); } @Override public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_measureTable_getLive_failure(), caught); } }); } }; } @Override protected ListGrid decorateLiveDataGrid(List<ListGridRecord> records) { ListGrid liveDataGrid = new ListGrid(); liveDataGrid.setShowAllRecords(true); liveDataGrid.setData(records.toArray(new ListGridRecord[records.size()])); liveDataGrid.setSelectionType(SelectionStyle.NONE); ListGridField name = new ListGridField(MeasurementDataTraitCriteria.SORT_FIELD_DISPLAY_NAME, MSG.dataSource_traits_field_trait()); ListGridField value = new ListGridField("value", MSG.common_title_value()); ListGridField resourceNameField = new ListGridField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME, MSG.common_title_resource()); resourceNameField.setCellFormatter(new CellFormatter() { public String format(Object o, ListGridRecord listGridRecord, int i, int i1) { String url = LinkManager.getResourceLink(listGridRecord.getAttributeAsInt(AncestryUtil.RESOURCE_ID)); return LinkManager.getHref(url, o.toString()); } }); resourceNameField.setShowHover(true); resourceNameField.setHoverCustomizer(new HoverCustomizer() { public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) { return AncestryUtil.getResourceHoverHTML(listGridRecord, 0); } }); liveDataGrid.setFields(name, value, resourceNameField, AncestryUtil.setupAncestryListGridField()); return liveDataGrid; } }