]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6392 Drop measure trends 249/head
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 22 Apr 2015 22:00:36 +0000 (00:00 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 23 Apr 2015 17:23:31 +0000 (19:23 +0200)
45 files changed:
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyAnalyser.java [deleted file]
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyDecorator.java [deleted file]
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/complexity.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/coverage.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/custom_measures.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/debt_overview.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/documentation_comments_widget.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/duplications_widget.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/issues/issues.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/it_coverage.html.erb
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/size.html.erb
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyAnalyserTest.java [deleted file]
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyDecoratorTest.java [deleted file]
server/sonar-server/src/main/java/org/sonar/server/component/ws/ResourcesWs.java
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java
server/sonar-server/src/main/resources/org/sonar/server/design/file_design.html.erb
server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistMeasuresStepTest.java
server/sonar-server/src/test/java/org/sonar/server/measure/persistence/MeasureDaoTest.java
server/sonar-server/src/test/resources/org/sonar/server/measure/persistence/MeasureDaoTest/insert-result.xml
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/resources_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/measures_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb
server/sonar-web/src/main/webapp/WEB-INF/app/helpers/components_helper.rb
server/sonar-web/src/main/webapp/WEB-INF/app/helpers/measures_helper.rb
server/sonar-web/src/main/webapp/WEB-INF/app/models/project_measure.rb
server/sonar-ws-client/src/main/java/org/sonar/wsclient/services/Measure.java
server/sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/ResourceUnmarshaller.java
server/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ResourceUnmarshallerTest.java
server/sonar-ws-client/src/test/resources/resources/single-resource-with-trends.json [deleted file]
sonar-batch-protocol/src/main/gen-java/org/sonar/batch/protocol/output/BatchReport.java
sonar-batch-protocol/src/main/protobuf/batch_report.proto
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/DefaultTimeMachine.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PeriodsDefinition.java
sonar-batch/src/main/java/org/sonar/batch/report/MeasuresPublisher.java
sonar-batch/src/main/java/org/sonar/batch/scan/measure/MeasureValueCoder.java
sonar-batch/src/test/java/org/sonar/batch/report/MeasuresPublisherTest.java
sonar-batch/src/test/java/org/sonar/batch/scan/measure/MeasureCacheTest.java
sonar-core/src/main/java/org/sonar/core/measure/db/MeasureDto.java
sonar-core/src/main/resources/org/sonar/core/measure/db/MeasureMapper.xml
sonar-plugin-api/src/main/java/org/sonar/api/batch/DecoratorBarriers.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java
sonar-plugin-api/src/main/java/org/sonar/api/database/model/MeasureModel.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/Measure.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/RuleMeasure.java

index fb064dc3486120df453b9b820bc8f41479b2e4be..4afed1eb7efd8c997e2f4ae1cfe6bb3ecb02a288 100644 (file)
 package org.sonar.plugins.core;
 
 import com.google.common.collect.ImmutableList;
-import org.sonar.api.*;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.Properties;
+import org.sonar.api.Property;
+import org.sonar.api.PropertyType;
+import org.sonar.api.SonarPlugin;
 import org.sonar.core.timemachine.Periods;
 import org.sonar.plugins.core.charts.DistributionAreaChart;
 import org.sonar.plugins.core.charts.DistributionBarChart;
@@ -34,11 +38,56 @@ import org.sonar.plugins.core.measurefilters.MyFavouritesFilter;
 import org.sonar.plugins.core.measurefilters.ProjectFilter;
 import org.sonar.plugins.core.notifications.alerts.NewAlerts;
 import org.sonar.plugins.core.security.ApplyProjectRolesDecorator;
-import org.sonar.plugins.core.sensors.*;
-import org.sonar.plugins.core.timemachine.*;
-import org.sonar.plugins.core.widgets.*;
-import org.sonar.plugins.core.widgets.issues.*;
-import org.sonar.plugins.core.widgets.measures.*;
+import org.sonar.plugins.core.sensors.BranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.CommentDensityDecorator;
+import org.sonar.plugins.core.sensors.CoverageDecorator;
+import org.sonar.plugins.core.sensors.DirectoriesDecorator;
+import org.sonar.plugins.core.sensors.FilesDecorator;
+import org.sonar.plugins.core.sensors.ItBranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.ItCoverageDecorator;
+import org.sonar.plugins.core.sensors.ItLineCoverageDecorator;
+import org.sonar.plugins.core.sensors.LineCoverageDecorator;
+import org.sonar.plugins.core.sensors.ManualMeasureDecorator;
+import org.sonar.plugins.core.sensors.OverallBranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.OverallCoverageDecorator;
+import org.sonar.plugins.core.sensors.OverallLineCoverageDecorator;
+import org.sonar.plugins.core.sensors.UnitTestDecorator;
+import org.sonar.plugins.core.timemachine.NewCoverageAggregator;
+import org.sonar.plugins.core.timemachine.NewCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.NewItCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.NewOverallCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.TimeMachineConfigurationPersister;
+import org.sonar.plugins.core.timemachine.VariationDecorator;
+import org.sonar.plugins.core.widgets.AlertsWidget;
+import org.sonar.plugins.core.widgets.BubbleChartWidget;
+import org.sonar.plugins.core.widgets.ComplexityWidget;
+import org.sonar.plugins.core.widgets.CoverageWidget;
+import org.sonar.plugins.core.widgets.CustomMeasuresWidget;
+import org.sonar.plugins.core.widgets.DebtOverviewWidget;
+import org.sonar.plugins.core.widgets.DescriptionWidget;
+import org.sonar.plugins.core.widgets.DocumentationCommentsWidget;
+import org.sonar.plugins.core.widgets.DuplicationsWidget;
+import org.sonar.plugins.core.widgets.EventsWidget;
+import org.sonar.plugins.core.widgets.HotspotMetricWidget;
+import org.sonar.plugins.core.widgets.ItCoverageWidget;
+import org.sonar.plugins.core.widgets.ProjectFileCloudWidget;
+import org.sonar.plugins.core.widgets.SizeWidget;
+import org.sonar.plugins.core.widgets.TechnicalDebtPyramidWidget;
+import org.sonar.plugins.core.widgets.TimeMachineWidget;
+import org.sonar.plugins.core.widgets.TimelineWidget;
+import org.sonar.plugins.core.widgets.TreemapWidget;
+import org.sonar.plugins.core.widgets.WelcomeWidget;
+import org.sonar.plugins.core.widgets.issues.ActionPlansWidget;
+import org.sonar.plugins.core.widgets.issues.IssueFilterWidget;
+import org.sonar.plugins.core.widgets.issues.IssueTagCloudWidget;
+import org.sonar.plugins.core.widgets.issues.IssuesWidget;
+import org.sonar.plugins.core.widgets.issues.ProjectIssueFilterWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterAsBubbleChartWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterAsCloudWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterAsHistogramWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterAsPieChartWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterAsTreemapWidget;
+import org.sonar.plugins.core.widgets.measures.MeasureFilterListWidget;
 
 import java.util.List;
 
@@ -279,7 +328,6 @@ public final class CorePlugin extends SonarPlugin {
       ManualMeasureDecorator.class,
 
       // time machine
-      TendencyDecorator.class,
       VariationDecorator.class,
       TimeMachineConfigurationPersister.class,
       NewCoverageFileAnalyzer.class,
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyAnalyser.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyAnalyser.java
deleted file mode 100644 (file)
index 07fdef2..0000000
+++ /dev/null
@@ -1,195 +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.timemachine;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.List;
-
-public class TendencyAnalyser {
-
-  public static final Integer TENDENCY_BIG_UP = 2;
-  public static final Integer TENDENCY_UP = 1;
-  public static final Integer TENDENCY_NEUTRAL = 0;
-  public static final Integer TENDENCY_DOWN = -1;
-  public static final Integer TENDENCY_BIG_DOWN = -2;
-
-  public Integer analyseLevel(List<Double> values) {
-    TendencyAnalyser.SlopeData slopeData = analyse(values);
-    if (slopeData != null) {
-      return slopeData.getLevel();
-    }
-    return null;
-  }
-
-  public SlopeData analyse(List<Double> values) {
-    double sumY = 0.0;
-    double sumX = 0.0;
-    double sumYPower2 = 0.0;
-    double sumXY = 0.0;
-    double sumXPower2 = 0.0;
-    int nbrPoints = 0;
-    boolean nullValuesYList = true;
-    int i = 0;
-    for (Double p : values) {
-      if (p != null) {
-        nullValuesYList = false;
-        // SumY calculation
-        sumY += p;
-        // sumYPower2 calculation
-        sumYPower2 += p * p;
-        // sumXY calculation
-        sumXY += p * (i + 1);
-        // SumX calculation
-        sumX += (i + 1);
-        // sumXPower2 calculation
-        sumXPower2 += (i + 1) * (i + 1);
-        // Point number calculation
-        nbrPoints++;
-      }
-      i++;
-    }
-    // no tendency if null values or only 1 value
-    if (nullValuesYList || nbrPoints == 1) {
-      return null;
-    }
-    double n0 = (nbrPoints * sumXY) - (sumX * sumY);
-    double d = (nbrPoints * sumXPower2) - (sumX * sumX);
-    double n1 = (sumY * sumXPower2) - (sumX * sumXY);
-
-    SlopeData result = new SlopeData();
-
-    // yIntercept Calculation the value when X equals zero
-    result.setYIntercept(n1 / d);
-    // Slope Calculation
-    if (Double.doubleToRawLongBits(n0) == 0L && Double.doubleToRawLongBits(d) == 0L) {
-      result.setSlope(0.0);
-    } else {
-      Double slope = n0 / d;
-      if (Double.isNaN(slope) || Double.isInfinite(slope)) {
-        result.setSlope(null);
-      } else {
-        result.setSlope(slope);
-      }
-    }
-    result.setSumXPower2(sumXPower2);
-    result.setSumXY(sumXY);
-    result.setSumYPower2(sumYPower2);
-
-    if (Double.doubleToRawLongBits(sumXPower2) == 0L || Double.doubleToRawLongBits(sumYPower2) == 0L) {
-      result.setCorrelationRate(0.0);
-    } else {
-      result.setCorrelationRate(sumXY / Math.sqrt(sumXPower2 * sumYPower2));
-    }
-
-    return result;
-  }
-
-  static class SlopeData {
-    private double sumXPower2;
-    private double sumYPower2;
-    private double sumXY;
-    // not used today
-    private double yIntercept;
-    private Double slope;
-    private Double correlationRate;
-
-    public double getSumXPower2() {
-      return sumXPower2;
-    }
-
-    public void setSumXPower2(double sumXPower2) {
-      this.sumXPower2 = sumXPower2;
-    }
-
-    public double getSumYPower2() {
-      return sumYPower2;
-    }
-
-    public void setSumYPower2(double sumYPower2) {
-      this.sumYPower2 = sumYPower2;
-    }
-
-    public double getSumXY() {
-      return sumXY;
-    }
-
-    public void setSumXY(double sumXY) {
-      this.sumXY = sumXY;
-    }
-
-    public double getYIntercept() {
-      return yIntercept;
-    }
-
-    public void setYIntercept(double yIntercept) {
-      this.yIntercept = yIntercept;
-    }
-
-    @CheckForNull
-    public Double getSlope() {
-      return slope;
-    }
-
-    public void setSlope(@Nullable Double slope) {
-      this.slope = slope;
-    }
-
-    public Double getCorrelationRate() {
-      return correlationRate;
-    }
-
-    public void setCorrelationRate(Double correlationRate) {
-      this.correlationRate = correlationRate;
-    }
-
-    public Integer getLevel() {
-      double hSlope = 0.8;
-      double nSlope = 0.2;
-
-      double vHighCorcoef = 1.0;
-      double modCorcoef = 0.69;
-      Double correlationCoeff = getCorrelationRate();
-      boolean vHCorCoefPos = (correlationCoeff > modCorcoef) && (correlationCoeff <= vHighCorcoef);
-      boolean vHCorCoefNeg = (correlationCoeff < -modCorcoef) && (correlationCoeff >= -vHighCorcoef);
-
-      if ((vHCorCoefPos || vHCorCoefNeg) && (slope >= hSlope)) {
-        return TENDENCY_BIG_UP;
-
-      } else if ((vHCorCoefPos || vHCorCoefNeg) && (slope <= -hSlope)) {
-        return TENDENCY_BIG_DOWN;
-
-      } else if ((vHCorCoefPos || vHCorCoefNeg) && ((slope >= nSlope) && (slope < hSlope))) {
-        return TENDENCY_UP;
-
-      } else if ((vHCorCoefPos || vHCorCoefNeg) && ((slope <= -nSlope) && (slope > -hSlope))) {
-        return TENDENCY_DOWN;
-
-      } else if ((vHCorCoefPos || vHCorCoefNeg) && ((slope < nSlope) || (slope > -nSlope))) {
-        return TENDENCY_NEUTRAL;
-
-      } else if (correlationCoeff == 0 && slope == 0 && !vHCorCoefPos && !vHCorCoefNeg) {
-        return TENDENCY_NEUTRAL;
-      }
-      return null;
-    }
-  }
-}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TendencyDecorator.java
deleted file mode 100644 (file)
index aa98cf6..0000000
+++ /dev/null
@@ -1,129 +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.timemachine;
-
-import org.sonar.batch.deprecated.components.PeriodsDefinition;
-
-import org.sonar.api.batch.RequiresDB;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.batch.Decorator;
-import org.sonar.api.batch.DecoratorBarriers;
-import org.sonar.api.batch.DecoratorContext;
-import org.sonar.api.batch.DependedUpon;
-import org.sonar.api.batch.DependsUpon;
-import org.sonar.api.batch.TimeMachine;
-import org.sonar.api.batch.TimeMachineQuery;
-import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.measures.MetricFinder;
-import org.sonar.api.resources.Project;
-import org.sonar.api.resources.Resource;
-import org.sonar.api.resources.Scopes;
-
-import java.util.List;
-
-@RequiresDB
-@DependedUpon(DecoratorBarriers.END_OF_TIME_MACHINE)
-public class TendencyDecorator implements Decorator {
-
-  public static final String PROP_DAYS_DESCRIPTION = "Number of days the tendency should be calculated on.";
-
-  private TimeMachine timeMachine;
-  private TimeMachineQuery query;
-  private TendencyAnalyser analyser;
-  private List<Metric> metrics;
-
-  public TendencyDecorator(TimeMachine timeMachine, MetricFinder metricFinder) {
-    this.timeMachine = timeMachine;
-    this.analyser = new TendencyAnalyser();
-    this.metrics = Lists.newLinkedList();
-    for (Metric metric : metricFinder.findAll()) {
-      if (metric.isNumericType()) {
-        metrics.add(metric);
-      }
-    }
-  }
-
-  TendencyDecorator(TimeMachine timeMachine, TimeMachineQuery query, TendencyAnalyser analyser) {
-    this.timeMachine = timeMachine;
-    this.query = query;
-    this.analyser = analyser;
-  }
-
-  @DependsUpon
-  public List<Metric> dependsUponMetrics() {
-    return metrics;
-  }
-
-  protected TimeMachineQuery initQuery(Project project) {
-    int days = PeriodsDefinition.CORE_TENDENCY_DEPTH_DEFAULT_VALUE;
-
-    // resource is set after
-    query = new TimeMachineQuery(null)
-      .setFrom(DateUtils.addDays(project.getAnalysisDate(), -days))
-      .setToCurrentAnalysis(true)
-      .setMetrics(metrics);
-    return query;
-  }
-
-  protected TimeMachineQuery resetQuery(Project project, Resource resource) {
-    if (query == null) {
-      initQuery(project);
-    }
-    query.setResource(resource);
-    return query;
-  }
-
-  @Override
-  public boolean shouldExecuteOnProject(Project project) {
-    return true;
-  }
-
-  @Override
-  public void decorate(Resource resource, DecoratorContext context) {
-    if (shouldDecorateResource(resource)) {
-      resetQuery(context.getProject(), resource);
-      List<Object[]> fields = timeMachine.getMeasuresFields(query);
-      ListMultimap<Metric, Double> valuesPerMetric = ArrayListMultimap.create();
-      for (Object[] field : fields) {
-        valuesPerMetric.put((Metric) field[1], (Double) field[2]);
-      }
-
-      for (Metric metric : query.getMetrics()) {
-        Measure measure = context.getMeasure(metric);
-        if (measure != null) {
-          List<Double> values = valuesPerMetric.get(metric);
-          values.add(measure.getValue());
-
-          measure.setTendency(analyser.analyseLevel(valuesPerMetric.get(metric)));
-          context.saveMeasure(measure);
-        }
-      }
-    }
-  }
-
-  private boolean shouldDecorateResource(Resource resource) {
-    return StringUtils.equals(Scopes.PROJECT, resource.getScope()) || StringUtils.equals(Scopes.DIRECTORY, resource.getScope());
-  }
-}
index 6a24a955965763973a47cf44cdc577f880162623..62832d2335a2b37a2f154322e7ba7834e8b18dbb 100644 (file)
@@ -15,7 +15,7 @@
             <span class="widget-label"><%= message('metric.complexity.name') %></span>
             <span class="nowrap">
               <%= format_measure(complexity, :url => url_for_drilldown(complexity)) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(complexity) : trend_icon(complexity) -%>
+              <%= format_variation(complexity) if dashboard_configuration.selected_period? -%>
             </span>
           </p>
         <% end %>
@@ -24,7 +24,7 @@
             <span class="widget-label"><%= message('widget.complexity.per_method.suffix') %></span>
             <span class="nowrap">
               <%= format_measure(function_complexity, :url => url_for_drilldown(function_complexity)) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(function_complexity) : trend_icon(function_complexity) -%>
+              <%= format_variation(function_complexity) if dashboard_configuration.selected_period? -%>
             </span>
           </p>
         <% end %>
@@ -33,7 +33,7 @@
             <span class="widget-label"><%= message('widget.complexity.per_class.suffix') %></span>
             <span class="nowrap">
               <%= format_measure(class_complexity, :url => url_for_drilldown(class_complexity)) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(class_complexity) : trend_icon(class_complexity) -%>
+                <%= format_variation(class_complexity) if dashboard_configuration.selected_period? -%>
             </span>
           </p>
         <% end %>
@@ -42,7 +42,7 @@
             <span class="widget-label"><%= message('widget.complexity.per_file.suffix') %></span>
             <span class="nowrap">
               <%= format_measure(file_complexity, :url => url_for_drilldown(file_complexity)) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(file_complexity) : trend_icon(file_complexity) -%>
+                <%= format_variation(file_complexity) if dashboard_configuration.selected_period? -%>
             </span>
           </p>
         <% end %>
index 29dcc3eef58e82af739687f49f0600eee2948cc4..e293cfa0d5604af3e74707ee28272001f5acc277 100644 (file)
@@ -13,7 +13,7 @@
           <span class="widget-label"><%= message('widget.code_coverage.name') -%></span>
           <span class="nowrap">
             <%= format_measure(code_coverage_measure, :suffix => '', :url => url_for_drilldown('coverage'), :default => '-') %>
-            <%= dashboard_configuration.selected_period? ? format_variation(code_coverage_measure) : trend_icon(code_coverage_measure) -%>
+            <%= format_variation(code_coverage_measure) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
         <%
@@ -24,7 +24,7 @@
             <span class="widget-label"><%= message('widget.code_coverage.line_coverage.suffix') -%></span>
             <span class="nowrap">
               <%= format_measure(line_coverage, :url => url_for_drilldown('uncovered_lines', :highlight => 'line_coverage')) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(line_coverage) : trend_icon(line_coverage) -%>
+              <%= format_variation(line_coverage) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
         <% end %>
@@ -36,7 +36,7 @@
             <span class="widget-label"><%= message('widget.code_coverage.condition_coverage.suffix') -%></span>
             <span class="nowrap">
               <%= format_measure(branch_coverage, :url => url_for_drilldown('uncovered_conditions', :highlight => 'branch_coverage')) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(branch_coverage) : trend_icon(branch_coverage) -%>
+              <%= format_variation(branch_coverage) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
         <% end %>
             <span class="widget-label"><%= message('widget.code_coverage.test_success') -%></span>
             <span class="nowrap">
               <%= format_measure(success_percentage, :url => url_for_drilldown(success_percentage)) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(success_percentage) : trend_icon(success_percentage) -%>
+              <%= format_variation(success_percentage) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
 
             <span class="widget-label"><%= message('widget.code_coverage.failures.suffix') -%></span>
             <span class="nowrap">
               <%= format_measure(Metric::TEST_FAILURES, :url => url_for_drilldown(Metric::TEST_FAILURES)) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(Metric::TEST_FAILURES) : trend_icon(Metric::TEST_FAILURES) -%>
+              <%= format_variation(Metric::TEST_FAILURES) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
 
             <span class="widget-label"><%= message('widget.code_coverage.errors.suffix') -%></span>
             <span class="nowrap">
               <%= format_measure(Metric::TEST_ERRORS, :url => url_for_drilldown(Metric::TEST_ERRORS)) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(Metric::TEST_ERRORS) : trend_icon(Metric::TEST_ERRORS) -%>
+              <%= format_variation(Metric::TEST_ERRORS) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
 
             <span class="widget-label"><%= message('widget.code_coverage.tests.suffix') -%></span>
             <span class="nowrap">
               <%= format_measure(tests_measure, :url => url_for_drilldown('tests')) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(tests_measure) : trend_icon(tests_measure) -%>
+              <%= format_variation(tests_measure) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
 
               <span class="widget-label"><%= message('widget.code_coverage.skipped.suffix') -%></span>
               <span class="nowrap">
                 <%= format_measure(skipped_measure, :url => url_for_drilldown(Metric::SKIPPED_TESTS)) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(skipped_measure) : trend_icon(skipped_measure) -%>
+                <%= format_variation(skipped_measure) if dashboard_configuration.selected_period? -%>
               </span>
             </div>
           <% end %>
             <span class="widget-label"><%= message('widget.code_coverage.execution_time') -%></span>
             <span class="nowrap">
               <%= format_measure(execution_time, :url => url_for_drilldown('test_execution_time')) %>
-              <%= dashboard_configuration.selected_period? ? format_variation(execution_time) : trend_icon(execution_time) -%>
+              <%= format_variation(execution_time) if dashboard_configuration.selected_period? -%>
             </span>
           </div>
         </div>
index 3ea96e27bd8b7684a0a4417b0b46c6c7248b4db6..c817403bc8c52cc8e144047a84ab9d7adccf88e6 100644 (file)
@@ -22,7 +22,7 @@
                   <%= format_measure(measure, :url => url_for_drilldown(measure, :period => period), :period => period) -%>
                 <% else %>
                   <%= format_measure(measure, :url => url_for_drilldown(measure)) -%>
-                  <%= dashboard_configuration.selected_period? ? format_variation(measure) : trend_icon(measure) -%>
+                  <%= format_variation(measure) if dashboard_configuration.selected_period? -%>
                 <% end -%>
               </span>
             </p>
index a945f084724bf46d693c336d32970c22c060220d..87cceb5ff3b73fdc3691370d3ba8e35548f07702 100644 (file)
@@ -11,9 +11,6 @@
             <span class="widget-label"><%= message('metric.sqale_rating.name') -%></span>
             <span class="nowrap">
               <%= format_measure(sqale_rating, :url => url_for_drilldown(sqale_rating)) %>
-              <% unless dashboard_configuration.selected_period? %>
-                <%= trend_icon(sqale_rating) -%>
-              <% end %>
             </span>
           </div>
         </div>
@@ -26,7 +23,7 @@
           <span class="widget-label"><%= message('metric.sqale_debt_ratio.name') -%></span>
           <span class="nowrap">
             <%= format_measure(sqale_debt_ratio, :url => url_for_drilldown(sqale_debt_ratio)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(sqale_debt_ratio) : trend_icon(sqale_debt_ratio) -%>
+            <%= format_variation(sqale_debt_ratio) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
       </div>
index e0c4ffe5e569becb9ca71f32cf48c66d90f666a4..06423d5c029428fc3fbe0fbe4105a216010fa7ed 100644 (file)
@@ -17,7 +17,7 @@
         <span class="widget-label"><%= message('widget.documentation_comments.documentation') -%></span>
         <span class="nowrap">
           <%= format_measure(public_documented_api_density, :url => url_for_drilldown(Metric::PUBLIC_UNDOCUMENTED_API, :highlight => Metric::PUBLIC_DOCUMENTED_API_DENSITY)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation('public_documented_api_density') : trend_icon('public_documented_api_density') -%>
+          <%= format_variation('public_documented_api_density') if dashboard_configuration.selected_period? -%>
         </span>
       </div>
       <% end %>
         <span class="widget-label"><%= message('metric.public_api.name') -%></span>
         <span class="nowrap">
           <%= format_measure(public_api,:url => url_for_drilldown(public_api)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(public_api) : trend_icon(public_api) -%>
+          <%= format_variation(public_api) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
       <div class="widget-measure">
         <span class="widget-label"><%= message('metric.public_undocumented_api.abbreviation') -%></span>
         <span class="nowrap">
           <%= format_measure(public_undocumented_api,:url => url_for_drilldown(public_undocumented_api)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(public_undocumented_api) : trend_icon(public_undocumented_api) -%>
+          <%= format_variation(public_undocumented_api) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
     </div>
         <span class="widget-label"><%= message('widget.documentation_comments.comments') -%></span>
         <span class="nowrap">
           <%= format_measure(comment_lines_density,:url => url_for_drilldown(comment_lines_density))%>
-          <%= dashboard_configuration.selected_period? ? format_variation(comment_lines_density) : trend_icon(comment_lines_density) -%>
+          <%= format_variation(comment_lines_density) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
       <div class="widget-measure">
         <span class="widget-label"><%= message('metric.comment_lines.name') -%></span>
         <span class="nowrap">
           <%= format_measure(comment_lines,:url => url_for_drilldown(comment_lines)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(comment_lines) : trend_icon(comment_lines) -%>
+          <%= format_variation(comment_lines) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
     </div>
index 3eaaf6d4a55877a0ea38dc4f92e1213cc8ea0b25..99b487a57a753614365e18377c6a4013975e025f 100644 (file)
@@ -8,7 +8,7 @@
       <span class="widget-label"><%= message('widget.duplications.duplications') -%></span>
       <span class="nowrap">
         <%= format_measure(duplicated_lines_density, :url => url_for_drilldown('duplicated_lines', :highlight =>  'duplicated_lines_density')) %>
-        <%= dashboard_configuration.selected_period? ? format_variation('duplicated_lines_density') : trend_icon('duplicated_lines_density') -%>
+        <%= format_variation('duplicated_lines_density') if dashboard_configuration.selected_period? -%>
       </span>
     </div>
 
@@ -16,7 +16,7 @@
       <span class="widget-label"><%= message('widget.duplications.lines.suffix') -%></span>
       <span class="nowrap">
         <%= format_measure(measure('duplicated_lines'), :url => url_for_drilldown('duplicated_lines'))%>
-        <%= dashboard_configuration.selected_period? ? format_variation('duplicated_lines') : trend_icon('duplicated_lines') -%>
+        <%= format_variation('duplicated_lines') if dashboard_configuration.selected_period? -%>
       </span>
     </div>
 
@@ -24,7 +24,7 @@
       <span class="widget-label"><%= message('widget.duplications.blocks.suffix') -%></span>
       <span class="nowrap">
         <%= format_measure(measure('duplicated_blocks'), :url => url_for_drilldown('duplicated_blocks'))%>
-        <%= dashboard_configuration.selected_period? ? format_variation('duplicated_blocks') : trend_icon('duplicated_blocks') -%>
+        <%= format_variation('duplicated_blocks') if dashboard_configuration.selected_period? -%>
       </span>
     </div>
 
@@ -32,7 +32,7 @@
       <span class="widget-label"><%= message('widget.duplications.files.suffix') -%></span>
       <span class="nowrap">
         <%= format_measure(measure('duplicated_files'), :url => url_for_drilldown('duplicated_files'))%>
-        <%= dashboard_configuration.selected_period? ? format_variation('duplicated_files') : trend_icon('duplicated_files') -%>
+        <%= format_variation('duplicated_files') if dashboard_configuration.selected_period? -%>
       </span>
     </div>
 
index 0e645dfa2bdfe980ed810e261ca0463de8a004c8..d27c35ca448a183eb316a08584233db7ce5fc4ae 100644 (file)
@@ -34,7 +34,7 @@
              title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">
             <%= format_measure(technical_debt) -%>
           </a>
-          <%= dashboard_configuration.selected_period? ? format_variation(technical_debt) : trend_icon(technical_debt) -%>
+          <%= format_variation(technical_debt) if dashboard_configuration.selected_period? -%>
         </div>
         <div class="widget-measure-delta">
           <%
@@ -74,7 +74,7 @@
               <%= format_measure(issues) -%>
             </a>
           </span>
-          <%= dashboard_configuration.selected_period? ? format_variation(issues) : trend_icon(issues) -%>
+          <%= format_variation(issues) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
       <div class="widget-measure-delta">
             <a href="<%= url_for(:controller => 'component_issues', :action => 'index') -%>?id=<%= url_encode(@project.key) -%>#resolved=false|severities=BLOCKER|createdAfter=<%= period_date -%>"
                class="varw widget-link widget-link-red link-<%= widget.key %>-new-blocker-issues"
                title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">+<%= format_variation(new_blocker_issues, :style => 'none', :default => '-') -%></a>
-          <% else %>
-            <%= trend_icon(blocker_issues, :empty => true) -%>
           <% end %>
         </td>
       </tr>
             <a href="<%= url_for(:controller => 'component_issues', :action => 'index') -%>?id=<%= url_encode(@project.key) -%>#resolved=false|severities=CRITICAL|createdAfter=<%= period_date -%>"
                class="varw widget-link widget-link-red link-<%= widget.key %>-new-critical-issues"
                title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">+<%= format_variation(new_critical_issues, :style => 'none', :default => '-') -%></a>
-          <% else %>
-            <%= trend_icon(critical_issues, :empty => true) -%>
           <% end %>
         </td>
       </tr>
             <a href="<%= url_for(:controller => 'component_issues', :action => 'index') -%>?id=<%= url_encode(@project.key) -%>#resolved=false|severities=MAJOR|createdAfter=<%= period_date -%>"
                class="varw widget-link widget-link-red link-<%= widget.key %>-new-major-issues"
                title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">+<%= format_variation(new_major_issues, :style => 'none', :default => '-') -%></a>
-          <% else %>
-            <%= trend_icon(major_issues, :empty => true) -%>
           <% end %>
         </td>
       </tr>
             <a href="<%= url_for(:controller => 'component_issues', :action => 'index') -%>?id=<%= url_encode(@project.key) -%>#resolved=false|severities=MINOR|createdAfter=<%= period_date -%>"
                class="varw widget-link widget-link-red link-<%= widget.key %>-new-minor-issues"
                title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">+<%= format_variation(new_minor_issues, :style => 'none', :default => '-') -%></a>
-          <% else %>
-            <%= trend_icon(minor_issues, :empty => true) -%>
           <% end %>
         </td>
       </tr>
             <a href="<%= url_for(:controller => 'component_issues', :action => 'index') -%>?id=<%= url_encode(@project.key) -%>#resolved=false|severities=INFO|createdAfter=<%= period_date -%>"
                class="varw widget-link widget-link-red link-<%= widget.key %>-new-info-issues"
                title="<%= tooltip -%>" data-toggle="tooltip" data-placement="bottom">+<%= format_variation(new_info_issues, :style => 'none', :default => '-') -%></a>
-          <% else %>
-            <%= trend_icon(info_issues, :empty => true) -%>
           <% end %>
         </td>
       </tr>
index 0f0daaafdd245cba5daf228726d878216728e3da..52c01fe6728607545eb8ef02b27281605af08b48 100644 (file)
@@ -14,7 +14,7 @@
           <span class="widget-label"><%= message('widget.it-coverage.name') -%></span>
             <span class="nowrap">
               <%= format_measure(it_coverage, :url => url_for_drilldown('it_coverage'), :default => '-') %>
-              <%= dashboard_configuration.selected_period? ? format_variation(it_coverage) : trend_icon(it_coverage) -%>
+              <%= format_variation(it_coverage) if dashboard_configuration.selected_period? -%>
             </span>
         </div>
 
@@ -26,7 +26,7 @@
             <span class="widget-label"><%= message('widget.it-coverage.line_coverage.suffix') -%></span>
               <span class="nowrap">
                 <%= format_measure(it_line_coverage, :url => url_for_drilldown('it_uncovered_lines', :highlight => 'it_line_coverage')) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(it_line_coverage) : trend_icon(it_line_coverage) -%>
+                <%= format_variation(it_line_coverage) if dashboard_configuration.selected_period? -%>
               </span>
           </div>
         <% end %>
@@ -39,7 +39,7 @@
             <span class="widget-label"><%= message('widget.it-coverage.condition_coverage.suffix') -%></span>
               <span class="nowrap">
                 <%= format_measure(it_branch_coverage, :url => url_for_drilldown('it_uncovered_conditions', :highlight => 'it_branch_coverage')) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(it_branch_coverage) : trend_icon(it_branch_coverage) -%>
+                <%= format_variation(it_branch_coverage) if dashboard_configuration.selected_period? -%>
               </span>
           </div>
         <% end %>
           <span class="widget-label"><%= message('widget.overall-coverage.name') -%></span>
             <span class="nowrap">
               <%= format_measure(overall_coverage, :url => url_for_drilldown('overall_coverage'), :default => '-') %>
-              <%= dashboard_configuration.selected_period? ? format_variation(overall_coverage) : trend_icon(overall_coverage) -%>
+              <%= format_variation(overall_coverage) if dashboard_configuration.selected_period? -%>
             </span>
         </div>
 
             <span class="widget-label"><%= message('widget.overall-coverage.line_coverage.suffix') -%></span>
               <span class="nowrap">
                 <%= format_measure(overall_line_coverage, :url => url_for_drilldown('overall_uncovered_lines', :highlight => 'overall_line_coverage')) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(overall_line_coverage) : trend_icon(overall_line_coverage) -%>
+                <%= format_variation(overall_line_coverage) if dashboard_configuration.selected_period? -%>
               </span>
           </div>
         <% end %>
             <span class="widget-label"><%= message('widget.overall-coverage.condition_coverage.suffix') -%></span>
               <span class="nowrap">
                 <%= format_measure(overall_branch_coverage, :url => url_for_drilldown('overall_uncovered_conditions', :highlight => 'overall_branch_coverage')) %>
-                <%= dashboard_configuration.selected_period? ? format_variation(overall_branch_coverage) : trend_icon(overall_branch_coverage) -%>
+                <%= format_variation(overall_branch_coverage) if dashboard_configuration.selected_period? -%>
               </span>
           </div>
         <% end %>
                                            :period => dashboard_configuration.period_index,
                                            :url => url_for_drilldown(new_coverage, :period => dashboard_configuration.period_index),
                                            :default => '-') %>
-                        <%= dashboard_configuration.selected_period? ? format_variation(new_coverage) : trend_icon(new_coverage) -%>
+                        <%= format_variation(new_coverage) if dashboard_configuration.selected_period? -%>
                       </span>
                   </div>
                 <% end %>
                         <%= format_measure(new_line_coverage,
                                            :period => dashboard_configuration.period_index,
                                            :url => url_for_drilldown(new_line_coverage, :period => dashboard_configuration.period_index)) %>
-                        <%= dashboard_configuration.selected_period? ? format_variation(new_line_coverage) : trend_icon(new_line_coverage) -%>
+                        <%= format_variation(new_line_coverage) if dashboard_configuration.selected_period? -%>
                       </span>
                   </div>
                 <% end %>
                         <%= format_measure(new_branch_coverage,
                                            :period => dashboard_configuration.period_index,
                                            :url => url_for_drilldown(new_branch_coverage, :period => dashboard_configuration.period_index)) %>
-                        <%= dashboard_configuration.selected_period? ? format_variation(new_branch_coverage) : trend_icon(new_branch_coverage) -%>
+                        <%= format_variation(new_branch_coverage) if dashboard_configuration.selected_period? -%>
                       </span>
                   </div>
                 <% end %>
index 7811e848f0de8c4ca6dbb62801ee477fade1dab4..1a4387b1ecc363c4d4cc3958fcd6b4133c7de0ca 100644 (file)
           <span class="widget-label"><%= message('metric.ncloc.name') -%></span>
           <span class="nowrap">
             <%= format_measure(ncloc, :url => url_for_drilldown(ncloc)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(ncloc) : trend_icon(ncloc) -%>
+            <%= format_variation(ncloc) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
         <%  if generated_ncloc && generated_ncloc.value>0 %>
           <p class="widget-label nowrap" style="margin-bottom: 7px">
             <%= message('including_abbreviated') -%>
-            <%= format_measure(generated_ncloc, :url => url_for_drilldown(generated_ncloc)) -%> <%= dashboard_configuration.selected_period? ? format_variation(generated_ncloc) : trend_icon(generated_ncloc) -%>
+            <%= format_measure(generated_ncloc, :url => url_for_drilldown(generated_ncloc)) -%> <%= format_variation(generated_ncloc) if dashboard_configuration.selected_period? -%>
             <%= message('metric.generated_ncloc.name.suffix') -%>
           </p>
         <% end %>
@@ -92,7 +92,7 @@
           <span class="widget-label"><%= message('metric.lines.name') -%></span>
           <span class="nowrap">
             <%= format_measure(lines, :url => url_for_drilldown(ncloc)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(lines) : trend_icon(lines) -%>
+            <%= format_variation(lines) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
         <span class="widget-label"><%= message('metric.files.name') -%></span>
         <span class="nowrap">
           <%= format_measure(files, :url => url_for_drilldown(files)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(files) : trend_icon(files) -%>
+          <%= format_variation(files) if dashboard_configuration.selected_period? -%>
         </span>
       </p>
 
           <span class="widget-label"><%= message('metric.directories.name') -%></span>
           <span class="nowrap">
             <%= format_measure(directories, :url => url_for_drilldown(directories)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(directories) : trend_icon(directories) -%>
+            <%= format_variation(directories) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
         <span class="widget-label"><%= message('metric.lines.name') -%></span>
         <span class="nowrap">
           <%= format_measure(lines, :url => url_for_drilldown(lines)) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(lines) : trend_icon(lines) -%>
+          <%= format_variation(lines) if dashboard_configuration.selected_period? -%>
         </span>
       </p>
 
       <%  if generated_lines && generated_lines.value>0 %>
         <p class="widget-label nowrap" style="margin-bottom: 7px">
           <%= message('including_abbreviated') -%>
-          <%= format_measure(generated_lines, :url => url_for_drilldown(generated_lines)) -%> <%= dashboard_configuration.selected_period? ? format_variation(generated_lines) : trend_icon(generated_lines) -%>
+          <%= format_measure(generated_lines, :url => url_for_drilldown(generated_lines)) -%> <%= format_variation(generated_lines) if dashboard_configuration.selected_period? -%>
           <%= message('metric.generated_lines.name.suffix') -%>
         </p>
       <% end %>
           <span class="widget-label"><%= message('projects') -%></span>
           <span class="nowrap">
             <span class="widget-number"><%= format_measure(projects) %></span>
-            <%= dashboard_configuration.selected_period? ? format_variation(projects) : trend_icon(projects) -%>
+            <%= format_variation(projects) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
           <span class="widget-label"><%= message('metric.functions.name') -%></span>
           <span class="nowrap">
             <%= format_measure(functions, :url => url_for_drilldown(functions)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(functions) : trend_icon(functions) -%>
+            <%= format_variation(functions) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
           <span class="widget-label"><%= message('metric.classes.name') -%></span>
           <span class="nowrap">
             <%= format_measure(classes, :url => url_for_drilldown(classes)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(classes) : trend_icon(classes) -%>
+            <%= format_variation(classes) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
           <span class="widget-label"><%= message('metric.statements.name') -%></span>
           <span class="nowrap">
             <%= format_measure(statements, :url => url_for_drilldown(statements)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(statements) : trend_icon(statements) -%>
+            <%= format_variation(statements) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
           <span class="widget-label"><%= message('metric.accessors.name') -%></span>
           <span class="nowrap">
             <%= format_measure(accessors, :url => url_for_drilldown(accessors)) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(accessors) : trend_icon(accessors) -%>
+            <%= format_variation(accessors) if dashboard_configuration.selected_period? -%>
           </span>
         </p>
       <% end %>
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyAnalyserTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyAnalyserTest.java
deleted file mode 100644 (file)
index ae1e863..0000000
+++ /dev/null
@@ -1,128 +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.timemachine;
-
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TendencyAnalyserTest {
-  static TendencyAnalyser.SlopeData analyse(Double... values) {
-    return new TendencyAnalyser().analyse(Arrays.asList(values));
-  }
-
-  static Integer analyseLevel(Double... values) {
-    return new TendencyAnalyser().analyseLevel(Arrays.asList(values));
-  }
-
-  @Test
-  public void testNoData() {
-    TendencyAnalyser.SlopeData slopeData = analyse();
-
-    assertThat(slopeData).isNull();
-  }
-
-  @Test
-  public void testNotEnoughData() {
-    assertThat(analyseLevel(10.0)).isNull();
-  }
-
-  @Test
-  public void testTendencyOnThreeDays() {
-    TendencyAnalyser.SlopeData slopeData = analyse(10.0, null, 9.9);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(-0.5).isLessThan(0.5);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_NEUTRAL);
-  }
-
-  @Test
-  public void testTendencyOnTwoZeroDays() {
-    TendencyAnalyser.SlopeData slopeData = analyse(0.0, 0.0);
-
-    assertThat(slopeData.getSlope()).isZero();
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_NEUTRAL);
-  }
-
-  @Test
-  public void testTendencyOnThreeZeroDays() {
-    TendencyAnalyser.SlopeData slopeData = analyse(0.0, 0.0, 0.0);
-
-    assertThat(slopeData.getSlope()).isZero();
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_NEUTRAL);
-  }
-
-  @Test
-  public void testBigDownOnThreeDays() {
-    TendencyAnalyser.SlopeData slopeData = analyse(90.0, 91.0, 50.0);
-
-    assertThat(slopeData.getSlope()).isLessThan(-2.0);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_BIG_DOWN);
-  }
-
-  @Test
-  public void testFlatTendency() {
-    TendencyAnalyser.SlopeData slopeData = analyse(10.0, 10.2, 9.9);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(-0.5).isLessThan(0.5);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_NEUTRAL);
-  }
-
-  @Test
-  public void testFlatTendencyWithPeak() {
-    TendencyAnalyser.SlopeData slopeData = analyse(10.0, 15.0, 10.0);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(-0.5).isLessThan(0.5);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_NEUTRAL);
-  }
-
-  @Test
-  public void testBigUpTendencyOnThreeValues() {
-    TendencyAnalyser.SlopeData slopeData = analyse(10.0, 12.0, 15.5);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(2.5).isLessThan(3.0);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_BIG_UP);
-  }
-
-  @Test
-  public void testBigUpTendencyOnTenValues() {
-    TendencyAnalyser.SlopeData slopeData = analyse(45.0, 60.0, 57.0, 65.0, 58.0, 68.0, 59.0, 66.0, 76.0, 80.0);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(2.5).isLessThan(3.0);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_BIG_UP);
-  }
-
-  @Test
-  public void testMediumUpTendency() {
-    TendencyAnalyser.SlopeData slopeData = analyse(5.0, 4.5, 5.1, 5.5, 5.3, 6.4, 6.3, 6.6, 6.8, 6.5);
-
-    assertThat(slopeData.getSlope()).isGreaterThan(0.0).isLessThan(1.0);
-    assertThat(slopeData.getLevel()).isEqualTo(TendencyAnalyser.TENDENCY_UP);
-  }
-
-  @Test
-  public void testAsymetricAlgorithm() {
-    TendencyAnalyser.SlopeData slopeData1 = analyse(45.0, 47.0, 95.0);
-    TendencyAnalyser.SlopeData slopeData2 = analyse(95.0, 45.0, 47.0);
-
-    assertThat(slopeData1.getSlope()).isNotEqualTo(slopeData2.getSlope());
-  }
-}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TendencyDecoratorTest.java
deleted file mode 100644 (file)
index 839e6f5..0000000
+++ /dev/null
@@ -1,112 +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.timemachine;
-
-import org.junit.Test;
-import org.junit.matchers.JUnitMatchers;
-import org.sonar.api.batch.DecoratorContext;
-import org.sonar.api.batch.TimeMachine;
-import org.sonar.api.batch.TimeMachineQuery;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.measures.MetricFinder;
-import org.sonar.api.resources.Directory;
-import org.sonar.api.resources.Project;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.mockito.Matchers.anyList;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class TendencyDecoratorTest {
-
-  @Test
-  public void initQuery() throws ParseException {
-    Project project = mock(Project.class);
-    when(project.getAnalysisDate()).thenReturn(date("2009-12-25"));
-
-    MetricFinder metricFinder = mock(MetricFinder.class);
-    when(metricFinder.findAll()).thenReturn(Arrays.<Metric>asList(CoreMetrics.LINES, CoreMetrics.COVERAGE, CoreMetrics.COVERAGE_LINE_HITS_DATA));
-
-    TendencyDecorator decorator = new TendencyDecorator(null, metricFinder);
-
-    TimeMachineQuery query = decorator.initQuery(project);
-    assertThat(query.getMetrics().size(), is(2));
-    assertThat(query.getMetrics(), JUnitMatchers.<Metric>hasItems(CoreMetrics.LINES, CoreMetrics.COVERAGE));
-    assertThat(query.getFrom(), is(date("2009-11-25")));
-    assertThat(query.isToCurrentAnalysis(), is(true));
-  }
-
-  @Test
-  public void includeCurrentMeasures() throws ParseException {
-    TendencyAnalyser analyser = mock(TendencyAnalyser.class);
-    TimeMachineQuery query = new TimeMachineQuery(null).setMetrics(CoreMetrics.LINES, CoreMetrics.COVERAGE);
-    TimeMachine timeMachine = mock(TimeMachine.class);
-
-    when(timeMachine.getMeasuresFields(query)).thenReturn(Arrays.<Object[]>asList(
-      new Object[] {date("2009-12-01"), CoreMetrics.LINES, 1200.0},
-      new Object[] {date("2009-12-01"), CoreMetrics.COVERAGE, 80.5},
-      new Object[] {date("2009-12-02"), CoreMetrics.LINES, 1300.0},
-      new Object[] {date("2009-12-02"), CoreMetrics.COVERAGE, 79.6},
-      new Object[] {date("2009-12-15"), CoreMetrics.LINES, 1150.0}
-      ));
-
-    DecoratorContext context = mock(DecoratorContext.class);
-    when(context.getMeasure(CoreMetrics.LINES)).thenReturn(new Measure(CoreMetrics.LINES, 1400.0));
-    when(context.getMeasure(CoreMetrics.COVERAGE)).thenReturn(new Measure(CoreMetrics.LINES, 90.0));
-
-    TendencyDecorator decorator = new TendencyDecorator(timeMachine, query, analyser);
-    decorator.decorate(Directory.create("org/foo"), context);
-
-    verify(analyser).analyseLevel(Arrays.asList(1200.0, 1300.0, 1150.0, 1400.0));
-    verify(analyser).analyseLevel(Arrays.asList(80.5, 79.6, 90.0));
-  }
-
-  @Test
-  public void noTendencyIfNoCurrentMeasures() throws ParseException {
-    TendencyAnalyser analyser = mock(TendencyAnalyser.class);
-    TimeMachineQuery query = new TimeMachineQuery(null).setMetrics(CoreMetrics.LINES, CoreMetrics.COVERAGE);
-    TimeMachine timeMachine = mock(TimeMachine.class);
-
-    when(timeMachine.getMeasuresFields(query)).thenReturn(Arrays.<Object[]>asList(
-      new Object[] {date("2009-12-01"), CoreMetrics.LINES, 1200.0},
-      new Object[] {date("2009-12-02"), CoreMetrics.LINES, 1300.0}
-      ));
-
-    DecoratorContext context = mock(DecoratorContext.class);
-    TendencyDecorator decorator = new TendencyDecorator(timeMachine, query, analyser);
-    decorator.decorate(Directory.create("org/foo"), context);
-
-    verify(analyser, never()).analyseLevel(anyList());
-  }
-
-  private Date date(String date) throws ParseException {
-    return new SimpleDateFormat("yyyy-MM-dd").parse(date);
-  }
-}
index d69bb9344ec956f6e83e7b1abc06543866a20d4d..7c6eaee9b7628c48920b62ef35de59bc822defef 100644 (file)
@@ -97,8 +97,7 @@ public class ResourcesWs implements WebService {
       .setExampleValue("10");
 
     action.createParam("includetrends")
-      .setDescription("Include trends and period variations in response: add &lttrend&gt (1 if better, else worse), &ltvar&gt (1 if measure value increases) " +
-        "and nodes &ltp*&gt for period variations")
+      .setDescription("Include period variations in response: add nodes &ltp*&gt for period variations")
       .setDefaultValue("false")
       .setPossibleValues("true", "false");
 
index dfcc18cf518b6ab335dca2dcb3a3a100b3a45724..b020867387bb4d3dabb86bc4c43bd3d82f18c539 100644 (file)
@@ -104,7 +104,6 @@ public class PersistMeasuresStep implements ComputationStep {
     }
 
     MeasureDto out = new MeasureDto();
-    out.setTendency(in.hasTendency() ? in.getTendency() : null);
     out.setVariation(1, in.hasVariationValue1() ? in.getVariationValue1() : null);
     out.setVariation(2, in.hasVariationValue2() ? in.getVariationValue2() : null);
     out.setVariation(3, in.hasVariationValue3() ? in.getVariationValue3() : null);
index 63e9020b77b7905824a0ae0ea73685b9f7c12c01..d49caa22ded74ea4ab4a628bd15368c758cf6f9c 100644 (file)
@@ -13,7 +13,7 @@
         <span class="widget-label"><%= message('widget.file_design.file_tangle_index') -%></span>
         <span class="nowrap">
           <%= format_measure(file_tangle_index, :suffix => '', :default => '-', :url => dsm_url) -%>
-          <%= dashboard_configuration.selected_period? ? format_variation(file_tangle_index) : trend_icon(file_tangle_index, :big => true) -%>
+          <%= format_variation(file_tangle_index) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
 
@@ -23,7 +23,7 @@
           <span class="nowrap">
             <span class="widget-medium">&gt;</span>
             <%= format_measure(file_cycles, :default => '-', :url => dsm_url) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(file_cycles) : trend_icon(file_cycles) -%>
+            <%= format_variation(file_cycles) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
       <% end %>
@@ -37,7 +37,7 @@
         <span class="widget-label"><%= message('widget.file_design.suspect_file_dependencies') -%></span>
         <span class="nowrap">
           <%= format_measure(file_feedback_edges, :url => dsm_url) -%>
-          <%= dashboard_configuration.selected_period? ? format_variation(file_feedback_edges) : trend_icon(file_feedback_edges, :big => true) -%>
+          <%= format_variation(file_feedback_edges) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
     </div>
@@ -59,7 +59,7 @@
         <span class="widget-label"><%= message('widget.package_design.package_tangle_index') -%></span>
         <span class="nowrap">
           <%= format_measure(package_tangle_index, :suffix => '', :default => '-', :url => dsm_url) %>
-          <%= dashboard_configuration.selected_period? ? format_variation(package_tangle_index) : trend_icon(package_tangle_index) -%>
+          <%= format_variation(package_tangle_index) if dashboard_configuration.selected_period? -%>
         </span>
       </div>
 
@@ -69,7 +69,7 @@
           <span class="nowrap">
             <span class="widget-medium">&gt;</span>
             <%= format_measure(package_cycles, :default => '-', :url => dsm_url) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(package_cycles) : trend_icon(package_cycles) -%>
+            <%= format_variation(package_cycles) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
       <% end %>
@@ -87,7 +87,7 @@
           <span class="widget-label"><%= message('widget.package_design.between_packages.suffix') -%></span>
           <span class="nowrap">
             <%= format_measure(package_feedback_edges, :default => '-', :url => dsm_url) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(package_feedback_edges) : trend_icon(package_feedback_edges) -%>
+            <%= format_variation(package_feedback_edges) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
       <% end %>
@@ -97,7 +97,7 @@
           <span class="widget-label"><%= message('widget.package_design.between_files.suffix') -%></span>
           <span class="nowrap">
             <%= format_measure(package_tangles, :default => '-', :url => dsm_url) %>
-            <%= dashboard_configuration.selected_period? ? format_variation(package_tangles) : trend_icon(package_tangles) -%>
+            <%= format_variation(package_tangles) if dashboard_configuration.selected_period? -%>
           </span>
         </div>
       <% end %>
index bca0758af1f66d811fe63c67a99747feb01053d8..d51b38deb45b6a512e1394abe71fa7b1728192c4 100644 (file)
@@ -106,7 +106,6 @@ public class PersistMeasuresStepTest extends BaseStepTest {
       BatchReport.Measure.newBuilder()
         .setValueType(Constants.MeasureValueType.STRING)
         .setStringValue("measure-data")
-        .setTendency(2)
         .setVariationValue1(1.1d)
         .setVariationValue2(2.2d)
         .setVariationValue3(3.3d)
@@ -125,7 +124,6 @@ public class PersistMeasuresStepTest extends BaseStepTest {
       BatchReport.Measure.newBuilder()
         .setValueType(Constants.MeasureValueType.DOUBLE)
         .setDoubleValue(123.123d)
-        .setTendency(2)
         .setVariationValue1(1.1d)
         .setVariationValue2(2.2d)
         .setVariationValue3(3.3d)
@@ -162,7 +160,6 @@ public class PersistMeasuresStepTest extends BaseStepTest {
     BatchReport.Measure batchMeasure = BatchReport.Measure.newBuilder()
       .setValueType(Constants.MeasureValueType.DOUBLE)
       .setDoubleValue(123.123d)
-      .setTendency(2)
       .setVariationValue1(1.1d)
       .setVariationValue2(2.2d)
       .setVariationValue3(3.3d)
@@ -331,7 +328,6 @@ public class PersistMeasuresStepTest extends BaseStepTest {
       .setCharacteristicId(123456)
       .setPersonId(5432)
       .setValue(123.123d)
-      .setTendency(2)
       .setVariation(1, 1.1d)
       .setVariation(2, 2.2d)
       .setVariation(3, 3.3d)
index c83c7c258bdc057e43351d9c8251288d12c0a6aa..497fbd3aeefa291a3d89e571dbcfd945002f95a6 100644 (file)
@@ -147,7 +147,6 @@ public class MeasureDaoTest {
       .setComponentId(6L)
       .setValue(2.0d)
       .setData("measure-value")
-      .setTendency(42)
       .setSeverity(Severity.INFO)
       .setVariation(1, 1.0d)
       .setVariation(2, 2.0d)
index 62b7c66cac3c6c283e257dfba3a3ed3f6fa261ea..f8929782f32edee27bd5945b3807061436b97ca4 100644 (file)
@@ -9,7 +9,7 @@
       person_id="23"
       value="2.0"
       text_value="measure-value"
-      tendency="42"
+      tendency="[null]"
       rule_priority="0"
       measure_date="[null]"
       measure_data="[null]"
index 263be493f140b794440fc233016056c8183d5659..928fbb5dcef71933b09352597b54c7e29027e64d 100644 (file)
@@ -289,7 +289,7 @@ class Api::ResourcesController < Api::ApiController
   def select_columns_for_measures
     select_columns='project_measures.id,project_measures.value,project_measures.metric_id,project_measures.snapshot_id,project_measures.rule_id,project_measures.rule_priority,project_measures.text_value,project_measures.characteristic_id,project_measures.measure_data'
     if params[:includetrends]=='true'
-      select_columns+=',project_measures.tendency,project_measures.variation_value_1,project_measures.variation_value_2,project_measures.variation_value_3,project_measures.variation_value_4,project_measures.variation_value_5'
+      select_columns+=',project_measures.variation_value_1,project_measures.variation_value_2,project_measures.variation_value_3,project_measures.variation_value_4,project_measures.variation_value_5'
     end
     if params[:includealerts]=='true'
       select_columns+=',project_measures.alert_status,project_measures.alert_text'
@@ -438,10 +438,6 @@ class Api::ResourcesController < Api::ApiController
           json_measure[:alert_text]=measure.alert_text
         end
         if include_trends
-          if measure.tendency
-            json_measure[:trend]=measure.tendency_qualitative
-            json_measure[:var]=measure.tendency
-          end
           json_measure[:var1]=measure.variation_value_1.to_f if measure.variation_value_1
           json_measure[:fvar1]=measure.format_numeric_value(measure.variation_value_1.to_f) if measure.variation_value_1
           json_measure[:var2]=measure.variation_value_2.to_f if measure.variation_value_2
@@ -529,10 +525,6 @@ class Api::ResourcesController < Api::ApiController
               xml.alert_text(measure.alert_text) if measure.alert_text
             end
             if include_trends
-              if measure.tendency
-                xml.trend(measure.tendency_qualitative)
-                xml.var(measure.tendency)
-              end
               xml.var1(measure.variation_value_1.to_f) if measure.variation_value_1
               xml.fvar1(measure.format_numeric_value(measure.variation_value_1.to_f)) if measure.variation_value_1
               xml.var2(measure.variation_value_2.to_f) if measure.variation_value_2
index b7c210d08d18673b4164fade641e1f3ceb60eabd..c5f3c4bdc66694e608b7acc69a0e658331fa7f39 100644 (file)
@@ -280,7 +280,6 @@ class MeasuresController < ApplicationController
           component_hash[:measures][measure.metric.key][:val] = measure.value if measure.value
           component_hash[:measures][measure.metric.key][:fval] = measure.formatted_value if measure.value
           component_hash[:measures][measure.metric.key][:text] = measure.data if measure.data
-          component_hash[:measures][measure.metric.key][:trend] = measure.tendency if fields.include?('measureTrend') && measure.tendency
           component_hash[:measures][measure.metric.key][:status] = measure.alert_status if fields.include?('measureStatus') && measure.alert_status
           component_hash[:measures][measure.metric.key][:p1] = measure.variation_value_1 if display_variation && measure.variation_value_1
           component_hash[:measures][measure.metric.key][:p2] = measure.variation_value_2 if display_variation && measure.variation_value_2
index c1eb79b9028bd8f3d67aeef8f0c122fc99729cbd..ff006badfd0b4638e418c5b88c275980f3c0ef74 100644 (file)
@@ -129,7 +129,7 @@ module ApplicationHelper
 
   # deprecated since 2.5. Use trend_icon() instead
   def tendency_icon(metric_or_measure, small=true, no_tendency_img=true)
-    trend_icon(metric_or_measure, {:big => !small, :empty => !no_tendency_img})
+    trend_icon(nil, {:empty => !no_tendency_img})
   end
 
   def boolean_icon(boolean_value, options={})
@@ -446,44 +446,10 @@ module ApplicationHelper
   end
 
   #
-  #
-  # Display the trend icon :
-  #
-  # === Optional parameters
-  # :empty: true|false. Show an empty transparent image when no trend or no measure. Default is false.
-  # :big : true|false (default is false). Default is 10x10px. Big is 16x16px.
-  #
-  # === Examples
-  # trend_icon('ncloc')
-  # trend_icon(measure('ncloc'))
-  # trend_icon('ncloc', :empty => true)
+  # Unsupported since version 5.2
   #
   def trend_icon(metric_or_measure, options={})
-    m=nil
-    if metric_or_measure.is_a? ProjectMeasure
-      m = metric_or_measure
-    elsif @snapshot
-      m = @snapshot.measure(metric_or_measure)
-    end
-
-    if m.nil? || m.tendency.nil? || m.tendency==0
-      return options[:empty] ? "<i class=\"icon-trend-0\"></i>" : nil
-    end
-    className = m.tendency.to_s
-
-    if options[:big]
-      className += ' icon-trend-big'
-    end
-
-    case m.tendency_qualitative
-      when 0
-        className += ' icon-black'
-      when -1
-        className += ' icon-red'
-      when 1
-        className += ' icon-green'
-    end
-    "<i class=\"icon-trend-#{className}\"></i>"
+    return options[:empty] ? "<i class=\"icon-trend-0\"></i>" : nil
   end
 
   #
index ec76730db5013b98c1919ccd0edeb5dd8fd797e7..83b50b73d7f974f3bf997c101bb41da228d484e2 100644 (file)
@@ -51,7 +51,7 @@ module ComponentsHelper
     elsif column.metric_column?
       measure = item_by_metric_id(measures_by_snapshot[snapshot], column.id )
       measure_param = measure.value if measure
-      content = format_measure(measure) + trend_icon(measure, :empty => true)
+      content = format_measure(measure)
     end
 
     "<#{html_node} #{"nowrap='nowrap'" if nowrap} #{"x='#{measure_param}'" if measure_param} class='right'><span class='no-transform'>" + content + "</span></#{html_node}>"
index 294eda12107ea1e344183d5bb162c8235157982e..ac2d7e536de4d1b60719cac0a8af29dd9c49f2e1 100644 (file)
@@ -43,8 +43,6 @@ module MeasuresHelper
         else
           format_variation(measure, :index => column.period, :style => 'light')
         end
-      elsif column.metric.numeric?
-        format_measure(measure) + ' ' + trend_icon(measure, :empty => true)
       else
         format_measure(measure) + ' '
       end
index ca542e4b6874d5a6a4a89922e1e2bd587957ebd2..c85fcbb789a6edffd3a79ced250c03862dfee93d 100644 (file)
@@ -260,13 +260,8 @@ class ProjectMeasure < ActiveRecord::Base
   end
 
   def tendency_qualitative
-    if !metric.qualitative? || tendency.nil? || tendency==0 || metric.direction==0
-      0
-    elsif tendency>0
-      metric.direction>0 ? 1 : -1
-    else
-      metric.direction<0 ? 1 : -1
-    end
+    # unsupported since version 5.2
+    0
   end
 
   def <=>(other)
index 3d40a55e9a55c67da03859aa6612d24d20166311..434e5676cbb574b3334ca16a6192efda2de714a8 100644 (file)
@@ -36,9 +36,6 @@ public class Measure extends Model {
   private String characteristicKey;
   private String characteristicName;
 
-  private Integer trend;
-  private Integer var;
-
   private String ruleKey;
   private String ruleName;
   private String ruleSeverity;
@@ -164,26 +161,6 @@ public class Measure extends Model {
     return this;
   }
 
-  @CheckForNull
-  public Integer getTrend() {
-    return trend;
-  }
-
-  public Measure setTrend(@Nullable Integer trend) {
-    this.trend = trend;
-    return this;
-  }
-
-  @CheckForNull
-  public Integer getVar() {
-    return var;
-  }
-
-  public Measure setVar(@Nullable Integer var) {
-    this.var = var;
-    return this;
-  }
-
   @CheckForNull
   public String getRuleKey() {
     return ruleKey;
@@ -371,7 +348,6 @@ public class Measure extends Model {
         .append(", data='").append(data).append('\'')
         .append(", characteristicKey='").append(characteristicKey).append('\'')
         .append(", characteristicName='").append(characteristicName).append('\'')
-        .append(", trend=").append(trend).append(", var=").append(var)
         .append(", ruleKey='").append(ruleKey).append('\'')
         .append(", ruleName='").append(ruleName).append('\'')
         .append(", ruleCategory='").append(ruleCategory).append('\'')
index e216ced61374f7ff3d5530fd2a90598fd0f788ff..c4cbdb64d29f7fb977a841f7c41090348bbf6db6 100644 (file)
@@ -100,8 +100,6 @@ public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
         .setFormattedValue(utils.getString(json, "frmt_val"))
         .setAlertStatus(utils.getString(json, "alert"))
         .setAlertText(utils.getString(json, "alert_text"))
-        .setTrend(utils.getInteger(json, "trend"))
-        .setVar(utils.getInteger(json, "var"))
         .setData(utils.getString(json, "data"))
         .setRuleKey(utils.getString(json, "rule_key"))
         .setRuleName(utils.getString(json, "rule_name"))
index cc2f1f64faf0da5df91fab48c2d16ea745377522..271ad82ec96e20943c9d55925af034b116bf451d 100644 (file)
@@ -52,20 +52,6 @@ public class ResourceUnmarshallerTest extends UnmarshallerTestCase {
     assertThat(resource.getMeasureIntValue("unknown"), nullValue());
   }
 
-  @Test
-  public void singleResourceWithTrends() {
-    Resource resource = new ResourceUnmarshaller().toModel(loadFile("/resources/single-resource-with-trends.json"));
-    assertSonar(resource);
-
-    assertThat(resource.getMeasures().size(), is(2));
-    assertThat(resource.getMeasureIntValue("lines"), is(47798));
-    assertThat(resource.getMeasureIntValue("ncloc"), is(27066));
-    assertThat(resource.getMeasure("lines").getTrend(), is(0));
-    assertThat(resource.getMeasure("lines").getVar(), is(2));
-    assertThat(resource.getMeasure("ncloc").getTrend(), is(1));
-    assertThat(resource.getMeasure("ncloc").getVar(), is(1));
-  }
-
   @Test
   public void manyResources() {
     List<Resource> resources = new ResourceUnmarshaller().toModels(loadFile("/resources/many-resources.json"));
diff --git a/server/sonar-ws-client/src/test/resources/resources/single-resource-with-trends.json b/server/sonar-ws-client/src/test/resources/resources/single-resource-with-trends.json
deleted file mode 100644 (file)
index a29048a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-[
-  {
-    "id":48569,
-    "key":"org.codehaus.sonar:sonar",
-    "name":"Sonar",
-    "scope":"PRJ",
-    "qualifier":"TRK",
-    "date":"2010-01-01T22:27:25+0000",
-    "creationDate":"2009-01-01T22:27:25+0000",
-    "lang":"java",
-    "version":"1.13-SNAPSHOT",
-    "description":"Embrace Quality",
-    "msr":[
-      {
-        "key":"lines",
-        "val":47798.0,
-        "frmt_val":"47,798",
-        "trend":0,
-        "var":2
-      },
-      {
-        "key":"ncloc",
-        "val":27066.0,
-        "frmt_val":"27,066",
-        "trend":1,
-        "var":1
-      }
-    ]
-  }
-]
\ No newline at end of file
index 14a4027df77fe721b271d4257aa2b952a2428668..0bdc5dc7df30a35762690f119b73215de56e0909 100644 (file)
@@ -5501,15 +5501,6 @@ public final class BatchReport {
      */
     double getVariationValue5();
 
-    /**
-     * <code>optional int32 tendency = 19;</code>
-     */
-    boolean hasTendency();
-    /**
-     * <code>optional int32 tendency = 19;</code>
-     */
-    int getTendency();
-
     /**
      * <code>optional int32 characteric_id = 20;</code>
      */
@@ -5683,18 +5674,13 @@ public final class BatchReport {
               variationValue5_ = input.readDouble();
               break;
             }
-            case 152: {
-              bitField0_ |= 0x00020000;
-              tendency_ = input.readInt32();
-              break;
-            }
             case 160: {
-              bitField0_ |= 0x00040000;
+              bitField0_ |= 0x00020000;
               charactericId_ = input.readInt32();
               break;
             }
             case 168: {
-              bitField0_ |= 0x00080000;
+              bitField0_ |= 0x00040000;
               personId_ = input.readInt32();
               break;
             }
@@ -6175,28 +6161,13 @@ public final class BatchReport {
       return variationValue5_;
     }
 
-    public static final int TENDENCY_FIELD_NUMBER = 19;
-    private int tendency_;
-    /**
-     * <code>optional int32 tendency = 19;</code>
-     */
-    public boolean hasTendency() {
-      return ((bitField0_ & 0x00020000) == 0x00020000);
-    }
-    /**
-     * <code>optional int32 tendency = 19;</code>
-     */
-    public int getTendency() {
-      return tendency_;
-    }
-
     public static final int CHARACTERIC_ID_FIELD_NUMBER = 20;
     private int charactericId_;
     /**
      * <code>optional int32 characteric_id = 20;</code>
      */
     public boolean hasCharactericId() {
-      return ((bitField0_ & 0x00040000) == 0x00040000);
+      return ((bitField0_ & 0x00020000) == 0x00020000);
     }
     /**
      * <code>optional int32 characteric_id = 20;</code>
@@ -6211,7 +6182,7 @@ public final class BatchReport {
      * <code>optional int32 person_id = 21;</code>
      */
     public boolean hasPersonId() {
-      return ((bitField0_ & 0x00080000) == 0x00080000);
+      return ((bitField0_ & 0x00040000) == 0x00040000);
     }
     /**
      * <code>optional int32 person_id = 21;</code>
@@ -6238,7 +6209,6 @@ public final class BatchReport {
       variationValue3_ = 0D;
       variationValue4_ = 0D;
       variationValue5_ = 0D;
-      tendency_ = 0;
       charactericId_ = 0;
       personId_ = 0;
     }
@@ -6307,12 +6277,9 @@ public final class BatchReport {
         output.writeDouble(18, variationValue5_);
       }
       if (((bitField0_ & 0x00020000) == 0x00020000)) {
-        output.writeInt32(19, tendency_);
-      }
-      if (((bitField0_ & 0x00040000) == 0x00040000)) {
         output.writeInt32(20, charactericId_);
       }
-      if (((bitField0_ & 0x00080000) == 0x00080000)) {
+      if (((bitField0_ & 0x00040000) == 0x00040000)) {
         output.writeInt32(21, personId_);
       }
       getUnknownFields().writeTo(output);
@@ -6393,14 +6360,10 @@ public final class BatchReport {
           .computeDoubleSize(18, variationValue5_);
       }
       if (((bitField0_ & 0x00020000) == 0x00020000)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(19, tendency_);
-      }
-      if (((bitField0_ & 0x00040000) == 0x00040000)) {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(20, charactericId_);
       }
-      if (((bitField0_ & 0x00080000) == 0x00080000)) {
+      if (((bitField0_ & 0x00040000) == 0x00040000)) {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(21, personId_);
       }
@@ -6555,12 +6518,10 @@ public final class BatchReport {
         bitField0_ = (bitField0_ & ~0x00008000);
         variationValue5_ = 0D;
         bitField0_ = (bitField0_ & ~0x00010000);
-        tendency_ = 0;
-        bitField0_ = (bitField0_ & ~0x00020000);
         charactericId_ = 0;
-        bitField0_ = (bitField0_ & ~0x00040000);
+        bitField0_ = (bitField0_ & ~0x00020000);
         personId_ = 0;
-        bitField0_ = (bitField0_ & ~0x00080000);
+        bitField0_ = (bitField0_ & ~0x00040000);
         return this;
       }
 
@@ -6660,14 +6621,10 @@ public final class BatchReport {
         if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
           to_bitField0_ |= 0x00020000;
         }
-        result.tendency_ = tendency_;
+        result.charactericId_ = charactericId_;
         if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
           to_bitField0_ |= 0x00040000;
         }
-        result.charactericId_ = charactericId_;
-        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
-          to_bitField0_ |= 0x00080000;
-        }
         result.personId_ = personId_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -6748,9 +6705,6 @@ public final class BatchReport {
         if (other.hasVariationValue5()) {
           setVariationValue5(other.getVariationValue5());
         }
-        if (other.hasTendency()) {
-          setTendency(other.getTendency());
-        }
         if (other.hasCharactericId()) {
           setCharactericId(other.getCharactericId());
         }
@@ -7638,44 +7592,12 @@ public final class BatchReport {
         return this;
       }
 
-      private int tendency_ ;
-      /**
-       * <code>optional int32 tendency = 19;</code>
-       */
-      public boolean hasTendency() {
-        return ((bitField0_ & 0x00020000) == 0x00020000);
-      }
-      /**
-       * <code>optional int32 tendency = 19;</code>
-       */
-      public int getTendency() {
-        return tendency_;
-      }
-      /**
-       * <code>optional int32 tendency = 19;</code>
-       */
-      public Builder setTendency(int value) {
-        bitField0_ |= 0x00020000;
-        tendency_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional int32 tendency = 19;</code>
-       */
-      public Builder clearTendency() {
-        bitField0_ = (bitField0_ & ~0x00020000);
-        tendency_ = 0;
-        onChanged();
-        return this;
-      }
-
       private int charactericId_ ;
       /**
        * <code>optional int32 characteric_id = 20;</code>
        */
       public boolean hasCharactericId() {
-        return ((bitField0_ & 0x00040000) == 0x00040000);
+        return ((bitField0_ & 0x00020000) == 0x00020000);
       }
       /**
        * <code>optional int32 characteric_id = 20;</code>
@@ -7687,7 +7609,7 @@ public final class BatchReport {
        * <code>optional int32 characteric_id = 20;</code>
        */
       public Builder setCharactericId(int value) {
-        bitField0_ |= 0x00040000;
+        bitField0_ |= 0x00020000;
         charactericId_ = value;
         onChanged();
         return this;
@@ -7696,7 +7618,7 @@ public final class BatchReport {
        * <code>optional int32 characteric_id = 20;</code>
        */
       public Builder clearCharactericId() {
-        bitField0_ = (bitField0_ & ~0x00040000);
+        bitField0_ = (bitField0_ & ~0x00020000);
         charactericId_ = 0;
         onChanged();
         return this;
@@ -7707,7 +7629,7 @@ public final class BatchReport {
        * <code>optional int32 person_id = 21;</code>
        */
       public boolean hasPersonId() {
-        return ((bitField0_ & 0x00080000) == 0x00080000);
+        return ((bitField0_ & 0x00040000) == 0x00040000);
       }
       /**
        * <code>optional int32 person_id = 21;</code>
@@ -7719,7 +7641,7 @@ public final class BatchReport {
        * <code>optional int32 person_id = 21;</code>
        */
       public Builder setPersonId(int value) {
-        bitField0_ |= 0x00080000;
+        bitField0_ |= 0x00040000;
         personId_ = value;
         onChanged();
         return this;
@@ -7728,7 +7650,7 @@ public final class BatchReport {
        * <code>optional int32 person_id = 21;</code>
        */
       public Builder clearPersonId() {
-        bitField0_ = (bitField0_ & ~0x00080000);
+        bitField0_ = (bitField0_ & ~0x00040000);
         personId_ = 0;
         onChanged();
         return this;
@@ -25967,7 +25889,7 @@ public final class BatchReport {
       "\020\001\022\034\n\004link\030\n \003(\0132\016.ComponentLink\022\017\n\007vers" +
       "ion\030\014 \001(\t\022\013\n\003key\030\016 \001(\t\022\r\n\005lines\030\017 \001(\005\022\n\n" +
       "\002id\030\r \001(\003\022\023\n\013snapshot_id\030\010 \001(\003\022\014\n\004uuid\030\t" +
-      " \001(\t\022\025\n\005event\030\013 \003(\0132\006.Event\"\340\003\n\007Measure\022" +
+      " \001(\t\022\025\n\005event\030\013 \003(\0132\006.Event\"\316\003\n\007Measure\022" +
       "%\n\nvalue_type\030\001 \001(\0162\021.MeasureValueType\022\025" +
       "\n\rboolean_value\030\002 \001(\010\022\021\n\tint_value\030\003 \001(\005" +
       "\022\022\n\nlong_value\030\004 \001(\003\022\024\n\014double_value\030\005 \001",
@@ -25978,62 +25900,61 @@ public final class BatchReport {
       "riation_value_1\030\016 \001(\001\022\031\n\021variation_value" +
       "_2\030\017 \001(\001\022\031\n\021variation_value_3\030\020 \001(\001\022\031\n\021v" +
       "ariation_value_4\030\021 \001(\001\022\031\n\021variation_valu" +
-      "e_5\030\022 \001(\001\022\020\n\010tendency\030\023 \001(\005\022\026\n\016character" +
-      "ic_id\030\024 \001(\005\022\021\n\tperson_id\030\025 \001(\005\"<\n\010Measur" +
-      "es\022\025\n\rcomponent_ref\030\001 \001(\005\022\031\n\007measure\030\002 \003",
-      "(\0132\010.Measure\"\231\004\n\005Issue\022\027\n\017rule_repositor" +
-      "y\030\001 \001(\t\022\020\n\010rule_key\030\002 \001(\t\022\014\n\004line\030\003 \001(\005\022" +
-      "\013\n\003msg\030\004 \001(\t\022\033\n\010severity\030\005 \001(\0162\t.Severit" +
-      "y\022\013\n\003tag\030\006 \003(\t\022\025\n\reffort_to_fix\030\007 \001(\001\022\016\n" +
-      "\006is_new\030\010 \001(\010\022\014\n\004uuid\030\t \001(\t\022\027\n\017debt_in_m" +
-      "inutes\030\n \001(\003\022\022\n\nresolution\030\013 \001(\t\022\016\n\006stat" +
-      "us\030\014 \001(\t\022\020\n\010checksum\030\r \001(\t\022\027\n\017manual_sev" +
-      "erity\030\016 \001(\010\022\020\n\010reporter\030\017 \001(\t\022\020\n\010assigne" +
-      "e\030\020 \001(\t\022\027\n\017action_plan_key\030\021 \001(\t\022\022\n\nattr" +
-      "ibutes\030\022 \001(\t\022\024\n\014author_login\030\023 \001(\t\022\025\n\rcr",
-      "eation_date\030\024 \001(\003\022\022\n\nclose_date\030\025 \001(\003\022\023\n" +
-      "\013update_date\030\026 \001(\003\022\023\n\013selected_at\030\027 \001(\003\022" +
-      "\023\n\013diff_fields\030\030 \001(\t\022\022\n\nis_changed\030\031 \001(\010" +
-      "\022\036\n\026must_send_notification\030\032 \001(\010\"N\n\006Issu" +
-      "es\022\025\n\rcomponent_ref\030\001 \001(\005\022\025\n\005issue\030\002 \003(\013" +
-      "2\006.Issue\022\026\n\016component_uuid\030\003 \001(\t\"\254\001\n\nCha" +
-      "ngesets\022\025\n\rcomponent_ref\030\001 \001(\005\022(\n\tchange" +
-      "set\030\002 \003(\0132\025.Changesets.Changeset\022 \n\024chan" +
-      "gesetIndexByLine\030\003 \003(\005B\002\020\001\032;\n\tChangeset\022" +
-      "\020\n\010revision\030\001 \001(\t\022\016\n\006author\030\002 \001(\t\022\014\n\004dat",
-      "e\030\003 \001(\003\"R\n\tDuplicate\022\026\n\016other_file_ref\030\001" +
-      " \001(\005\022\025\n\005range\030\002 \001(\0132\006.Range\022\026\n\016other_fil" +
-      "e_key\030\003 \001(\t\"M\n\013Duplication\022\037\n\017origin_pos" +
-      "ition\030\001 \001(\0132\006.Range\022\035\n\tduplicate\030\002 \003(\0132\n" +
-      ".Duplicate\"H\n\014Duplications\022\025\n\rcomponent_" +
-      "ref\030\001 \001(\005\022!\n\013duplication\030\002 \003(\0132\014.Duplica" +
-      "tion\"W\n\005Range\022\022\n\nstart_line\030\001 \001(\005\022\020\n\010end" +
-      "_line\030\002 \001(\005\022\024\n\014start_offset\030\003 \001(\005\022\022\n\nend" +
-      "_offset\030\004 \001(\005\"~\n\007Symbols\022\020\n\010file_ref\030\001 \001" +
-      "(\005\022\037\n\006symbol\030\002 \003(\0132\017.Symbols.Symbol\032@\n\006S",
-      "ymbol\022\033\n\013declaration\030\001 \001(\0132\006.Range\022\031\n\tre" +
-      "ference\030\002 \003(\0132\006.Range\"\260\001\n\010Coverage\022\014\n\004li" +
-      "ne\030\001 \001(\005\022\022\n\nconditions\030\002 \001(\005\022\017\n\007ut_hits\030" +
-      "\003 \001(\010\022\017\n\007it_hits\030\004 \001(\010\022\035\n\025ut_covered_con" +
-      "ditions\030\005 \001(\005\022\035\n\025it_covered_conditions\030\006" +
-      " \001(\005\022\"\n\032overall_covered_conditions\030\007 \001(\005" +
-      "\"L\n\022SyntaxHighlighting\022\025\n\005range\030\001 \001(\0132\006." +
-      "Range\022\037\n\004type\030\002 \001(\0162\021.HighlightingType\"\203" +
-      "\001\n\004Test\022\014\n\004name\030\001 \001(\t\022\027\n\004type\030\002 \001(\0162\t.Te" +
-      "stType\022\033\n\006status\030\003 \001(\0162\013.TestStatus\022\026\n\016d",
-      "uration_in_ms\030\004 \001(\003\022\022\n\nstacktrace\030\005 \001(\t\022" +
-      "\013\n\003msg\030\006 \001(\t\"\221\001\n\016CoverageDetail\022\021\n\ttest_" +
-      "name\030\001 \001(\t\0221\n\014covered_file\030\002 \003(\0132\033.Cover" +
-      "ageDetail.CoveredFile\0329\n\013CoveredFile\022\020\n\010" +
-      "file_ref\030\001 \001(\005\022\030\n\014covered_line\030\002 \003(\005B\002\020\001" +
-      "\"5\n\016FileDependency\022\023\n\013to_file_ref\030\001 \001(\005\022" +
-      "\016\n\006weight\030\002 \001(\005\"\275\001\n\022ModuleDependencies\0221" +
-      "\n\003dep\030\001 \003(\0132$.ModuleDependencies.ModuleD" +
-      "ependency\032t\n\020ModuleDependency\022\013\n\003key\030\001 \001" +
-      "(\t\022\017\n\007version\030\002 \001(\t\022\r\n\005scope\030\003 \001(\t\0223\n\005ch",
-      "ild\030\004 \003(\0132$.ModuleDependencies.ModuleDep" +
-      "endencyB#\n\037org.sonar.batch.protocol.outp" +
-      "utH\001"
+      "e_5\030\022 \001(\001\022\026\n\016characteric_id\030\024 \001(\005\022\021\n\tper" +
+      "son_id\030\025 \001(\005\"<\n\010Measures\022\025\n\rcomponent_re" +
+      "f\030\001 \001(\005\022\031\n\007measure\030\002 \003(\0132\010.Measure\"\231\004\n\005I",
+      "ssue\022\027\n\017rule_repository\030\001 \001(\t\022\020\n\010rule_ke" +
+      "y\030\002 \001(\t\022\014\n\004line\030\003 \001(\005\022\013\n\003msg\030\004 \001(\t\022\033\n\010se" +
+      "verity\030\005 \001(\0162\t.Severity\022\013\n\003tag\030\006 \003(\t\022\025\n\r" +
+      "effort_to_fix\030\007 \001(\001\022\016\n\006is_new\030\010 \001(\010\022\014\n\004u" +
+      "uid\030\t \001(\t\022\027\n\017debt_in_minutes\030\n \001(\003\022\022\n\nre" +
+      "solution\030\013 \001(\t\022\016\n\006status\030\014 \001(\t\022\020\n\010checks" +
+      "um\030\r \001(\t\022\027\n\017manual_severity\030\016 \001(\010\022\020\n\010rep" +
+      "orter\030\017 \001(\t\022\020\n\010assignee\030\020 \001(\t\022\027\n\017action_" +
+      "plan_key\030\021 \001(\t\022\022\n\nattributes\030\022 \001(\t\022\024\n\014au" +
+      "thor_login\030\023 \001(\t\022\025\n\rcreation_date\030\024 \001(\003\022",
+      "\022\n\nclose_date\030\025 \001(\003\022\023\n\013update_date\030\026 \001(\003" +
+      "\022\023\n\013selected_at\030\027 \001(\003\022\023\n\013diff_fields\030\030 \001" +
+      "(\t\022\022\n\nis_changed\030\031 \001(\010\022\036\n\026must_send_noti" +
+      "fication\030\032 \001(\010\"N\n\006Issues\022\025\n\rcomponent_re" +
+      "f\030\001 \001(\005\022\025\n\005issue\030\002 \003(\0132\006.Issue\022\026\n\016compon" +
+      "ent_uuid\030\003 \001(\t\"\254\001\n\nChangesets\022\025\n\rcompone" +
+      "nt_ref\030\001 \001(\005\022(\n\tchangeset\030\002 \003(\0132\025.Change" +
+      "sets.Changeset\022 \n\024changesetIndexByLine\030\003" +
+      " \003(\005B\002\020\001\032;\n\tChangeset\022\020\n\010revision\030\001 \001(\t\022" +
+      "\016\n\006author\030\002 \001(\t\022\014\n\004date\030\003 \001(\003\"R\n\tDuplica",
+      "te\022\026\n\016other_file_ref\030\001 \001(\005\022\025\n\005range\030\002 \001(" +
+      "\0132\006.Range\022\026\n\016other_file_key\030\003 \001(\t\"M\n\013Dup" +
+      "lication\022\037\n\017origin_position\030\001 \001(\0132\006.Rang" +
+      "e\022\035\n\tduplicate\030\002 \003(\0132\n.Duplicate\"H\n\014Dupl" +
+      "ications\022\025\n\rcomponent_ref\030\001 \001(\005\022!\n\013dupli" +
+      "cation\030\002 \003(\0132\014.Duplication\"W\n\005Range\022\022\n\ns" +
+      "tart_line\030\001 \001(\005\022\020\n\010end_line\030\002 \001(\005\022\024\n\014sta" +
+      "rt_offset\030\003 \001(\005\022\022\n\nend_offset\030\004 \001(\005\"~\n\007S" +
+      "ymbols\022\020\n\010file_ref\030\001 \001(\005\022\037\n\006symbol\030\002 \003(\013" +
+      "2\017.Symbols.Symbol\032@\n\006Symbol\022\033\n\013declarati",
+      "on\030\001 \001(\0132\006.Range\022\031\n\treference\030\002 \003(\0132\006.Ra" +
+      "nge\"\260\001\n\010Coverage\022\014\n\004line\030\001 \001(\005\022\022\n\ncondit" +
+      "ions\030\002 \001(\005\022\017\n\007ut_hits\030\003 \001(\010\022\017\n\007it_hits\030\004" +
+      " \001(\010\022\035\n\025ut_covered_conditions\030\005 \001(\005\022\035\n\025i" +
+      "t_covered_conditions\030\006 \001(\005\022\"\n\032overall_co" +
+      "vered_conditions\030\007 \001(\005\"L\n\022SyntaxHighligh" +
+      "ting\022\025\n\005range\030\001 \001(\0132\006.Range\022\037\n\004type\030\002 \001(" +
+      "\0162\021.HighlightingType\"\203\001\n\004Test\022\014\n\004name\030\001 " +
+      "\001(\t\022\027\n\004type\030\002 \001(\0162\t.TestType\022\033\n\006status\030\003" +
+      " \001(\0162\013.TestStatus\022\026\n\016duration_in_ms\030\004 \001(",
+      "\003\022\022\n\nstacktrace\030\005 \001(\t\022\013\n\003msg\030\006 \001(\t\"\221\001\n\016C" +
+      "overageDetail\022\021\n\ttest_name\030\001 \001(\t\0221\n\014cove" +
+      "red_file\030\002 \003(\0132\033.CoverageDetail.CoveredF" +
+      "ile\0329\n\013CoveredFile\022\020\n\010file_ref\030\001 \001(\005\022\030\n\014" +
+      "covered_line\030\002 \003(\005B\002\020\001\"5\n\016FileDependency" +
+      "\022\023\n\013to_file_ref\030\001 \001(\005\022\016\n\006weight\030\002 \001(\005\"\275\001" +
+      "\n\022ModuleDependencies\0221\n\003dep\030\001 \003(\0132$.Modu" +
+      "leDependencies.ModuleDependency\032t\n\020Modul" +
+      "eDependency\022\013\n\003key\030\001 \001(\t\022\017\n\007version\030\002 \001(" +
+      "\t\022\r\n\005scope\030\003 \001(\t\0223\n\005child\030\004 \003(\0132$.Module",
+      "Dependencies.ModuleDependencyB#\n\037org.son" +
+      "ar.batch.protocol.outputH\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
         new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
@@ -26077,7 +25998,7 @@ public final class BatchReport {
     internal_static_Measure_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessage.FieldAccessorTable(
         internal_static_Measure_descriptor,
-        new java.lang.String[] { "ValueType", "BooleanValue", "IntValue", "LongValue", "DoubleValue", "StringValue", "MetricKey", "Description", "RuleKey", "Severity", "AlertStatus", "AlertText", "VariationValue1", "VariationValue2", "VariationValue3", "VariationValue4", "VariationValue5", "Tendency", "CharactericId", "PersonId", });
+        new java.lang.String[] { "ValueType", "BooleanValue", "IntValue", "LongValue", "DoubleValue", "StringValue", "MetricKey", "Description", "RuleKey", "Severity", "AlertStatus", "AlertText", "VariationValue1", "VariationValue2", "VariationValue3", "VariationValue4", "VariationValue5", "CharactericId", "PersonId", });
     internal_static_Measures_descriptor =
       getDescriptor().getMessageTypes().get(5);
     internal_static_Measures_fieldAccessorTable = new
index 02af18c8520f23965580de267cbb608a2c97af66..9a955eb13238741267951abe10212db365905c9d 100644 (file)
@@ -108,9 +108,8 @@ message Measure {
   optional double variation_value_3 = 16;
   optional double variation_value_4 = 17;
   optional double variation_value_5 = 18;
-  optional int32 tendency = 19;
-  optional int32 characteric_id = 20;
-  optional int32 person_id = 21;
+  optional int32 characteric_id = 19;
+  optional int32 person_id = 20;
 }
 
 message Measures {
index c077a0608616f45d72543b22776e57d00e9b7812..35a47982461661c25994a2d04f32bc08f476591e 100644 (file)
@@ -59,7 +59,7 @@ public class DefaultTimeMachine implements TimeMachine {
   public List<Measure> getMeasures(TimeMachineQuery query) {
     Map<Integer, Metric> metricById = getMetricsById(query);
 
-    List<Object[]> objects = execute(query, true, metricById.keySet());
+    List<Object[]> objects = execute(query, metricById.keySet());
     List<Measure> result = Lists.newArrayList();
 
     for (Object[] object : objects) {
@@ -75,15 +75,10 @@ public class DefaultTimeMachine implements TimeMachine {
 
   @Override
   public List<Object[]> getMeasuresFields(TimeMachineQuery query) {
-    Map<Integer, Metric> metricById = getMetricsById(query);
-    List<Object[]> rows = execute(query, false, metricById.keySet());
-    for (Object[] fields : rows) {
-      fields[1] = metricById.get(fields[1]);
-    }
-    return rows;
+    return Collections.emptyList();
   }
 
-  protected List<Object[]> execute(TimeMachineQuery query, boolean selectAllFields, Set<Integer> metricIds) {
+  protected List<Object[]> execute(TimeMachineQuery query, Set<Integer> metricIds) {
     Resource resource = query.getResource();
     if (resource != null && resource.getId() == null) {
       resource = index.getResource(query.getResource());
@@ -95,11 +90,7 @@ public class DefaultTimeMachine implements TimeMachine {
     StringBuilder sb = new StringBuilder();
     Map<String, Object> params = Maps.newHashMap();
 
-    if (selectAllFields) {
-      sb.append("SELECT m, s.createdAt ");
-    } else {
-      sb.append("SELECT s.createdAt, m.metricId, m.value ");
-    }
+    sb.append("SELECT m, s.createdAt ");
     sb.append(" FROM ")
       .append(MeasureModel.class.getSimpleName())
       .append(" m, ")
@@ -163,7 +154,6 @@ public class DefaultTimeMachine implements TimeMachine {
     measure.setData(model.getData(metric));
     measure.setAlertStatus(model.getAlertStatus());
     measure.setAlertText(model.getAlertText());
-    measure.setTendency(model.getTendency());
     measure.setVariation1(model.getVariationValue1());
     measure.setVariation2(model.getVariationValue2());
     measure.setVariation3(model.getVariationValue3());
index b235129693f6ca07e73d2f10998df37b8d9bc462..3cab5d098c8db56aefefcac9ad7bd7ead85eaa0d 100644 (file)
@@ -37,7 +37,6 @@ import static org.sonar.api.utils.DateUtils.dateToLong;
 
 public class PeriodsDefinition implements BatchComponent {
 
-  public static final int CORE_TENDENCY_DEPTH_DEFAULT_VALUE = 30;
   private static final int NUMBER_OF_VARIATION_SNAPSHOTS = 5;
 
   private DatabaseSession session;
index 0613432376b5056cf6a990e3ef639322cc47488e..8c68e6b787fe3e1c39c198cc9d4605c75e846691 100644 (file)
@@ -153,10 +153,6 @@ public class MeasuresPublisher implements ReportPublisherStep {
     if (variation5 != null) {
       builder.setVariationValue5(variation5);
     }
-    Integer tendency = measure.getTendency();
-    if (tendency != null) {
-      builder.setTendency(tendency);
-    }
     Characteristic charac = measure.getCharacteristic();
     if (charac != null) {
       builder.setCharactericId(charac.id());
index 8bb5a91081f5f987343394eb169edd14f4cabd09..e7dae02780dc95baba06ac438c055d7ad7f4eb4b 100644 (file)
@@ -51,7 +51,6 @@ class MeasureValueCoder implements ValueCoder {
     putUTFOrNull(value, m.getDescription());
     value.putString(m.getAlertStatus() != null ? m.getAlertStatus().name() : null);
     putUTFOrNull(value, m.getAlertText());
-    value.put(m.getTendency());
     value.putDate(m.getDate());
     value.put(m.getVariation1());
     value.put(m.getVariation2());
@@ -91,7 +90,6 @@ class MeasureValueCoder implements ValueCoder {
     m.setDescription(value.getString());
     m.setAlertStatus(value.isNull(true) ? null : Metric.Level.valueOf(value.getString()));
     m.setAlertText(value.getString());
-    m.setTendency(value.isNull(true) ? null : value.getInt());
     m.setDate(value.getDate());
     m.setVariation1(value.isNull(true) ? null : value.getDouble());
     m.setVariation2(value.isNull(true) ? null : value.getDouble());
index 3089a67cbeee1a1c8a59cbcbdce7a63261d059b1..74389bc046684f4959beab61ae1b04e2303b1595 100644 (file)
@@ -86,7 +86,6 @@ public class MeasuresPublisherTest {
       .setValue(2.0)
       .setAlertStatus(Level.ERROR)
       .setAlertText("Foo")
-      .setTendency(-1)
       .setCharacteristic(mock(Characteristic.class))
       .setPersonId(2);
     // No value on new_xxx
index 7aa5c49856d50cae9cad3db24586bb4612d5bb5d..fce979b23c409af1d8e0a6c41b0418c845eebc40 100644 (file)
@@ -296,7 +296,6 @@ public class MeasureCacheTest {
     when(r.id()).thenReturn(7);
     when(techDebtModel.requirementsById(7)).thenReturn(r);
     measure.setRequirement(r);
-    measure.setTendency(4);
     measure.setUrl("http://foo");
     measure.setVariation1(11.0);
     measure.setVariation2(12.0);
index e037b59ede723debb220be02dc4a4e1283fc8dd0..990e8dfd512a51d6f59d069cc2af039a29bea6de 100644 (file)
@@ -36,7 +36,6 @@ public class MeasureDto {
   private Double value;
   private String textValue;
   private byte[] dataValue;
-  private Integer tendency;
   private Double variation1, variation2, variation3, variation4, variation5;
   private String alertStatus;
   private String alertText;
@@ -137,16 +136,6 @@ public class MeasureDto {
     return this;
   }
 
-  @CheckForNull
-  public Integer getTendency() {
-    return tendency;
-  }
-
-  public MeasureDto setTendency(@Nullable Integer tendency) {
-    this.tendency = tendency;
-    return this;
-  }
-
   @CheckForNull
   public String getAlertStatus() {
     return alertStatus;
index 8b9500661cccc717ea022693d31ee557447e7665..4a65b908e35e83566607731e6e3855e1021657bc 100644 (file)
 
   <insert id="insert" parameterType="Measure" useGeneratedKeys="false">
     INSERT INTO project_measures (
-    value, metric_id, snapshot_id, rule_id, text_value, tendency, project_id, alert_status, alert_text, description,
+    value, metric_id, snapshot_id, rule_id, text_value, project_id, alert_status, alert_text, description,
     rule_priority, characteristic_id, person_id, variation_value_1, variation_value_2, variation_value_3, variation_value_4,
     variation_value_5, measure_data)
     VALUES (
     #{value, jdbcType=DOUBLE}, #{metricId, jdbcType=INTEGER}, #{snapshotId, jdbcType=INTEGER},
-    #{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR}, #{tendency, jdbcType=INTEGER},
+    #{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR},
     #{projectId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR},
     #{description, jdbcType=VARCHAR}, #{severityIndex, jdbcType=INTEGER}, #{characteristicId, jdbcType=INTEGER},
     #{personId, jdbcType=INTEGER}, #{variation1, jdbcType=DOUBLE}, #{variation2, jdbcType=DOUBLE}, #{variation3, jdbcType=DOUBLE},
index 6289dd9cb2d4e571534313e01b9ec769e40aaffa..710de16c3c565d4b56070d1950244591da1f5a5c 100644 (file)
@@ -110,7 +110,7 @@ public interface DecoratorBarriers {
 
   /**
    * Any kinds of time machine data are calculated before this barrier. Decorators executed after this barrier can use
-   * Measure#getVariationValue() and Measure#getTendency() methods.
+   * Measure#getVariationValue() method.
    *
    * @since 2.5
    */
index eb6341b5135f1527cbe643a34b8a1b795eb81143..81ffb504294b8bf6b2ab9d39a98e35ff8baec072 100644 (file)
@@ -42,10 +42,7 @@ public interface TimeMachine extends BatchComponent {
   List<Measure> getMeasures(TimeMachineQuery query);
 
   /**
-   * Past measures sorted by date. Return only a subset of basic fields : [date (java.util.Date), metric (org.sonar.api.measures.Metric), value (Double)].
-   * <p/>
-   * <p>Measures of current analysis are not included.</p>
-   * <p>This method is recommended instead of getMeasures() for performance reasons. It needs less memory.</p>
+   * Return an empty list since 5.2. See https://jira.codehaus.org/browse/SONAR-6392
    */
   List<Object[]> getMeasuresFields(TimeMachineQuery query);
 
index fdf32504847f1f13e757fa85db525e8e9a84337c..7725d50ce493b44497602168cee1b901cd329d4d 100644 (file)
@@ -27,6 +27,7 @@ import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.measures.Metric;
 import org.sonar.api.rules.RulePriority;
 
+import javax.annotation.CheckForNull;
 import javax.persistence.*;
 
 import java.io.UnsupportedEncodingException;
@@ -51,9 +52,6 @@ public class MeasureModel implements Cloneable {
   @Column(name = "text_value", updatable = true, nullable = true, length = TEXT_VALUE_LENGTH)
   private String textValue;
 
-  @Column(name = "tendency", updatable = true, nullable = true)
-  private Integer tendency;
-
   @Column(name = "metric_id", updatable = false, nullable = false)
   private Integer metricId;
 
@@ -208,19 +206,20 @@ public class MeasureModel implements Cloneable {
   }
 
   /**
-   * @return the measure tendency
+   * Concept of measure trend is dropped. This method always returns {@code null} since version 5.2.
+   * @deprecated since 5.2. See https://jira.codehaus.org/browse/SONAR-6392
+   * @return null
    */
+  @CheckForNull
   public Integer getTendency() {
-    return tendency;
+    return null;
   }
 
   /**
-   * Sets the measure tendency
-   *
-   * @return the current object
+   * Concept of measure trend is dropped. This method does nothing.
+   * @deprecated since 5.2. See https://jira.codehaus.org/browse/SONAR-6392
    */
   public MeasureModel setTendency(Integer tendency) {
-    this.tendency = tendency;
     return this;
   }
 
@@ -468,7 +467,6 @@ public class MeasureModel implements Cloneable {
     clone.setTextValue(getTextValue());
     clone.setAlertStatus(getAlertStatus());
     clone.setAlertText(getAlertText());
-    clone.setTendency(getTendency());
     clone.setVariationValue1(getVariationValue1());
     clone.setVariationValue2(getVariationValue2());
     clone.setVariationValue3(getVariationValue3());
index 0cd77c10ddfa9ec54cc0b670ace33df844a65ebb..260efe3be5537c276e2942d72601d86f25baa851 100644 (file)
@@ -55,7 +55,6 @@ public class Measure<G extends Serializable> implements Serializable {
   protected String description;
   protected Metric.Level alertStatus;
   protected String alertText;
-  protected Integer tendency;
   protected Date date;
   protected Double variation1, variation2, variation3, variation4, variation5;
   protected String url;
@@ -438,22 +437,22 @@ public class Measure<G extends Serializable> implements Serializable {
   }
 
   /**
-   * Gets the measure tendency
-   *
-   * @return the tendency
+   * Concept of measure trend is dropped.
+   * @deprecated since 5.2. See https://jira.codehaus.org/browse/SONAR-6392
+   * @return {@code null} since version 5.2
    */
+  @Deprecated
+  @CheckForNull
   public Integer getTendency() {
-    return tendency;
+    return null;
   }
 
   /**
-   * Sets the tendency for the measure - Internal use only
-   *
-   * @param tendency the tendency
+   * Concept of measure trend is dropped. This method does nothing.
+   * @deprecated since 5.2. See https://jira.codehaus.org/browse/SONAR-6392
    * @return the measure object instance
    */
   public Measure setTendency(@Nullable Integer tendency) {
-    this.tendency = tendency;
     return this;
   }
 
@@ -684,7 +683,7 @@ public class Measure<G extends Serializable> implements Serializable {
     return metric.isOptimizedBestValue() == Boolean.TRUE
       && bestValue != null
       && (value == null || NumberUtils.compare(bestValue, value) == 0)
-      && allNull(alertStatus, description, tendency, url, data)
+      && allNull(alertStatus, description, url, data)
       && isZeroVariation(variation1, variation2, variation3, variation4, variation5);
   }
 
index 6c507bcb34f6042b7bc266ec53bb85f25ab1db8e..ca201e7ca060f7beafb9b6ce7e7a7b6f70d6445a 100644 (file)
@@ -161,7 +161,6 @@ public class RuleMeasure extends Measure {
       .append("description", description)
       .append("alertStatus", alertStatus)
       .append("alertText", alertText)
-      .append("tendency", tendency)
       .append("severity", rulePriority)
       .toString();
   }