From: Julien Lancelot Date: Thu, 3 Sep 2015 15:46:25 +0000 (+0200) Subject: SONAR-6827 MeasureDtoToMeasure supports rule and characteristic measures X-Git-Tag: 5.2-RC1~473 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e08d53bde12c408225e4ac5a3702856a98d8af1e;p=sonarqube.git SONAR-6827 MeasureDtoToMeasure supports rule and characteristic measures --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java index 6593c77ef2e..3ec8f67d875 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/Measure.java @@ -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) */ diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java index b09d14430b4..15806f274f4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureDtoToMeasure.java @@ -32,12 +32,18 @@ import static org.sonar.server.computation.measure.Measure.Level.toLevel; public class MeasureDtoToMeasure { public Optional toMeasure(@Nullable MeasureDto measureDto, Metric metric) { + return toMeasure(measureDto, metric, false); + } + + public Optional 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; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepositoryImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepositoryImpl.java index 640fc5f6de2..d1ccc9f24c6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepositoryImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepositoryImpl.java @@ -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 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); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureDtoToMeasureTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureDtoToMeasureTest.java index d5f6ffca746..db1e9a87792 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureDtoToMeasureTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureDtoToMeasureTest.java @@ -58,6 +58,20 @@ public class MeasureDtoToMeasureTest { assertThat(underTest.toMeasure(null, SOME_INT_METRIC)).isAbsent(); } + @Test + public void toMeasure_returns_rule_measure() { + Optional 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 = 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 = underTest.toMeasure(measureDto, SOME_STRING_METRIC);