]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6827 MeasureDtoToMeasure supports rule and characteristic measures
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 3 Sep 2015 15:46:25 +0000 (17:46 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 7 Sep 2015 15:55:47 +0000 (17:55 +0200)
server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java
server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java
server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepositoryImpl.java
server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureDtoToMeasureTest.java

index 6593c77ef2edd09ab3f090a6af76a039060227b4..3ec8f67d875cdc518299b3ff31f6c7a5b099af08 100644 (file)
@@ -132,7 +132,7 @@ public final class Measure {
     /**
      * Sets the rule this measure is associated to.
      *
-     * @throws UnsupportedOperationException if the characteristicId as already been set
+     * @throws UnsupportedOperationException if the characteristicId has already been set
      *
      * @see #forCharacteristic(int)
      */
@@ -147,7 +147,7 @@ public final class Measure {
     /**
      * Sets the characteristic this measure is associated to.
      *
-     * @throws UnsupportedOperationException if the ruleId as already been set
+     * @throws UnsupportedOperationException if the ruleId has already been set
      *
      * @see #forCharacteristic(int)
      */
index b09d14430b4e1041d1ffaafce1ba880652520bc8..15806f274f4d011bdb314ce67409d6cf23258726 100644 (file)
@@ -32,12 +32,18 @@ import static org.sonar.server.computation.measure.Measure.Level.toLevel;
 public class MeasureDtoToMeasure {
 
   public Optional<Measure> toMeasure(@Nullable MeasureDto measureDto, Metric metric) {
+    return toMeasure(measureDto, metric, false);
+  }
+
+  public Optional<Measure> toMeasure(@Nullable MeasureDto measureDto, Metric metric, boolean acceptRuleAndCharacteristicMeasure){
     requireNonNull(metric);
     if (measureDto == null) {
       return Optional.absent();
     }
-    checkArgument(measureDto.getCharacteristicId() == null, "Measures with characteristicId are not supported");
-    checkArgument(measureDto.getRuleId() == null, "Measures with ruleId are not supported");
+    if (!acceptRuleAndCharacteristicMeasure) {
+      checkArgument(measureDto.getCharacteristicId() == null, "Measures with characteristicId are not supported");
+      checkArgument(measureDto.getRuleId() == null, "Measures with ruleId are not supported");
+    }
 
     Double value = measureDto.getValue();
     String data = measureDto.getData();
@@ -121,6 +127,14 @@ public class MeasureDtoToMeasure {
     if (hasAnyVariation(measureDto)) {
       builder.setVariations(createVariations(measureDto));
     }
+    Integer ruleId = measureDto.getRuleId();
+    if (ruleId != null) {
+      builder.forRule(ruleId);
+    }
+    Integer characteristicId = measureDto.getCharacteristicId();
+    if (characteristicId != null) {
+      builder.forCharacteristic(characteristicId);
+    }
 
     return builder;
   }
index 640fc5f6de2cc05a438200d2be209895fc3a8150..d1ccc9f24c63500db85c47c0ede579be8b215aac 100644 (file)
@@ -48,7 +48,7 @@ public class MeasureRepositoryImpl implements MeasureRepository {
   private final MetricRepository metricRepository;
   private final ReportMetricValidator reportMetricValidator;
 
-  private final MeasureDtoToMeasure measureDtoToMeasure = new MeasureDtoToMeasure();
+  private MeasureDtoToMeasure underTest = new MeasureDtoToMeasure();
   private final Set<Integer> loadedComponents = new HashSet<>();
 
   public MeasureRepositoryImpl(DbClient dbClient, BatchReportReader reportReader, MetricRepository metricRepository, ReportMetricValidator reportMetricValidator) {
@@ -67,7 +67,7 @@ public class MeasureRepositoryImpl implements MeasureRepository {
 
     try (DbSession dbSession = dbClient.openSession(false)) {
       MeasureDto measureDto = dbClient.measureDao().selectByComponentKeyAndMetricKey(dbSession, component.getKey(), metric.getKey());
-      return measureDtoToMeasure.toMeasure(measureDto, metric);
+      return underTest.toMeasure(measureDto, metric);
     }
   }
 
index d5f6ffca74622dd16b4f32cf8dc7420db9c4a1bc..db1e9a87792d52d020230f7c92001ba0981cb0ee 100644 (file)
@@ -58,6 +58,20 @@ public class MeasureDtoToMeasureTest {
     assertThat(underTest.toMeasure(null, SOME_INT_METRIC)).isAbsent();
   }
 
+  @Test
+  public void toMeasure_returns_rule_measure() {
+    Optional<Measure> measure = underTest.toMeasure(new MeasureDto().setRuleId(10), SOME_INT_METRIC, true);
+    assertThat(measure).isPresent();
+    assertThat(measure.get().getRuleId()).isEqualTo(10);
+  }
+
+  @Test
+  public void toMeasure_returns_characteristic_measure() {
+    Optional<Measure> measure = underTest.toMeasure(new MeasureDto().setCharacteristicId(30), SOME_INT_METRIC, true);
+    assertThat(measure).isPresent();
+    assertThat(measure.get().getCharacteristicId()).isEqualTo(30);
+  }
+
   @Test(expected = NullPointerException.class)
   public void toMeasure_throws_NPE_if_metric_argument_is_null() {
     underTest.toMeasure(EMPTY_MEASURE_DTO, null);
@@ -303,12 +317,12 @@ public class MeasureDtoToMeasureTest {
   @DataProvider
   public static Object[][] all_types_MeasureDtos() {
     return new Object[][] {
-        {new MeasureDto().setValue(1d), SOME_BOOLEAN_METRIC},
-        {new MeasureDto().setValue(1d), SOME_INT_METRIC},
-        {new MeasureDto().setValue(1d), SOME_LONG_METRIC},
-        {new MeasureDto().setValue(1d), SOME_DOUBLE_METRIC},
-        {new MeasureDto().setData("1"), SOME_STRING_METRIC},
-        {new MeasureDto().setData(Measure.Level.OK.name()), SOME_LEVEL_METRIC}
+      {new MeasureDto().setValue(1d), SOME_BOOLEAN_METRIC},
+      {new MeasureDto().setValue(1d), SOME_INT_METRIC},
+      {new MeasureDto().setValue(1d), SOME_LONG_METRIC},
+      {new MeasureDto().setValue(1d), SOME_DOUBLE_METRIC},
+      {new MeasureDto().setData("1"), SOME_STRING_METRIC},
+      {new MeasureDto().setData(Measure.Level.OK.name()), SOME_LEVEL_METRIC}
     };
   }
 
@@ -331,8 +345,8 @@ public class MeasureDtoToMeasureTest {
   @Test
   public void toMeasure_creates_MeasureVariation_and_maps_the_right_one() {
     MeasureDto measureDto = new MeasureDto()
-        .setData("1")
-        .setVariation(2, 2d).setVariation(3, 3d).setVariation(5, 5d);
+      .setData("1")
+      .setVariation(2, 2d).setVariation(3, 3d).setVariation(5, 5d);
 
     Optional<Measure> measure = underTest.toMeasure(measureDto, SOME_STRING_METRIC);