modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 349 ++++------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsResourceView.java | 70 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableView.java | 53 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/preferences/MeasurementUserPreferences.java | 79 --
4 files changed, 244 insertions(+), 307 deletions(-)
New commits:
commit 1e23623a8ce39893ce04f0ce507e9137f211e65a
Author: Mike Thompson <mithomps(a)redhat.com>
Date: Tue Sep 17 16:02:45 2013 -0700
[BZ 1009089] - Metrics list from previous resource cached when navigating Monitor Sub Tabs. Move the stateful momento containing open chart rows out to the ResourceDetailView instead of at the MetricsTableView which can then be created and destroyed like the other stateless views and state momento passed into the View to restore previous (opened rows) state.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 11c7328..328d471 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -89,106 +89,13 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceComposite, ResourceTitleBar, D3GraphListView> {
private static final String BASE_VIEW_PATH = "Resource";
-
- public static class Tab {
- public static class Summary {
- public static final String NAME = "Summary";
-
- public static class SubTab {
- public static final String ACTIVITY = "Activity";
- public static final String TIMELINE = "Timeline";
- }
- }
-
- public static class Inventory {
- public static final String NAME = "Inventory";
-
- public static class SubTab {
- public static final String CHILDREN = "Children";
- public static final String CHILD_HISTORY = "ChildHistory";
- public static final String CONNECTION_SETTINGS = "ConnectionSettings";
- public static final String CONNECTION_SETTINGS_HISTORY = PluginConfigurationHistoryListView.VIEW_ID.getName();
- public static final String GROUPS = "Groups";
- public static final String AGENT = "Agent";
- }
- }
-
- public static class Alerts {
- public static final String NAME = "Alerts";
-
- public static class SubTab {
- public static final String HISTORY = "History";
- public static final String DEFINITIONS = "Definitions";
- }
- }
-
- public static class Monitoring {
- public static final String NAME = "Monitoring";
-
- public static class SubTab {
- public static final String METRICS = "Metrics";
- public static final String TRAITS = "Traits";
- public static final String SCHEDULES = "Schedules";
- public static final String CALL_TIME = "CallTime";
- }
- }
-
- public static class Events {
- public static final String NAME = "Events";
-
- public static class SubTab {
- public static final String HISTORY = "History";
- }
- }
-
- public static class Operations {
- public static final String NAME = "Operations";
-
- public static class SubTab {
- public static final String SCHEDULES = "Schedules";
- public static final String HISTORY = "History";
- }
- }
-
- public static class Configuration {
- public static final String NAME = "Configuration";
-
- public static class SubTab {
- public static final String CURRENT = "Current";
- public static final String HISTORY = "History";
- }
- }
-
- public static class Drift {
- public static final String NAME = "Drift";
-
- public static class SubTab {
- public static final String DEFINITIONS = "Definitions";
- }
- }
-
- public static class Content {
- public static final String NAME = "Content";
-
- public static class SubTab {
- public static final String DEPLOYED = "Deployed";
- public static final String NEW = "New";
- public static final String SUBSCRIPTIONS = "Subscriptions";
- public static final String HISTORY = "History";
- }
- }
- }
-
private Integer resourceId;
private Integer lastSelectedResourceId = 0;
-
private ResourceComposite resourceComposite;
-
private MetricsResourceView metricsResourceView;
-
- //private List<ResourceSelectListener> selectListeners = new ArrayList<ResourceSelectListener>();
-
+ private Set<Integer> metricsExpandedRowsMomento;
private TwoLevelTab summaryTab;
+
private TwoLevelTab monitoringTab;
private TwoLevelTab inventoryTab;
private TwoLevelTab operationsTab;
@@ -275,100 +182,96 @@ public class ResourceDetailView extends
private static TwoLevelTab[] createTabs() {
List<TwoLevelTab> tabs = new ArrayList<TwoLevelTab>();
- TwoLevelTab summaryTab = new TwoLevelTab(new ViewName(Tab.Summary.NAME, MSG.common_title_summary()), ImageManager.getResourceIcon(
- ResourceCategory.SERVICE, AvailabilityType.UP));
- SubTab summaryActivity = new SubTab(summaryTab, new ViewName(Tab.Summary.SubTab.ACTIVITY, MSG.view_tabs_common_activity()), null);
- SubTab summaryTimeline = new SubTab(summaryTab, new ViewName(Tab.Summary.SubTab.TIMELINE, MSG.view_tabs_common_timeline()), null);
+ TwoLevelTab summaryTab = new TwoLevelTab(new ViewName(Tab.Summary.NAME, MSG.common_title_summary()),
+ ImageManager.getResourceIcon(ResourceCategory.SERVICE, AvailabilityType.UP));
+ SubTab summaryActivity = new SubTab(summaryTab, new ViewName(Tab.Summary.SubTab.ACTIVITY,
+ MSG.view_tabs_common_activity()), null);
+ SubTab summaryTimeline = new SubTab(summaryTab, new ViewName(Tab.Summary.SubTab.TIMELINE,
+ MSG.view_tabs_common_timeline()), null);
summaryTab.registerSubTabs(summaryActivity, summaryTimeline);
tabs.add(summaryTab);
TwoLevelTab inventoryTab = new TwoLevelTab(new ViewName(Tab.Inventory.NAME, MSG.view_tabs_common_inventory()),
IconEnum.INVENTORY_SUMMARY);
- SubTab inventoryChildren = new SubTab(inventoryTab, new ViewName(
- Tab.Inventory.SubTab.CHILDREN, MSG.view_tabs_common_child_resources()),
- null);
- SubTab inventoryChildHistory = new SubTab(inventoryTab, new ViewName(
- Tab.Inventory.SubTab.CHILD_HISTORY,
+ SubTab inventoryChildren = new SubTab(inventoryTab, new ViewName(Tab.Inventory.SubTab.CHILDREN,
+ MSG.view_tabs_common_child_resources()), null);
+ SubTab inventoryChildHistory = new SubTab(inventoryTab, new ViewName(Tab.Inventory.SubTab.CHILD_HISTORY,
MSG.view_tabs_common_child_history()), null);
- SubTab inventoryConn = new SubTab(inventoryTab, new ViewName(
- Tab.Inventory.SubTab.CONNECTION_SETTINGS,
+ SubTab inventoryConn = new SubTab(inventoryTab, new ViewName(Tab.Inventory.SubTab.CONNECTION_SETTINGS,
MSG.view_tabs_common_connectionSettings()), null);
SubTab inventoryConnHistory = new SubTab(inventoryTab, PluginConfigurationHistoryListView.VIEW_ID, null);
- SubTab inventoryGroups = new SubTab(inventoryTab, new ViewName(
- Tab.Inventory.SubTab.GROUPS, MSG.view_tabs_common_groups()), null);
- SubTab inventoryAgent = new SubTab(inventoryTab, new ViewName(
- Tab.Inventory.SubTab.AGENT, MSG.view_tabs_common_agent()), null);
- inventoryTab.registerSubTabs(inventoryChildren, inventoryChildHistory, inventoryConn,
- inventoryConnHistory, inventoryGroups, inventoryAgent);
+ SubTab inventoryGroups = new SubTab(inventoryTab, new ViewName(Tab.Inventory.SubTab.GROUPS,
+ MSG.view_tabs_common_groups()), null);
+ SubTab inventoryAgent = new SubTab(inventoryTab, new ViewName(Tab.Inventory.SubTab.AGENT,
+ MSG.view_tabs_common_agent()), null);
+ inventoryTab.registerSubTabs(inventoryChildren, inventoryChildHistory, inventoryConn, inventoryConnHistory,
+ inventoryGroups, inventoryAgent);
tabs.add(inventoryTab);
- TwoLevelTab alertsTab = new TwoLevelTab(new ViewName(Tab.Alerts.NAME, MSG.common_title_alerts()), IconEnum.ALERT_DEFINITIONS);
- SubTab alertHistory = new SubTab(alertsTab, new ViewName(
- Tab.Alerts.SubTab.HISTORY, MSG.view_tabs_common_history()), null);
- SubTab alertDef = new SubTab(alertsTab, new ViewName(
- Tab.Alerts.SubTab.DEFINITIONS, MSG.common_title_definitions()), null);
+ TwoLevelTab alertsTab = new TwoLevelTab(new ViewName(Tab.Alerts.NAME, MSG.common_title_alerts()),
+ IconEnum.ALERT_DEFINITIONS);
+ SubTab alertHistory = new SubTab(alertsTab, new ViewName(Tab.Alerts.SubTab.HISTORY,
+ MSG.view_tabs_common_history()), null);
+ SubTab alertDef = new SubTab(alertsTab, new ViewName(Tab.Alerts.SubTab.DEFINITIONS,
+ MSG.common_title_definitions()), null);
alertsTab.registerSubTabs(alertHistory, alertDef);
tabs.add(alertsTab);
- TwoLevelTab monitoringTab = new TwoLevelTab(new ViewName(Tab.Monitoring.NAME, MSG.view_tabs_common_monitoring()),
- IconEnum.SUSPECT_METRICS);
-
- SubTab monitorMetrics = new SubTab(monitoringTab, new ViewName(
- Tab.Monitoring.SubTab.METRICS, MSG.view_tabs_common_metrics()), null);
- SubTab monitorTraits = new SubTab(monitoringTab, new ViewName(
- Tab.Monitoring.SubTab.TRAITS, MSG.view_tabs_common_traits()), null);
- SubTab monitorSched = new SubTab(monitoringTab, new ViewName(
- Tab.Monitoring.SubTab.SCHEDULES, MSG.view_tabs_common_schedules()), null);
- SubTab monitorCallTime = new SubTab(monitoringTab, new ViewName(
- Tab.Monitoring.SubTab.CALL_TIME, MSG.view_tabs_common_calltime()), null);
- monitoringTab.registerSubTabs( monitorMetrics, monitorTraits, monitorSched, monitorCallTime);
+ TwoLevelTab monitoringTab = new TwoLevelTab(
+ new ViewName(Tab.Monitoring.NAME, MSG.view_tabs_common_monitoring()), IconEnum.SUSPECT_METRICS);
+
+ SubTab monitorMetrics = new SubTab(monitoringTab, new ViewName(Tab.Monitoring.SubTab.METRICS,
+ MSG.view_tabs_common_metrics()), null);
+ SubTab monitorTraits = new SubTab(monitoringTab, new ViewName(Tab.Monitoring.SubTab.TRAITS,
+ MSG.view_tabs_common_traits()), null);
+ SubTab monitorSched = new SubTab(monitoringTab, new ViewName(Tab.Monitoring.SubTab.SCHEDULES,
+ MSG.view_tabs_common_schedules()), null);
+ SubTab monitorCallTime = new SubTab(monitoringTab, new ViewName(Tab.Monitoring.SubTab.CALL_TIME,
+ MSG.view_tabs_common_calltime()), null);
+ monitoringTab.registerSubTabs(monitorMetrics, monitorTraits, monitorSched, monitorCallTime);
tabs.add(monitoringTab);
- TwoLevelTab eventsTab = new TwoLevelTab(new ViewName(Tab.Events.NAME, MSG.view_tabs_common_events()), IconEnum.EVENTS);
- SubTab eventHistory = new SubTab(eventsTab, new ViewName(
- Tab.Events.SubTab.HISTORY, MSG.view_tabs_common_history()), null);
+ TwoLevelTab eventsTab = new TwoLevelTab(new ViewName(Tab.Events.NAME, MSG.view_tabs_common_events()),
+ IconEnum.EVENTS);
+ SubTab eventHistory = new SubTab(eventsTab, new ViewName(Tab.Events.SubTab.HISTORY,
+ MSG.view_tabs_common_history()), null);
eventsTab.registerSubTabs(eventHistory);
tabs.add(eventsTab);
TwoLevelTab operationsTab = new TwoLevelTab(new ViewName(Tab.Operations.NAME, MSG.common_title_operations()),
IconEnum.RECENT_OPERATIONS);
- SubTab operationsSchedules = new SubTab(operationsTab, new ViewName(
- Tab.Operations.SubTab.SCHEDULES,
+ SubTab operationsSchedules = new SubTab(operationsTab, new ViewName(Tab.Operations.SubTab.SCHEDULES,
MSG.view_tabs_common_schedules()), null);
- SubTab operationsHistory = new SubTab(operationsTab, new ViewName(
- Tab.Operations.SubTab.HISTORY,
+ SubTab operationsHistory = new SubTab(operationsTab, new ViewName(Tab.Operations.SubTab.HISTORY,
MSG.view_tabs_common_history()), null);
operationsTab.registerSubTabs(operationsSchedules, operationsHistory);
tabs.add(operationsTab);
- TwoLevelTab configurationTab = new TwoLevelTab(new ViewName(Tab.Configuration.NAME, MSG.common_title_configuration()),
- IconEnum.CONFIGURATION_HISTORY);
- SubTab configCurrent = new SubTab(configurationTab, new ViewName(
- Tab.Configuration.SubTab.CURRENT,
+ TwoLevelTab configurationTab = new TwoLevelTab(new ViewName(Tab.Configuration.NAME,
+ MSG.common_title_configuration()), IconEnum.CONFIGURATION_HISTORY);
+ SubTab configCurrent = new SubTab(configurationTab, new ViewName(Tab.Configuration.SubTab.CURRENT,
MSG.view_tabs_common_current()), null);
- SubTab configHistory = new SubTab(configurationTab, new ViewName(
- Tab.Configuration.SubTab.HISTORY,
+ SubTab configHistory = new SubTab(configurationTab, new ViewName(Tab.Configuration.SubTab.HISTORY,
MSG.view_tabs_common_history()), null);
configurationTab.registerSubTabs(configCurrent, configHistory);
tabs.add(configurationTab);
- TwoLevelTab driftTab = new TwoLevelTab(new ViewName(Tab.Drift.NAME, MSG.view_tabs_common_drift()), IconEnum.DRIFT_COMPLIANCE);
- SubTab driftDefinitions = new SubTab(driftTab, new ViewName(
- Tab.Drift.SubTab.DEFINITIONS,
+ TwoLevelTab driftTab = new TwoLevelTab(new ViewName(Tab.Drift.NAME, MSG.view_tabs_common_drift()),
+ IconEnum.DRIFT_COMPLIANCE);
+ SubTab driftDefinitions = new SubTab(driftTab, new ViewName(Tab.Drift.SubTab.DEFINITIONS,
MSG.common_title_definitions()), null);
driftTab.registerSubTabs(driftDefinitions);
tabs.add(driftTab);
- TwoLevelTab contentTab = new TwoLevelTab(new ViewName(Tab.Content.NAME, MSG.view_tabs_common_content()), IconEnum.CONTENT);
- SubTab contentDeployed = new SubTab(contentTab, new ViewName(
- Tab.Content.SubTab.DEPLOYED, MSG.view_tabs_common_deployed()), null);
- SubTab contentNew = new SubTab(contentTab, new ViewName(
- Tab.Content.SubTab.NEW, MSG.common_button_new()), null);
- SubTab contentSubscrip = new SubTab(contentTab, new ViewName(
- Tab.Content.SubTab.SUBSCRIPTIONS,
+ TwoLevelTab contentTab = new TwoLevelTab(new ViewName(Tab.Content.NAME, MSG.view_tabs_common_content()),
+ IconEnum.CONTENT);
+ SubTab contentDeployed = new SubTab(contentTab, new ViewName(Tab.Content.SubTab.DEPLOYED,
+ MSG.view_tabs_common_deployed()), null);
+ SubTab contentNew = new SubTab(contentTab, new ViewName(Tab.Content.SubTab.NEW, MSG.common_button_new()), null);
+ SubTab contentSubscrip = new SubTab(contentTab, new ViewName(Tab.Content.SubTab.SUBSCRIPTIONS,
MSG.view_tabs_common_subscriptions()), null);
- SubTab contentHistory = new SubTab(contentTab, new ViewName(
- Tab.Content.SubTab.HISTORY, MSG.view_tabs_common_history()), null);
+ SubTab contentHistory = new SubTab(contentTab, new ViewName(Tab.Content.SubTab.HISTORY,
+ MSG.view_tabs_common_history()), null);
contentTab.registerSubTabs(contentDeployed, contentNew, contentSubscrip, contentHistory);
tabs.add(contentTab);
@@ -379,23 +282,29 @@ public class ResourceDetailView extends
return new ResourceTitleBar(platformTree);
}
+ private static boolean hasMetricsOfType(ResourceComposite resourceComposite, DataType dataType) {
+ ResourceType type = resourceComposite.getResource().getResourceType();
+ Set<MeasurementDefinition> metricDefs = type.getMetricDefinitions();
+ for (MeasurementDefinition metricDef : metricDefs) {
+ if (dataType == null || metricDef.getDataType() == dataType) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
protected D3GraphListView createD3GraphListView() {
graphListView = D3GraphListView.createSummaryMultipleGraphs(resourceComposite.getResource(), true);
return graphListView;
}
-
-
@Override
protected void updateTabContent(ResourceComposite resourceComposite, boolean isRefresh) {
super.updateTabContent(resourceComposite, isRefresh);
try {
this.resourceComposite = resourceComposite;
- // for (ResourceSelectListener selectListener : this.selectListeners) {
- // selectListener.onResourceSelected(this.resourceComposite);
- // }
Resource resource = this.resourceComposite.getResource();
getTitleBar().setResource(this.resourceComposite, isRefresh);
@@ -516,7 +425,7 @@ public class ResourceDetailView extends
private void updateMonitoringTabContent(final Resource resource, Set<ResourceTypeFacet> facets) {
boolean visible = hasMetricsOfType(this.resourceComposite, DataType.MEASUREMENT)
- || hasMetricsOfType(this.resourceComposite, DataType.AVAILABILITY);
+ || hasMetricsOfType(this.resourceComposite, DataType.AVAILABILITY);
ViewFactory viewFactory;
boolean visibleToIE8 = !BrowserUtility.isBrowserPreIE9();
@@ -525,11 +434,21 @@ public class ResourceDetailView extends
viewFactory = (!visible) ? null : new ViewFactory() {
@Override
public Canvas createView() {
- if(null == metricsResourceView || resource.getId() != lastSelectedResourceId){
- metricsResourceView = new MetricsResourceView(resource);
- addViewRenderedListener(metricsResourceView);
+ // metricsResourceView contains state of opened graphs (unlike other stateless views)
+ //so we don't need to preserve that state here
+ boolean isNewView = null == metricsResourceView;
+ boolean hasResourceChanged = resourceComposite.getResource().getId() != lastSelectedResourceId;
+ if (isNewView || hasResourceChanged) {
+ if(null != metricsExpandedRowsMomento){
+ metricsExpandedRowsMomento.clear();
+ }
}
- return metricsResourceView;
+ metricsResourceView = new MetricsResourceView(resourceComposite.getResource(), metricsExpandedRowsMomento);
+
+ // this listener handles the subtab navigation
+ addViewRenderedListener(metricsResourceView);
+
+ return metricsResourceView;
}
};
updateSubTab(this.monitoringTab, this.monitorMetrics, visible, visibleToIE8, viewFactory);
@@ -695,8 +614,8 @@ public class ResourceDetailView extends
//noinspection ThrowableInstanceNeverThrown
onFailure(new Exception("Resource with id [" + resourceId + "] does not exist."));
} else {
- final ResourceComposite resourceComposite = result.get(0);
- loadResourceType(resourceComposite, viewPath);
+ resourceComposite = result.get(0);
+ loadResourceType(viewPath);
// add this resouce to the user's recently visited list
UserSessionManager.getUserPreferences().addRecentResource(resourceId,
@@ -718,10 +637,9 @@ public class ResourceDetailView extends
});
}
- private void loadResourceType(final ResourceComposite resourceComposite, final ViewPath viewPath) {
- final Resource resource = resourceComposite.getResource();
+ private void loadResourceType(final ViewPath viewPath) {
ResourceTypeRepository.Cache.getInstance().getResourceTypes(
- resource.getResourceType().getId(),
+ resourceComposite.getResource().getResourceType().getId(),
EnumSet.of(ResourceTypeRepository.MetadataType.children, ResourceTypeRepository.MetadataType.content,
ResourceTypeRepository.MetadataType.operations, ResourceTypeRepository.MetadataType.measurements,
ResourceTypeRepository.MetadataType.events,
@@ -743,14 +661,93 @@ public class ResourceDetailView extends
});
}
- private static boolean hasMetricsOfType(ResourceComposite resourceComposite, DataType dataType) {
- ResourceType type = resourceComposite.getResource().getResourceType();
- Set<MeasurementDefinition> metricDefs = type.getMetricDefinitions();
- for (MeasurementDefinition metricDef : metricDefs) {
- if (dataType == null || metricDef.getDataType() == dataType) {
- return true;
+ public static class Tab {
+ public static class Summary {
+ public static final String NAME = "Summary";
+
+ public static class SubTab {
+ public static final String ACTIVITY = "Activity";
+ public static final String TIMELINE = "Timeline";
+ }
+ }
+
+ public static class Inventory {
+ public static final String NAME = "Inventory";
+
+ public static class SubTab {
+ public static final String CHILDREN = "Children";
+ public static final String CHILD_HISTORY = "ChildHistory";
+ public static final String CONNECTION_SETTINGS = "ConnectionSettings";
+ public static final String CONNECTION_SETTINGS_HISTORY = PluginConfigurationHistoryListView.VIEW_ID
+ .getName();
+ public static final String GROUPS = "Groups";
+ public static final String AGENT = "Agent";
+ }
+ }
+
+ public static class Alerts {
+ public static final String NAME = "Alerts";
+
+ public static class SubTab {
+ public static final String HISTORY = "History";
+ public static final String DEFINITIONS = "Definitions";
+ }
+ }
+
+ public static class Monitoring {
+ public static final String NAME = "Monitoring";
+
+ public static class SubTab {
+ public static final String METRICS = "Metrics";
+ public static final String TRAITS = "Traits";
+ public static final String SCHEDULES = "Schedules";
+ public static final String CALL_TIME = "CallTime";
+ }
+ }
+
+ public static class Events {
+ public static final String NAME = "Events";
+
+ public static class SubTab {
+ public static final String HISTORY = "History";
+ }
+ }
+
+ public static class Operations {
+ public static final String NAME = "Operations";
+
+ public static class SubTab {
+ public static final String SCHEDULES = "Schedules";
+ public static final String HISTORY = "History";
+ }
+ }
+
+ public static class Configuration {
+ public static final String NAME = "Configuration";
+
+ public static class SubTab {
+ public static final String CURRENT = "Current";
+ public static final String HISTORY = "History";
+ }
+ }
+
+ public static class Drift {
+ public static final String NAME = "Drift";
+
+ public static class SubTab {
+ public static final String DEFINITIONS = "Definitions";
+ }
+ }
+
+ public static class Content {
+ public static final String NAME = "Content";
+
+ public static class SubTab {
+ public static final String DEPLOYED = "Deployed";
+ public static final String NEW = "New";
+ public static final String SUBSCRIPTIONS = "Subscriptions";
+ public static final String HISTORY = "History";
}
}
- return false;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsResourceView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsResourceView.java
index c4b90a1..7e20007 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsResourceView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsResourceView.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.table;
import java.util.List;
+import java.util.Set;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -56,13 +57,16 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
private final Resource resource;
private EnhancedHLayout expandCollapseHLayout;
+ private MetricsTableView metricsTableView;
+ private Set<Integer> expandedRows;
- public MetricsResourceView(Resource resource) {
+ public MetricsResourceView(Resource resource, Set<Integer> expandedRows) {
super();
setOverflow(Overflow.AUTO);
setWidth100();
setHeight100();
this.resource = resource;
+ this.expandedRows = expandedRows;
}
@Override
@@ -72,7 +76,7 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
final ResourceMetricAvailabilityView availabilityDetails = new ResourceMetricAvailabilityView(resource);
availabilityDetails.hide();
- final MetricsTableView metricsTableView = new MetricsTableView(resource, this);
+ metricsTableView = new MetricsTableView(resource, this, expandedRows);
metricsTableView.setHeight100();
availabilityGraph = new AvailabilityD3GraphView<AvailabilityOverUnderGraphType>(
@@ -99,7 +103,7 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
availabilityDetails.show();
}
- refreshGraphs();
+ drawGraphs();
}
});
expandCollapseHLayout.addMember(expandCollapseArrow);
@@ -116,7 +120,10 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
public void refreshData() {
Log.debug("MetricResourceView.refreshData() for: " + resource.getName() + " id: " + resource.getId());
+ addAvailabilityGraph();
+ }
+ private void addAvailabilityGraph() {
expandCollapseHLayout.removeMember(availabilityGraph);
availabilityGraph.destroy();
@@ -129,15 +136,6 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
buttonBarDateTimeRangeEditor.getEndTime(), null);
}
- public void refreshGraphs() {
- new Timer() {
- @Override
- public void run() {
- availabilityGraph.drawJsniChart();
- BrowserUtility.graphSparkLines();
- }
- }.schedule(150);
- }
@Override
protected void queryAvailability(final EntityContext context, Long startTime, Long endTime, CountDownLatch notUsed) {
@@ -146,32 +144,42 @@ public class MetricsResourceView extends AbstractD3GraphListView implements
// now return the availability
GWTServiceLookup.getAvailabilityService().getAvailabilitiesForResource(context.getResourceId(), startTime,
- endTime, new AsyncCallback<List<Availability>>() {
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
- }
+ endTime, new AsyncCallback<List<Availability>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_resource_monitor_availability_loadFailed(), caught);
+ }
- @Override
- public void onSuccess(List<Availability> availList) {
- Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - timerStart)
+ @Override
+ public void onSuccess(List<Availability> availList) {
+ Log.debug("\nSuccessfully queried availability in: " + (System.currentTimeMillis() - timerStart)
+ " ms.");
- availabilityGraph.setAvailabilityList(availList);
- new Timer() {
- @Override
- public void run() {
- availabilityGraph.drawJsniChart();
-
- }
- }.schedule(150);
- }
- });
+ availabilityGraph.setAvailabilityList(availList);
+ new Timer() {
+ @Override
+ public void run() {
+ availabilityGraph.drawJsniChart();
+
+ }
+ }.schedule(150);
+ }
+ });
+ }
+
+ private void drawGraphs() {
+ new Timer() {
+ @Override
+ public void run() {
+ availabilityGraph.drawJsniChart();
+ BrowserUtility.graphSparkLines();
+ }
+ }.schedule(150);
}
@Override
public void onViewRendered() {
// refresh the graphs on subtab nav because we are a cached view not new
- refreshGraphs();
+ drawGraphs();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableView.java
index 9fc2949..436bdd9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/table/MetricsTableView.java
@@ -70,22 +70,25 @@ import org.rhq.enterprise.gui.coregui.client.util.preferences.MeasurementUserPre
public class MetricsTableView extends Table<MetricsViewDataSource> implements Refreshable {
private final Resource resource;
- private boolean rendered = false;
private final AbstractD3GraphListView abstractD3GraphListView;
-
private final MeasurementUserPreferences measurementUserPrefs;
private final AddToDashboardComponent addToDashboardComponent;
+ Set<Integer> expandedRows;
+ private boolean rendered = false;
private MetricsTableListGrid metricsTableListGrid;
- Set<Integer> expandedRows = new HashSet<Integer>();
-
- public MetricsTableView(Resource resource, AbstractD3GraphListView abstractD3GraphListView) {
+ public MetricsTableView(Resource resource, AbstractD3GraphListView abstractD3GraphListView, Set<Integer> expandedRows) {
super();
this.resource = resource;
this.abstractD3GraphListView = abstractD3GraphListView;
measurementUserPrefs = new MeasurementUserPreferences(UserSessionManager.getUserPreferences());
setDataSource(new MetricsViewDataSource(resource));
addToDashboardComponent = new AddToDashboardComponent(resource);
+ if(null == expandedRows){
+ this.expandedRows = new HashSet<Integer>();
+ }else {
+ this.expandedRows = expandedRows;
+ }
}
/**
@@ -105,11 +108,10 @@ public class MetricsTableView extends Table<MetricsViewDataSource> implements Re
ArrayList<ListGridField> fields = getDataSource().getListGridFields();
setListGridFields(fields.toArray(new ListGridField[0]));
- if(!rendered){
+ if (!rendered) {
addTableAction(MSG.view_measureTable_getLive(), new TableAction() {
@Override
public boolean isEnabled(ListGridRecord[] selection) {
- //return selection != null && selection.length != 0;
return true;
}
@@ -135,7 +137,6 @@ public class MetricsTableView extends Table<MetricsViewDataSource> implements Re
}
}
-
@Override
/**
* Redraw Graphs in this context means to refresh the table and redraw open graphs.
@@ -152,13 +153,12 @@ public class MetricsTableView extends Table<MetricsViewDataSource> implements Re
}
-
public class MetricsTableListGrid extends ListGrid {
private static final int TREEVIEW_DETAIL_CHART_HEIGHT = 205;
private static final int NUM_METRIC_POINTS = 60;
- private Resource resource;
final MetricsTableView metricsTableView;
+ private Resource resource;
public MetricsTableListGrid(final MetricsTableView metricsTableView, final Resource resource) {
super();
@@ -198,28 +198,34 @@ public class MetricsTableView extends Table<MetricsViewDataSource> implements Re
refreshData();
}
});
+
addDataArrivedHandler(new DataArrivedHandler() {
@Override
public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
- int startRow = dataArrivedEvent.getStartRow();
- int endRow = dataArrivedEvent.getEndRow();
-
- for (int i = startRow; i < endRow; i++) {
- ListGridRecord listGridRecord = getRecord(i);
- if (null != listGridRecord) {
- int metricDefinitionId = listGridRecord
- .getAttributeAsInt(MetricsViewDataSource.FIELD_METRIC_DEF_ID);
- if (null != metricsTableView && metricsTableView.expandedRows.contains(metricDefinitionId)) {
- expandRecord(listGridRecord);
- }
- }
- }
+ expandOpenedRows(dataArrivedEvent.getStartRow(), dataArrivedEvent.getEndRow(), metricsTableView);
}
});
}
+ private void expandOpenedRows(int startRow, int endRow, MetricsTableView metricsTableView) {
+
+ for (int i = startRow; i < endRow; i++) {
+ ListGridRecord listGridRecord = getRecord(i);
+ if (null != listGridRecord) {
+ int metricDefinitionId = listGridRecord
+ .getAttributeAsInt(MetricsViewDataSource.FIELD_METRIC_DEF_ID);
+ if (null != metricsTableView && null != metricsTableView.expandedRows && metricsTableView.expandedRows.contains(metricDefinitionId)) {
+ expandRecord(listGridRecord);
+ }
+ }
+ }
+ }
+
@Override
+ /**
+ * If you expand a grid row then create a graph.
+ */
protected Canvas getExpansionComponent(final ListGridRecord record) {
final Integer definitionId = record.getAttributeAsInt(MetricsViewDataSource.FIELD_METRIC_DEF_ID);
final Integer resourceId = record.getAttributeAsInt(MetricsViewDataSource.FIELD_RESOURCE_ID);
@@ -270,7 +276,6 @@ public class MetricsTableView extends Table<MetricsViewDataSource> implements Re
public void run() {
graphView.drawJsniChart();
BrowserUtility.graphSparkLines();
-
}
}.schedule(150);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/preferences/MeasurementUserPreferences.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/preferences/MeasurementUserPreferences.java
index 75a5429..50d5400 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/preferences/MeasurementUserPreferences.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/preferences/MeasurementUserPreferences.java
@@ -45,8 +45,8 @@ public class MeasurementUserPreferences {
public static final String PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME = "Default";
public static final String DEFAULT_VALUE_RANGE_RO = Boolean.FALSE.toString();
- public static final Integer DEFAULT_VALUE_RANGE_LASTN = Integer.valueOf(8);
- public static final Integer DEFAULT_VALUE_RANGE_UNIT = Integer.valueOf(3);
+ public static final Integer DEFAULT_VALUE_RANGE_LASTN = 8;
+ public static final Integer DEFAULT_VALUE_RANGE_UNIT = 3;
private UserPreferences userPrefs;
@@ -79,7 +79,6 @@ public class MeasurementUserPreferences {
if (rangeString != null && rangeString.trim().length() > 0) {
if (rangeString.contains(",")) { // legacy support: old prefs used to use commas
rangeString = rangeString.replace(",", UserPreferences.PREF_LIST_DELIM);
- //userPrefs.setPreference(PREF_METRIC_RANGE, rangeString); // TODO set only if we don't support JSF anymore
}
String[] beginEnd = rangeString.split(UserPreferences.PREF_LIST_DELIM_REGEX);
prefs.begin = Long.parseLong(beginEnd[0]);
@@ -112,50 +111,23 @@ public class MeasurementUserPreferences {
if (prefs.explicitBeginEnd) {
// persist advanced mode
userPrefs.setPreference(PREF_METRIC_RANGE, Arrays.asList(prefs.begin, prefs.end), allowRefresh);
- //unsetPreference(PREF_METRIC_RANGE_LASTN);
- //unsetPreference(PREF_METRIC_RANGE_UNIT);
} else {
userPrefs.setPreference(PREF_METRIC_RANGE_LASTN, String.valueOf(prefs.lastN), allowRefresh);
userPrefs.setPreference(PREF_METRIC_RANGE_UNIT, String.valueOf(prefs.unit), allowRefresh);
- //unsetPreference(PREF_METRIC_RANGE);
}
}
- /*
- * I believe these are now no longer used - these were probably for the old struts pages
- *
- public Integer getMetricThresholdPreference() throws IllegalArgumentException {
- return new Integer(userPrefs.getPreference(PREF_METRIC_THRESHOLD));
- }
- public void setMetricThresholdPreference(Integer value) throws IllegalArgumentException {
- userPrefs.setPreference(PREF_METRIC_THRESHOLD, String.valueOf(value));
- }
- */
public MetricViewsPreferences getMetricViews(String key) {
MetricViewsPreferences prefs = new MetricViewsPreferences();
- //TODO: jmarques - externalize default view name
- // instead of PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME
- // lookup PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT from the bundle
String value = userPrefs.getPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + key,
PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME);
prefs.views = StringUtility.explode(value, UserPreferences.PREF_LIST_DELIM);
return prefs;
}
- // public void setMetricViews(MetricViewsPreferences prefs, String key) {
- // StringBuilder builder = new StringBuilder();
- // int index = 0;
- // for (String viewName : prefs.views) {
- // if (index != 0) {
- // builder.append(UserPreferences.PREF_LIST_DELIM);
- // }
- // builder.append(viewName);
- // index++;
- // }
- // userPrefs.setPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + key, builder.toString());
- // }
+
public String getSelectedView(String key) {
String value = userPrefs.getPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + "selected." + key,
@@ -163,49 +135,4 @@ public class MeasurementUserPreferences {
return value;
}
- // public void setSelectedView(String key, String viewName) {
- // userPrefs.setPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + "selected." + key, viewName);
- // }
- //
- // public static class MetricViewData {
- // public List<String> charts;
- // }
-
- // public MetricViewData getMetricViewData(String context, String viewName) {
- // //TODO: jmarques - externalize default view name
- // // instead of PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME
- // // lookup PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT from the bundle
- // if (viewName == null || "".equals(viewName)) {
- // viewName = PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME;
- // }
- // MetricViewData chartPreferences = new MetricViewData();
- // // important to let IllegalArgumentException bubble out of here, so the caller can persist the default set
- // String data = userPrefs.getPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + context + "." + viewName);
- // chartPreferences.charts = StringUtility.explode(data, UserPreferences.PREF_LIST_DELIM);
- // return chartPreferences;
- // }
- //
- // public void setMetricViewData(String context, String viewName, MetricViewData prefs) {
- // //TODO: jmarques - externalize default view name
- // // instead of PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME
- // // lookup PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT from the bundle
- // if (viewName == null || "".equals(viewName)) {
- // viewName = PREF_MEASUREMENT_INDICATOR_VIEW_DEFAULT_NAME;
- // }
- // StringBuilder builder = new StringBuilder();
- // int index = 0;
- // for (String chart : prefs.charts) {
- // if (index != 0) {
- // builder.append(UserPreferences.PREF_LIST_DELIM);
- // }
- // builder.append(chart);
- // index++;
- // }
- // userPrefs.setPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + context + "." + viewName, builder.toString());
- // }
- //
- // public void deleteMetricViewData(String context, String viewName) {
- // userPrefs.unsetPreference(PREF_MEASUREMENT_INDICATOR_VIEW_PREFIX + context + "." + viewName);
- // }
-
}