From cd03d464226228b66e76bee952484ddb05d29a05 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 18 Nov 2015 12:28:49 +0100 Subject: [PATCH] SONAR-7027 Add Developer in PersistMeasure --- ...ReportComputeEngineContainerPopulator.java | 6 +- .../computation/step/PersistMeasuresStep.java | 16 ++- .../step/PersistMeasuresStepTest.java | 102 ++++++++++++++++-- .../java/org/sonar/db/measure/MeasureDto.java | 12 +-- .../org/sonar/db/measure/MeasureMapper.xml | 3 +- .../org/sonar/db/measure/MeasureDaoTest.java | 2 +- 6 files changed, 113 insertions(+), 28 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/container/ReportComputeEngineContainerPopulator.java b/server/sonar-server/src/main/java/org/sonar/server/computation/container/ReportComputeEngineContainerPopulator.java index 26ced5c2c37f..c5d2cd69ca94 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/container/ReportComputeEngineContainerPopulator.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/container/ReportComputeEngineContainerPopulator.java @@ -70,6 +70,7 @@ import org.sonar.server.computation.measure.MeasureComputersHolderImpl; import org.sonar.server.computation.measure.MeasureComputersVisitor; import org.sonar.server.computation.measure.MeasureRepositoryImpl; +import org.sonar.server.computation.measure.MeasureToMeasureDto; import org.sonar.server.computation.metric.MetricModule; import org.sonar.server.computation.period.PeriodsHolderImpl; import org.sonar.server.computation.qualitygate.EvaluationResultTextConverterImpl; @@ -192,7 +193,10 @@ private static List componentClasses() { IntegrateCrossProjectDuplications.class, // views - ViewIndex.class); + ViewIndex.class, + + MeasureToMeasureDto.class + ); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java index fb78a2e5c268..8bb6cf556c8f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistMeasuresStep.java @@ -33,7 +33,6 @@ import org.sonar.db.measure.MeasureDto; import org.sonar.server.computation.component.Component; import org.sonar.server.computation.component.CrawlerDepthLimit; -import org.sonar.server.computation.component.DbIdsRepository; import org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler; import org.sonar.server.computation.component.TreeRootHolder; import org.sonar.server.computation.component.TypeAwareVisitorAdapter; @@ -62,15 +61,15 @@ public class PersistMeasuresStep implements ComputationStep { private final DbClient dbClient; private final MetricRepository metricRepository; - private final DbIdsRepository dbIdsRepository; + private final MeasureToMeasureDto measureToMeasureDto; private final TreeRootHolder treeRootHolder; private final MeasureRepository measureRepository; - public PersistMeasuresStep(DbClient dbClient, MetricRepository metricRepository, DbIdsRepository dbIdsRepository, + public PersistMeasuresStep(DbClient dbClient, MetricRepository metricRepository, MeasureToMeasureDto measureToMeasureDto, TreeRootHolder treeRootHolder, MeasureRepository measureRepository) { this.dbClient = dbClient; this.metricRepository = metricRepository; - this.dbIdsRepository = dbIdsRepository; + this.measureToMeasureDto = measureToMeasureDto; this.treeRootHolder = treeRootHolder; this.measureRepository = measureRepository; } @@ -102,13 +101,10 @@ private MeasureVisitor(DbSession session) { @Override public void visitAny(Component component) { Multimap measures = measureRepository.getRawMeasures(component); - long componentId = dbIdsRepository.getComponentId(component); - long snapshotId = dbIdsRepository.getSnapshotId(component); - - persistMeasures(component, measures, componentId, snapshotId); + persistMeasures(component, measures); } - private void persistMeasures(Component component, Multimap batchReportMeasures, long componentId, long snapshotId) { + private void persistMeasures(Component component, Multimap batchReportMeasures) { for (Map.Entry> measures : batchReportMeasures.asMap().entrySet()) { String metricKey = measures.getKey(); if (NOT_TO_PERSIST_ON_FILE_METRIC_KEYS.contains(metricKey) && component.getType() == Component.Type.FILE) { @@ -118,7 +114,7 @@ private void persistMeasures(Component component, Multimap batc Metric metric = metricRepository.getByKey(metricKey); Predicate notBestValueOptimized = Predicates.not(BestValueOptimization.from(metric, component)); for (Measure measure : from(measures.getValue()).filter(NonEmptyMeasure.INSTANCE).filter(notBestValueOptimized)) { - MeasureDto measureDto = MeasureToMeasureDto.INSTANCE.toMeasureDto(measure, metric, componentId, snapshotId); + MeasureDto measureDto = measureToMeasureDto.toMeasureDto(measure, metric, component); dbClient.measureDao().insert(session, measureDto); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistMeasuresStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistMeasuresStepTest.java index 34fdf073d410..e876f414a4e5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistMeasuresStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistMeasuresStepTest.java @@ -34,10 +34,13 @@ import org.sonar.db.rule.RuleDto; import org.sonar.server.computation.batch.TreeRootHolderRule; import org.sonar.server.computation.component.Component; +import org.sonar.server.computation.component.Developer; +import org.sonar.server.computation.component.DumbDeveloper; import org.sonar.server.computation.component.MutableDbIdsRepositoryRule; import org.sonar.server.computation.component.ReportComponent; import org.sonar.server.computation.component.ViewsComponent; import org.sonar.server.computation.measure.MeasureRepositoryRule; +import org.sonar.server.computation.measure.MeasureToMeasureDto; import org.sonar.server.computation.metric.MetricRepositoryRule; import org.sonar.server.computation.period.Period; import org.sonar.test.DbTests; @@ -106,7 +109,7 @@ public class PersistMeasuresStepTest extends BaseStepTest { public void setUp() { dbTester.truncateTables(); - underTest = new PersistMeasuresStep(dbClient, metricRepository, dbIdsRepository, treeRootHolder, measureRepository); + underTest = new PersistMeasuresStep(dbClient, metricRepository, new MeasureToMeasureDto(dbIdsRepository), treeRootHolder, measureRepository); } private void setupReportComponents() { @@ -164,17 +167,17 @@ private void setDbIds(int componentRef, Long dbId, long snapshotId) { public void insert_measures_from_report() { setupReportComponents(); - insert_measures_impl(); + insertMeasures(); } @Test public void insert_measures_from_views() { setupViewsComponents(); - insert_measures_impl(); + insertMeasures(); } - private void insert_measures_impl() { + private void insertMeasures() { int stringMetricId = 1; int doubleMetricId = 2; int intMetricId = 3; @@ -245,17 +248,17 @@ private static void assertValue(Map dto, double expected) { public void insert_measure_with_variations_from_report() { setupReportComponents(); - insert_measure_with_variations_impl(); + insertMeasureWithVariations(); } @Test public void insert_measure_with_variations_from_views() { setupViewsComponents(); - insert_measure_with_variations_impl(); + insertMeasureWithVariations(); } - private void insert_measure_with_variations_impl() { + private void insertMeasureWithVariations() { metricRepository.add(1, DOUBLE_METRIC); measureRepository.addRawMeasure(ROOT_REF, DOUBLE_METRIC_KEY, @@ -282,6 +285,64 @@ private void insert_measure_with_variations_impl() { assertThat(dto.get("variation_value_5")).isEqualTo(5.5d); } + @Test + public void insert_rule_measure_from_report() { + setupReportComponents(); + + insertRuleMeasure(); + } + + @Test + public void insert_rule_measure_from_view() { + setupViewsComponents(); + + insertRuleMeasure(); + } + + private void insertRuleMeasure() { + metricRepository.add(1, INT_METRIC); + + measureRepository.addRawMeasure(ROOT_REF, INT_METRIC_KEY, newMeasureBuilder().forRule(10).create(1)); + + underTest.execute(); + + assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1); + List> dtos = selectSnapshots(); + Map dto = dtos.get(0); + + assertThat(dto.get("value")).isEqualTo(1d); + assertThat(dto.get("ruleId")).isEqualTo(10L); + } + + @Test + public void insert_characteristic_measure_from_report() { + setupReportComponents(); + + insertCharacteristicMeasure(); + } + + @Test + public void insert_characteristic__measure_from_view() { + setupViewsComponents(); + + insertCharacteristicMeasure(); + } + + private void insertCharacteristicMeasure() { + metricRepository.add(1, INT_METRIC); + + measureRepository.addRawMeasure(ROOT_REF, INT_METRIC_KEY, newMeasureBuilder().forCharacteristic(10).create(1)); + + underTest.execute(); + + assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1); + List> dtos = selectSnapshots(); + Map dto = dtos.get(0); + + assertThat(dto.get("value")).isEqualTo(1d); + assertThat(dto.get("characteristicId")).isEqualTo(10L); + } + @Test public void bestValue_measure_of_bestValueOptimized_metrics_are_not_persisted() { setupReportComponents(); @@ -373,6 +434,26 @@ public void do_not_insert_class_complexity_distribution_metric_on_files() { assertThat(dto.get("textValue")).isEqualTo("0=1;2=10"); } + @Test + public void insert_developer_measure_from_report() { + setupReportComponents(); + + metricRepository.add(1, INT_METRIC); + + Developer developer = new DumbDeveloper("DEV1"); + dbIdsRepository.setDeveloperId(developer, 10); + measureRepository.addRawMeasure(ROOT_REF, INT_METRIC_KEY, newMeasureBuilder().forDeveloper(developer).create(1)); + + underTest.execute(); + + assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1); + List> dtos = selectSnapshots(); + Map dto = dtos.get(0); + + assertThat(dto.get("value")).isEqualTo(1d); + assertThat(dto.get("developerId")).isEqualTo(10L); + } + private ComponentDto addComponent(String key) { ComponentDto componentDto = new ComponentDto().setKey(key).setUuid(Uuids.create()); dbClient.componentDao().insert(dbTester.getSession(), componentDto); @@ -384,8 +465,11 @@ private static Period createPeriod(Integer index) { } private List> selectSnapshots() { - return dbTester.select( - "SELECT snapshot_id as \"snapshotId\", project_id as \"componentId\", metric_id as \"metricId\", rule_id as \"ruleId\", value as \"value\", text_value as \"textValue\", " + + return dbTester + .select( + "SELECT snapshot_id as \"snapshotId\", project_id as \"componentId\", metric_id as \"metricId\", rule_id as \"ruleId\", characteristic_id as \"characteristicId\", person_id as \"developerId\", " + + + "value as \"value\", text_value as \"textValue\", " + "rule_priority as \"severity\", " + "variation_value_1 as \"variation_value_1\", " + "variation_value_2 as \"variation_value_2\", " + diff --git a/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java b/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java index ccfaf99c4cbf..67e75887a3ad 100644 --- a/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java +++ b/sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java @@ -47,7 +47,7 @@ public class MeasureDto { private Integer metricId; private Integer ruleId; private Integer characteristicId; - private Integer personId; + private Long developerId; // TODO to delete – not in db private String metricKey; @@ -213,12 +213,12 @@ public MeasureDto setCharacteristicId(@Nullable Integer characteristicId) { } @CheckForNull - public Integer getPersonId() { - return personId; + public Long getDeveloperId() { + return developerId; } - public MeasureDto setPersonId(@Nullable Integer personId) { - this.personId = personId; + public MeasureDto setDeveloperId(@Nullable Long developerId) { + this.developerId = developerId; return this; } @@ -251,7 +251,7 @@ public String toString() { .add("metricId", metricId) .add("ruleId", ruleId) .add("characteristicId", characteristicId) - .add("personId", personId) + .add("developerId", developerId) .add("metricKey", metricKey) .toString(); } diff --git a/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml b/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml index b4449505645c..8b104d9049ee 100644 --- a/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml +++ b/sonar-db/src/main/resources/org/sonar/db/measure/MeasureMapper.xml @@ -7,6 +7,7 @@ pm.metric_id as metricId, pm.rule_id as ruleId, pm.characteristic_id as characteristicId, + pm.person_id as developerId, pm.snapshot_id as snapshotId, pm.value as value, pm.text_value as textValue, @@ -118,7 +119,7 @@ #{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR}, #{componentId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR}, #{description, jdbcType=VARCHAR}, #{characteristicId, jdbcType=INTEGER}, - #{personId, jdbcType=INTEGER}, #{variation1, jdbcType=DOUBLE}, #{variation2, jdbcType=DOUBLE}, + #{developerId, jdbcType=INTEGER}, #{variation1, jdbcType=DOUBLE}, #{variation2, jdbcType=DOUBLE}, #{variation3, jdbcType=DOUBLE}, #{variation4, jdbcType=DOUBLE}, #{variation5, jdbcType=DOUBLE}, #{dataValue, jdbcType=BINARY} ) diff --git a/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java b/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java index dc24bb8a0221..a714ad0fffb0 100644 --- a/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java +++ b/sonar-db/src/test/java/org/sonar/db/measure/MeasureDaoTest.java @@ -326,7 +326,7 @@ public void insert() { .setSnapshotId(2L) .setMetricId(3) .setCharacteristicId(4) - .setPersonId(23) + .setDeveloperId(23L) .setRuleId(5) .setComponentId(6L) .setValue(2.0d)