Skip to content

Commit

Permalink
SONAR-7027 Add Developer in PersistMeasure
Browse files Browse the repository at this point in the history
  • Loading branch information
julienlancelot committed Nov 19, 2015
1 parent 29e3899 commit cd03d46
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 28 deletions.
Expand Up @@ -70,6 +70,7 @@
import org.sonar.server.computation.measure.MeasureComputersHolderImpl; import org.sonar.server.computation.measure.MeasureComputersHolderImpl;
import org.sonar.server.computation.measure.MeasureComputersVisitor; import org.sonar.server.computation.measure.MeasureComputersVisitor;
import org.sonar.server.computation.measure.MeasureRepositoryImpl; 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.metric.MetricModule;
import org.sonar.server.computation.period.PeriodsHolderImpl; import org.sonar.server.computation.period.PeriodsHolderImpl;
import org.sonar.server.computation.qualitygate.EvaluationResultTextConverterImpl; import org.sonar.server.computation.qualitygate.EvaluationResultTextConverterImpl;
Expand Down Expand Up @@ -192,7 +193,10 @@ private static List componentClasses() {
IntegrateCrossProjectDuplications.class, IntegrateCrossProjectDuplications.class,


// views // views
ViewIndex.class); ViewIndex.class,

MeasureToMeasureDto.class
);
} }


} }
Expand Up @@ -33,7 +33,6 @@
import org.sonar.db.measure.MeasureDto; import org.sonar.db.measure.MeasureDto;
import org.sonar.server.computation.component.Component; import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.CrawlerDepthLimit; 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.DepthTraversalTypeAwareCrawler;
import org.sonar.server.computation.component.TreeRootHolder; import org.sonar.server.computation.component.TreeRootHolder;
import org.sonar.server.computation.component.TypeAwareVisitorAdapter; import org.sonar.server.computation.component.TypeAwareVisitorAdapter;
Expand Down Expand Up @@ -62,15 +61,15 @@ public class PersistMeasuresStep implements ComputationStep {


private final DbClient dbClient; private final DbClient dbClient;
private final MetricRepository metricRepository; private final MetricRepository metricRepository;
private final DbIdsRepository dbIdsRepository; private final MeasureToMeasureDto measureToMeasureDto;
private final TreeRootHolder treeRootHolder; private final TreeRootHolder treeRootHolder;
private final MeasureRepository measureRepository; private final MeasureRepository measureRepository;


public PersistMeasuresStep(DbClient dbClient, MetricRepository metricRepository, DbIdsRepository dbIdsRepository, public PersistMeasuresStep(DbClient dbClient, MetricRepository metricRepository, MeasureToMeasureDto measureToMeasureDto,
TreeRootHolder treeRootHolder, MeasureRepository measureRepository) { TreeRootHolder treeRootHolder, MeasureRepository measureRepository) {
this.dbClient = dbClient; this.dbClient = dbClient;
this.metricRepository = metricRepository; this.metricRepository = metricRepository;
this.dbIdsRepository = dbIdsRepository; this.measureToMeasureDto = measureToMeasureDto;
this.treeRootHolder = treeRootHolder; this.treeRootHolder = treeRootHolder;
this.measureRepository = measureRepository; this.measureRepository = measureRepository;
} }
Expand Down Expand Up @@ -102,13 +101,10 @@ private MeasureVisitor(DbSession session) {
@Override @Override
public void visitAny(Component component) { public void visitAny(Component component) {
Multimap<String, Measure> measures = measureRepository.getRawMeasures(component); Multimap<String, Measure> measures = measureRepository.getRawMeasures(component);
long componentId = dbIdsRepository.getComponentId(component); persistMeasures(component, measures);
long snapshotId = dbIdsRepository.getSnapshotId(component);

persistMeasures(component, measures, componentId, snapshotId);
} }


private void persistMeasures(Component component, Multimap<String, Measure> batchReportMeasures, long componentId, long snapshotId) { private void persistMeasures(Component component, Multimap<String, Measure> batchReportMeasures) {
for (Map.Entry<String, Collection<Measure>> measures : batchReportMeasures.asMap().entrySet()) { for (Map.Entry<String, Collection<Measure>> measures : batchReportMeasures.asMap().entrySet()) {
String metricKey = measures.getKey(); String metricKey = measures.getKey();
if (NOT_TO_PERSIST_ON_FILE_METRIC_KEYS.contains(metricKey) && component.getType() == Component.Type.FILE) { if (NOT_TO_PERSIST_ON_FILE_METRIC_KEYS.contains(metricKey) && component.getType() == Component.Type.FILE) {
Expand All @@ -118,7 +114,7 @@ private void persistMeasures(Component component, Multimap<String, Measure> batc
Metric metric = metricRepository.getByKey(metricKey); Metric metric = metricRepository.getByKey(metricKey);
Predicate<Measure> notBestValueOptimized = Predicates.not(BestValueOptimization.from(metric, component)); Predicate<Measure> notBestValueOptimized = Predicates.not(BestValueOptimization.from(metric, component));
for (Measure measure : from(measures.getValue()).filter(NonEmptyMeasure.INSTANCE).filter(notBestValueOptimized)) { 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); dbClient.measureDao().insert(session, measureDto);
} }
} }
Expand Down
Expand Up @@ -34,10 +34,13 @@
import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto;
import org.sonar.server.computation.batch.TreeRootHolderRule; import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component; 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.MutableDbIdsRepositoryRule;
import org.sonar.server.computation.component.ReportComponent; import org.sonar.server.computation.component.ReportComponent;
import org.sonar.server.computation.component.ViewsComponent; import org.sonar.server.computation.component.ViewsComponent;
import org.sonar.server.computation.measure.MeasureRepositoryRule; 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.metric.MetricRepositoryRule;
import org.sonar.server.computation.period.Period; import org.sonar.server.computation.period.Period;
import org.sonar.test.DbTests; import org.sonar.test.DbTests;
Expand Down Expand Up @@ -106,7 +109,7 @@ public class PersistMeasuresStepTest extends BaseStepTest {
public void setUp() { public void setUp() {
dbTester.truncateTables(); dbTester.truncateTables();


underTest = new PersistMeasuresStep(dbClient, metricRepository, dbIdsRepository, treeRootHolder, measureRepository); underTest = new PersistMeasuresStep(dbClient, metricRepository, new MeasureToMeasureDto(dbIdsRepository), treeRootHolder, measureRepository);
} }


private void setupReportComponents() { private void setupReportComponents() {
Expand Down Expand Up @@ -164,17 +167,17 @@ private void setDbIds(int componentRef, Long dbId, long snapshotId) {
public void insert_measures_from_report() { public void insert_measures_from_report() {
setupReportComponents(); setupReportComponents();


insert_measures_impl(); insertMeasures();
} }


@Test @Test
public void insert_measures_from_views() { public void insert_measures_from_views() {
setupViewsComponents(); setupViewsComponents();


insert_measures_impl(); insertMeasures();
} }


private void insert_measures_impl() { private void insertMeasures() {
int stringMetricId = 1; int stringMetricId = 1;
int doubleMetricId = 2; int doubleMetricId = 2;
int intMetricId = 3; int intMetricId = 3;
Expand Down Expand Up @@ -245,17 +248,17 @@ private static void assertValue(Map<String, Object> dto, double expected) {
public void insert_measure_with_variations_from_report() { public void insert_measure_with_variations_from_report() {
setupReportComponents(); setupReportComponents();


insert_measure_with_variations_impl(); insertMeasureWithVariations();
} }


@Test @Test
public void insert_measure_with_variations_from_views() { public void insert_measure_with_variations_from_views() {
setupViewsComponents(); setupViewsComponents();


insert_measure_with_variations_impl(); insertMeasureWithVariations();
} }


private void insert_measure_with_variations_impl() { private void insertMeasureWithVariations() {
metricRepository.add(1, DOUBLE_METRIC); metricRepository.add(1, DOUBLE_METRIC);


measureRepository.addRawMeasure(ROOT_REF, DOUBLE_METRIC_KEY, measureRepository.addRawMeasure(ROOT_REF, DOUBLE_METRIC_KEY,
Expand All @@ -282,6 +285,64 @@ private void insert_measure_with_variations_impl() {
assertThat(dto.get("variation_value_5")).isEqualTo(5.5d); 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<Map<String, Object>> dtos = selectSnapshots();
Map<String, Object> 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<Map<String, Object>> dtos = selectSnapshots();
Map<String, Object> dto = dtos.get(0);

assertThat(dto.get("value")).isEqualTo(1d);
assertThat(dto.get("characteristicId")).isEqualTo(10L);
}

@Test @Test
public void bestValue_measure_of_bestValueOptimized_metrics_are_not_persisted() { public void bestValue_measure_of_bestValueOptimized_metrics_are_not_persisted() {
setupReportComponents(); setupReportComponents();
Expand Down Expand Up @@ -373,6 +434,26 @@ public void do_not_insert_class_complexity_distribution_metric_on_files() {
assertThat(dto.get("textValue")).isEqualTo("0=1;2=10"); 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<Map<String, Object>> dtos = selectSnapshots();
Map<String, Object> dto = dtos.get(0);

assertThat(dto.get("value")).isEqualTo(1d);
assertThat(dto.get("developerId")).isEqualTo(10L);
}

private ComponentDto addComponent(String key) { private ComponentDto addComponent(String key) {
ComponentDto componentDto = new ComponentDto().setKey(key).setUuid(Uuids.create()); ComponentDto componentDto = new ComponentDto().setKey(key).setUuid(Uuids.create());
dbClient.componentDao().insert(dbTester.getSession(), componentDto); dbClient.componentDao().insert(dbTester.getSession(), componentDto);
Expand All @@ -384,8 +465,11 @@ private static Period createPeriod(Integer index) {
} }


private List<Map<String, Object>> selectSnapshots() { private List<Map<String, Object>> selectSnapshots() {
return dbTester.select( return dbTester
"SELECT snapshot_id as \"snapshotId\", project_id as \"componentId\", metric_id as \"metricId\", rule_id as \"ruleId\", value as \"value\", text_value as \"textValue\", " + .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\", " + "rule_priority as \"severity\", " +
"variation_value_1 as \"variation_value_1\", " + "variation_value_1 as \"variation_value_1\", " +
"variation_value_2 as \"variation_value_2\", " + "variation_value_2 as \"variation_value_2\", " +
Expand Down
12 changes: 6 additions & 6 deletions sonar-db/src/main/java/org/sonar/db/measure/MeasureDto.java
Expand Up @@ -47,7 +47,7 @@ public class MeasureDto {
private Integer metricId; private Integer metricId;
private Integer ruleId; private Integer ruleId;
private Integer characteristicId; private Integer characteristicId;
private Integer personId; private Long developerId;


// TODO to delete – not in db // TODO to delete – not in db
private String metricKey; private String metricKey;
Expand Down Expand Up @@ -213,12 +213,12 @@ public MeasureDto setCharacteristicId(@Nullable Integer characteristicId) {
} }


@CheckForNull @CheckForNull
public Integer getPersonId() { public Long getDeveloperId() {
return personId; return developerId;
} }


public MeasureDto setPersonId(@Nullable Integer personId) { public MeasureDto setDeveloperId(@Nullable Long developerId) {
this.personId = personId; this.developerId = developerId;
return this; return this;
} }


Expand Down Expand Up @@ -251,7 +251,7 @@ public String toString() {
.add("metricId", metricId) .add("metricId", metricId)
.add("ruleId", ruleId) .add("ruleId", ruleId)
.add("characteristicId", characteristicId) .add("characteristicId", characteristicId)
.add("personId", personId) .add("developerId", developerId)
.add("metricKey", metricKey) .add("metricKey", metricKey)
.toString(); .toString();
} }
Expand Down
Expand Up @@ -7,6 +7,7 @@
pm.metric_id as metricId, pm.metric_id as metricId,
pm.rule_id as ruleId, pm.rule_id as ruleId,
pm.characteristic_id as characteristicId, pm.characteristic_id as characteristicId,
pm.person_id as developerId,
pm.snapshot_id as snapshotId, pm.snapshot_id as snapshotId,
pm.value as value, pm.value as value,
pm.text_value as textValue, pm.text_value as textValue,
Expand Down Expand Up @@ -118,7 +119,7 @@
#{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR}, #{ruleId, jdbcType=INTEGER}, #{textValue, jdbcType=VARCHAR},
#{componentId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR}, #{componentId, jdbcType=INTEGER}, #{alertStatus, jdbcType=VARCHAR}, #{alertText, jdbcType=VARCHAR},
#{description, jdbcType=VARCHAR}, #{characteristicId, jdbcType=INTEGER}, #{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}, #{variation3, jdbcType=DOUBLE},
#{variation4, jdbcType=DOUBLE}, #{variation5, jdbcType=DOUBLE}, #{dataValue, jdbcType=BINARY} #{variation4, jdbcType=DOUBLE}, #{variation5, jdbcType=DOUBLE}, #{dataValue, jdbcType=BINARY}
) )
Expand Down
Expand Up @@ -326,7 +326,7 @@ public void insert() {
.setSnapshotId(2L) .setSnapshotId(2L)
.setMetricId(3) .setMetricId(3)
.setCharacteristicId(4) .setCharacteristicId(4)
.setPersonId(23) .setDeveloperId(23L)
.setRuleId(5) .setRuleId(5)
.setComponentId(6L) .setComponentId(6L)
.setValue(2.0d) .setValue(2.0d)
Expand Down

0 comments on commit cd03d46

Please sign in to comment.