From eacc7ec4b012731c9543a27a3d17b0b704ac38d3 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Thu, 9 Jan 2014 17:29:58 +0600 Subject: [PATCH] Pie Chart: better handle when measures for selected metrics are not available --- .../resources/org/sonar/l10n/core.properties | 2 ++ .../measure_filter_bubble_chart.html.erb | 3 ++- .../measure_filter_histogram.html.erb | 3 ++- .../measure_filter_pie_chart.html.erb | 3 ++- .../javascripts/widgets/bubble-chart.js | 14 ++++++++++++-- .../webapp/javascripts/widgets/histogram.js | 16 +++++++++++----- .../webapp/javascripts/widgets/pie-chart.js | 19 +++++++++++++------ 7 files changed, 44 insertions(+), 16 deletions(-) diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties index 572f3a64999..a2ccb419805 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties @@ -1107,6 +1107,8 @@ widget.bubble_chart.property.sizeMetric.name=Size Metric widget.bubble_chart.property.xLogarithmic.name=X Logarithmic Scale widget.bubble_chart.property.yLogarithmic.name=Y Logarithmic Scale +widget.measure_filter.no_main_metric=The widget can not be rendered because no measure is available for the main metric. + widget.measure_filter_pie_chart.name=Measure Filter as Pie Chart widget.measure_filter_pie_chart.description=Displays the result of a pre-configured measure filter as a pie chart. widget.measure_filter_pie_chart.property.chartTitle.name=Chart Title diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_bubble_chart.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_bubble_chart.html.erb index 275b26e04e8..af427c247c6 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_bubble_chart.html.erb +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_bubble_chart.html.erb @@ -51,7 +51,8 @@ baseUrl: baseUrl + '/dashboard/index/', xLog: <%= xLog -%>, yLog: <%= yLog -%>, - noData: '<%= message('no_data') -%>' + noData: '<%= message('no_data') -%>', + noMainMetric: '<%= message('widget.measure_filter.no_main_metric') -%>' }) .render('#<%= containerId -%>'); diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_histogram.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_histogram.html.erb index 5f768d5a045..6df5c73e4ac 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_histogram.html.erb +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_histogram.html.erb @@ -45,7 +45,8 @@ baseUrl: baseUrl + '/dashboard/index/', displayWorstBestValues: <%= displayWorstBestValues -%>, maxItemsReachedMessage: '<%= message("widget.measure_filter_histogram.max_items_reached", :params => [maxItems]) -%>', - noData: '<%= message('no_data') -%>' + noData: '<%= message('no_data') -%>', + noMainMetric: '<%= message('widget.measure_filter.no_main_metric') -%>' }) .render('#<%= containerId -%>'); diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_pie_chart.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_pie_chart.html.erb index 0ee7830a495..d7d2591b1ca 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_pie_chart.html.erb +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/measures/measure_filter_pie_chart.html.erb @@ -47,7 +47,8 @@ .height(<%= chartHeight %>) .options({ baseUrl: baseUrl + '/dashboard/index/', - noData: '<%= message('no_data') -%>' + noData: '<%= message('no_data') -%>', + noMainMetric: '<%= message('widget.measure_filter.no_main_metric') -%>' }) .render('#<%= containerId -%>'); diff --git a/sonar-server/src/main/webapp/javascripts/widgets/bubble-chart.js b/sonar-server/src/main/webapp/javascripts/widgets/bubble-chart.js index a913fb3c6e4..aec84168d41 100644 --- a/sonar-server/src/main/webapp/javascripts/widgets/bubble-chart.js +++ b/sonar-server/src/main/webapp/javascripts/widgets/bubble-chart.js @@ -70,6 +70,16 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; container = d3.select(container); + var validData = this.components().reduce(function(p, c) { + return p && !!c.measures[widget.metricsPriority()[0]] && !!c.measures[widget.metricsPriority()[1]]; + }, true); + + if (!validData) { + container.text(this.options().noMainMetric); + return; + } + + this.width(container.property('offsetWidth')); this.svg = container.append('svg') @@ -105,7 +115,7 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; this.sizeMetric = this.metricsPriority()[2]; this.getSizeMetric = function(d) { - return d.measures[widget.sizeMetric].val; + return !!d.measures[widget.sizeMetric] ? d.measures[widget.sizeMetric].val : 0; }; @@ -193,7 +203,7 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; var metricLines = [ { metric: widget.metrics()[widget.xMetric].name, value: d.measures[widget.xMetric].fval }, { metric: widget.metrics()[widget.yMetric].name, value: d.measures[widget.yMetric].fval }, - { metric: widget.metrics()[widget.sizeMetric].name, value: d.measures[widget.sizeMetric].fval } + { metric: widget.metrics()[widget.sizeMetric].name, value: (!!d.measures[widget.sizeMetric] ? d.measures[widget.sizeMetric].fval : '–') } ]; var lastX = 0; diff --git a/sonar-server/src/main/webapp/javascripts/widgets/histogram.js b/sonar-server/src/main/webapp/javascripts/widgets/histogram.js index ca8963ee478..fbb70064ccd 100644 --- a/sonar-server/src/main/webapp/javascripts/widgets/histogram.js +++ b/sonar-server/src/main/webapp/javascripts/widgets/histogram.js @@ -64,6 +64,16 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; container = d3.select(container); + var validData = this.components().reduce(function(p, c) { + return p && !!c.measures[widget.metricsPriority()[0]] + }, true); + + if (!validData) { + container.text(this.options().noMainMetric); + return; + } + + this.width(container.property('offsetWidth')); this.svg = container.append('svg') @@ -80,11 +90,7 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; // Configure metrics this.mainMetric = this.metricsPriority()[0]; this.getMainMetric = function(d) { - if (d.measures[widget.mainMetric]) { - return d.measures[widget.mainMetric].val; - } else { - return 0; - } + return d.measures[widget.mainMetric].val; }; diff --git a/sonar-server/src/main/webapp/javascripts/widgets/pie-chart.js b/sonar-server/src/main/webapp/javascripts/widgets/pie-chart.js index 993a6b05db4..29f718d1857 100644 --- a/sonar-server/src/main/webapp/javascripts/widgets/pie-chart.js +++ b/sonar-server/src/main/webapp/javascripts/widgets/pie-chart.js @@ -69,6 +69,17 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; container = d3.select(container); + + var validData = this.components().reduce(function(p, c) { + return p && !!c.measures[widget.metricsPriority()[0]] + }, true); + + if (!validData) { + container.text(this.options().noMainMetric); + return; + } + + this.width(container.property('offsetWidth')); this.svg = container.append('svg') @@ -85,11 +96,7 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; // Configure metrics this.mainMetric = this.metricsPriority()[0]; this.getMainMetric = function(d) { - if (d.measures[widget.mainMetric]) { - return d.measures[widget.mainMetric].val; - } else { - return 0; - } + return d.measures[widget.mainMetric].val; }; @@ -248,7 +255,7 @@ window.SonarWidgets = window.SonarWidgets == null ? {} : window.SonarWidgets; var metrics = widget.metricsPriority().map(function(m) { return { name: widget.metrics()[m].name, - value: d.measures[m].fval + value: (!!d.measures[m] ? d.measures[m].fval : '–') }; }); metrics.unshift({ name: d.name }); -- 2.39.5