]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4927 Merge new QG widget with old one, update layout
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 28 Apr 2014 09:30:13 +0000 (11:30 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 28 Apr 2014 12:14:55 +0000 (14:14 +0200)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/AlertsWidget.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/QualityGateWidget.java [deleted file]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/alerts.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/quality_gate.html.erb [deleted file]
sonar-core/src/main/resources/org/sonar/l10n/core.properties
sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java

index 6268c9b7109188debdea9c5c9647604cd526fa11..6a7499e2332cd2eabb2b098b446e64391e419c5e 100644 (file)
@@ -213,7 +213,6 @@ public final class CorePlugin extends SonarPlugin {
 
       // widgets
       AlertsWidget.class,
-      QualityGateWidget.class,
       CoverageWidget.class,
       ItCoverageWidget.class,
       DescriptionWidget.class,
index 738d6153fb4e32aafb745f5b317d2c7f11c1312d..c794e89857362cbea2d3d2d0049feca24c6fcf0a 100644 (file)
  */
 package org.sonar.plugins.core.widgets;
 
-import org.sonar.api.web.WidgetLayout;
-import org.sonar.api.web.WidgetLayoutType;
+import org.sonar.api.web.*;
 
+@WidgetProperties({
+  @WidgetProperty(key = "show_ok", type = WidgetPropertyType.BOOLEAN, defaultValue = "false"),
+})
 @WidgetLayout(WidgetLayoutType.NONE)
 public class AlertsWidget extends CoreWidget {
 
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/QualityGateWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/QualityGateWidget.java
deleted file mode 100644 (file)
index dd7e1d0..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.plugins.core.widgets;
-
-import org.sonar.api.web.*;
-
-@WidgetProperties({
-  @WidgetProperty(key = "show_ok", type = WidgetPropertyType.BOOLEAN, defaultValue = "false"),
-})
-@WidgetLayout(WidgetLayoutType.NONE)
-public class QualityGateWidget extends CoreWidget {
-
-  public QualityGateWidget() {
-    super("quality_gate", "Quality Gate Details", "/org/sonar/plugins/core/widgets/quality_gate.html.erb");
-  }
-}
index 1f1f243340a52f8ef4a6439c428fbb4559781835..0b1c505466f0c59257db034997c7b12915e32a0a 100644 (file)
@@ -1,14 +1,73 @@
+<% m=measure(Metric::QUALITY_GATE_DETAILS)
+   if m && !m.data.blank?
+     details = JSON.parse m.data
+     m.alert_status = details['level']
+     conditions = details['conditions']
+     alert_metric = metric(Metric::ALERT_STATUS)
+
+     warn_message = message('measure_filter.criteria.alert.warn')
+     error_message = message('measure_filter.criteria.alert.error')
+
+     css_class = "color_#{m.alert_status}"
+     if m.alert_status==Metric::TYPE_LEVEL_OK
+       label = "#{message('widget.alerts.no_alert')}."
+     elsif m.alert_status==Metric::TYPE_LEVEL_WARN
+       label = "#{message('widget.alerts.warnings')}"
+     else
+       label = "#{message('widget.alerts.errors')}"
+     end
+-%><div class="widget <%= css_class -%>" style="color: black !important" id="quality_gate_widget_<%= widget.id -%>">
+  <div><%= format_measure(measure(Metric::ALERT_STATUS)) -%> <%= label -%></div>
+  <% if conditions.any? {|condition| condition['level'] != 'OK'} || widget_properties['show_ok'] && !conditions.empty? -%>
+    <% details['conditions'].sort_by {|condition| [ -condition['level'].length, metric(condition['metric']).short_name] }.each do |condition|
+
+      level = condition['level']
+      condition_metric = metric(condition['metric'])
+      operator = message("quality_gates.operator.#{condition['op']}.short")
+      period = condition['period']
+      warning_value = condition['warning']
+      error_value = condition['error']
+      actual_value = condition['actual']
+
+      detail_measure = ProjectMeasure.new :metric => alert_metric, :alert_status => level
+
+      drilldown_url = period.blank? ? url_for_drilldown(condition_metric) : url_for_drilldown(condition_metric, :period => period)
+
+      actual_measure = ProjectMeasure.new :metric => condition_metric, :value => actual_value, :alert_status => level
+      warning_measure = ProjectMeasure.new :metric => condition_metric, :value => warning_value
+      error_measure = ProjectMeasure.new :metric => condition_metric, :value => error_value
+
+
+      unless level == 'OK' && !widget_properties['show_ok']
+      -%>
+      <div class="dashbox" style="margin: 10px">
+        <p class="title"><%= condition_metric.short_name -%></p>
+        <span class="big"><%= format_measure(actual_measure, :url => drilldown_url) -%></span>
+        <% if level == 'WARN' -%><%= operator -%> <%= format_measure(warning_measure) -%><% end -%>
+        <% if level == 'ERROR' -%><%= operator -%> <%= format_measure(error_measure) -%><% end -%>
+        <% if level == 'OK' -%>
+          <% unless warning_value.blank? -%><%= warn_message -%> <%= operator -%> <%= format_measure(warning_measure) -%> <%= '|' unless error_value.blank? -%><% end -%>
+          <% unless error_value.blank? -%><%= error_message -%> <%= operator -%> <%= format_measure(error_measure) -%><% end -%>
+        <% end -%>
+        <p><%= period_label(@snapshot, period) unless period.blank? -%></p>
+      </div>
+    <% end
+     end
+   end -%>
+</div>
+<% else -%>
 <% m=measure(Metric::ALERT_STATUS)
    if m && !m.alert_status.blank?
-        css_class = "widget color_#{m.alert_status}"
-        if m.alert_status==Metric::TYPE_LEVEL_OK
-          label = "<b>#{message('widget.alerts.no_alert')}</b>."
-        elsif m.alert_status==Metric::TYPE_LEVEL_WARN
-     label = "<b>#{message('widget.alerts.warnings')}</b>#{h(m.alert_text)}."
-        else
-          label = "<b>#{message('widget.alerts.errors')}</b>#{h(m.alert_text)}."
-        end
-%><div class="<%= css_class -%>" id="alerts_widget">
+     css_class = "widget color_#{m.alert_status}"
+     if m.alert_status==Metric::TYPE_LEVEL_OK
+       label = "<b>#{message('widget.alerts.no_alert')}</b>."
+     elsif m.alert_status==Metric::TYPE_LEVEL_WARN
+       label = "<b>#{message('widget.alerts.warnings')}</b>#{h(m.alert_text)}."
+     else
+       label = "<b>#{message('widget.alerts.errors')}</b>#{h(m.alert_text)}."
+     end
+-%><div class="<%= css_class -%>" id="alerts_widget">
   <div><%= format_measure(m) -%> <%= label -%></div>
 </div>
-<% end %>
+<% end
+end -%>
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/quality_gate.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/quality_gate.html.erb
deleted file mode 100644 (file)
index af8143e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<% m=measure(Metric::QUALITY_GATE_DETAILS)
-   if m && !m.measure_data.blank?
-
-     details = JSON.parse m.measure_data.data
-     m.alert_status = details['level']
-
-     warn_message = message('measure_filter.criteria.alert.warn')
-     error_message = message('measure_filter.criteria.alert.error')
-
-     css_class = "color_#{m.alert_status}"
-     if m.alert_status==Metric::TYPE_LEVEL_OK
-       label = "<b>#{message('widget.alerts.no_alert')}.</b>"
-     elsif m.alert_status==Metric::TYPE_LEVEL_WARN
-       label = "<b>#{message('widget.alerts.warnings')}</b>"
-     else
-       label = "<b>#{message('widget.alerts.errors')}</b>"
-     end
--%><div class="widget <%= css_class -%>" id="quality_gate_widget_<%= widget.id -%>">
-  <div><%= format_measure(m) -%> <%= label -%></div>
-  <table class="data" style="color: black; margin-top: 10px">
-    <thead>
-      <tr></tr>
-    </thead>
-    <tbody>
-    <% details['conditions'].sort_by {|condition| [ -condition['level'].length, metric(condition['metric']).short_name] }.each do |condition|
-
-      level = condition['level']
-      condition_metric = metric(condition['metric'])
-      operator = message("quality_gates.operator.#{condition['op']}.short")
-      period = condition['period']
-      warning_value = condition['warning']
-      error_value = condition['error']
-      actual_value = condition['actual']
-
-      detail_measure = ProjectMeasure.new :metric => m.metric, :alert_status => level
-
-      drilldown_url = period.blank? ? url_for_drilldown(condition_metric) : url_for_drilldown(condition_metric, :period => period)
-
-      actual_measure = ProjectMeasure.new :metric => condition_metric, :value => actual_value
-      warning_measure = ProjectMeasure.new :metric => condition_metric, :value => warning_value
-      error_measure = ProjectMeasure.new :metric => condition_metric, :value => error_value
-
-
-      unless level == 'OK' && !widget_properties['show_ok']
-      -%>
-      <tr>
-        <td><%= format_measure(detail_measure) -%></td>
-        <td><%= link_to "#{condition_metric.short_name} #{period_label(@snapshot, period) unless period.blank?}", drilldown_url, {:class => 'nolink'} -%></td>
-        <td align="right"><%= link_to format_measure(actual_measure), drilldown_url, {:class => 'nolink'} -%></td>
-        <td>
-        <% if level == 'WARN' -%><%= operator -%> <%= format_measure(warning_measure) -%><% end -%>
-        <% if level == 'ERROR' -%><%= operator -%> <%= format_measure(error_measure) -%><% end -%>
-        <% if level == 'OK' -%>
-          <% unless warning_value.blank? -%><%= warn_message -%> <%= operator -%> <%= format_measure(warning_measure) -%> <%= '|' unless error_value.blank? -%><% end %>
-          <% unless error_value.blank? -%><%= error_message -%> <%= operator -%> <%= format_measure(error_measure) -%><% end %>
-        <% end -%>
-      </tr>
-    <%  end
-      end -%>
-    </tbody>
-  </table>
-</div>
-<% end %>
index 3fa124b3aaed9ab8a55b79cade96737919721dec..9ea0b618707d6c1c72564087881eeade6a1bfad6 100644 (file)
@@ -974,15 +974,12 @@ widgets.more=More
 widget.error_occurred_please_read_logs=An error occurred while trying to display the widget "{0}". Please contact the administrator.
 widget.unsupported_browser_warning=Your browser is out of date and does not support this widget.
 
-widget.alerts.name=Quality Gate Summary
-widget.alerts.description=Displays a summary of the project's quality gate status.
+widget.alerts.name=Quality Gate
+widget.alerts.description=Displays the project's quality gate status.
 widget.alerts.no_alert=The project has passed the quality gate
 widget.alerts.warnings=The project has warnings on the following quality gate conditions:\u00a0
 widget.alerts.errors=The project failed the quality gate on the following conditions:\u00a0
-
-widget.quality_gate.name=Quality Gate Details
-widget.quality_gate.description=Displays a detailed view of the project's quality gate status.
-widget.quality_gate.property.show_ok.name=Show passed conditions
+widget.alerts.property.show_ok.name=Show passed conditions
 
 widget.code_coverage.name=Unit Tests Coverage
 widget.code_coverage.description=Reports on units tests and code coverage by unit tests.
index f1c7f33a454eeedfbbef1866dc74dfb1f5f1ef1b..cfdecedd85648d2150c7232070eaeae9d396159e 100644 (file)
@@ -2201,11 +2201,17 @@ public final class CoreMetrics {
     .setDomain(DOMAIN_GENERAL)
     .create();
 
+  /**
+   * @since 4.4
+   */
   public static final String QUALITY_GATE_DETAILS_KEY = "quality_gate_details";
-  public static final Metric QUALITY_GATE_DETAILS = new Metric.Builder(QUALITY_GATE_DETAILS_KEY, "Quality Gate Details", Metric.ValueType.LEVEL)
+  /**
+   * The project detailed status with regard to its quality gate.
+   * Storing the global quality gate status, along with all evaluated conditions, into a JSON object.
+   * @since 4.4
+   */
+  public static final Metric QUALITY_GATE_DETAILS = new Metric.Builder(QUALITY_GATE_DETAILS_KEY, "Quality Gate Details", Metric.ValueType.DATA)
     .setDescription("The project detailed status with regard to its quality gate.")
-    .setDirection(Metric.DIRECTION_BETTER)
-    .setQualitative(true)
     .setDomain(DOMAIN_GENERAL)
     .create();