aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2010-11-29 13:33:16 +0000
committersimonbrandhof <simon.brandhof@gmail.com>2010-11-29 13:33:16 +0000
commit984e1ff8d3c2c788fb4bcc85b24dc3b08270aace (patch)
tree4db20fa8bcf80f129753956ed9b329455d93bc48
parent41fbb7e2bfcc9111719f6a3806a294b2a635512f (diff)
downloadsonarqube-984e1ff8d3c2c788fb4bcc85b24dc3b08270aace.tar.gz
sonarqube-984e1ff8d3c2c788fb4bcc85b24dc3b08270aace.zip
SONAR-249 decrease complexity
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/DifferentialValueDecorator.java72
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PeriodLocator.java2
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/DifferentialValueDecoratorTest.java21
3 files changed, 60 insertions, 35 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/DifferentialValueDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/DifferentialValueDecorator.java
index 57c9c5619ed..8ba04b4e621 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/DifferentialValueDecorator.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/DifferentialValueDecorator.java
@@ -30,6 +30,7 @@ import org.sonar.api.measures.*;
import org.sonar.api.qualitymodel.Characteristic;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.Resource;
+import org.sonar.api.resources.ResourceUtils;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RulePriority;
@@ -47,25 +48,25 @@ public class DifferentialValueDecorator implements Decorator {
public DifferentialValueDecorator(DatabaseSession session, PeriodLocator periodLocator, Configuration configuration, MetricFinder metricFinder) {
this.session = session;
Snapshot snapshot = periodLocator.locate(5);
- projectTargetSnapshots = new Snapshot[] {snapshot};
-
- this.metricByIds = Maps.newHashMap();
- for (Metric metric : metricFinder.findAll()) {
- if (metric.isNumericType()) {
- metricByIds.put(metric.getId(), metric);
- }
- }
+ projectTargetSnapshots = new Snapshot[]{snapshot};
+ initMetrics(metricFinder.findAll());
}
/**
* only for unit tests
*/
- DifferentialValueDecorator(DatabaseSession session, Snapshot[] projectTargetSnapshots, Metric[] metrics) {
+ DifferentialValueDecorator(DatabaseSession session, Snapshot[] projectTargetSnapshots, Collection<Metric> metrics) {
this.session = session;
this.projectTargetSnapshots = projectTargetSnapshots;
+ initMetrics(metrics);
+ }
+
+ private void initMetrics(Collection<Metric> metrics) {
this.metricByIds = Maps.newHashMap();
for (Metric metric : metrics) {
- metricByIds.put(metric.getId(), metric);
+ if (metric.isNumericType()) {
+ metricByIds.put(metric.getId(), metric);
+ }
}
}
@@ -78,31 +79,44 @@ public class DifferentialValueDecorator implements Decorator {
return metricByIds.values();
}
+ static boolean shouldCalculateDiffValues(Resource resource) {
+ // measures on files are currently purged, so past measures are not available
+ return !ResourceUtils.isEntity(resource);
+ }
+
public void decorate(Resource resource, DecoratorContext context) {
- for (int index = 0; index < projectTargetSnapshots.length; index++) {
- Snapshot projectTargetSnapshot = projectTargetSnapshots[index];
- if (projectTargetSnapshot != null) {
- // search past measures
- List<MeasureModel> pastMeasures = selectPastMeasures(resource.getId(), projectTargetSnapshot);
-
- Map<MeasureKey, MeasureModel> pastMeasuresByKey = Maps.newHashMap();
- for (MeasureModel pastMeasure : pastMeasures) {
- pastMeasuresByKey.put(new MeasureKey(pastMeasure), pastMeasure);
+ if (shouldCalculateDiffValues(resource)) {
+ for (int index = 0; index < projectTargetSnapshots.length; index++) {
+ Snapshot projectTargetSnapshot = projectTargetSnapshots[index];
+ if (projectTargetSnapshot != null) {
+ calculateDiffValues(resource, context, index, projectTargetSnapshot);
}
+ }
+ }
+ }
- // for each measure, search equivalent past measure
- for (Measure measure : context.getMeasures(MeasuresFilters.all())) {
- // compare with past measure
- MeasureModel pastMeasure = pastMeasuresByKey.get(new MeasureKey(measure));
- if (calculateDiffValue(measure, pastMeasure, index)) {
- context.saveMeasure(measure);
- }
- }
+ private void calculateDiffValues(Resource resource, DecoratorContext context, int index, Snapshot projectTargetSnapshot) {
+ List<MeasureModel> pastMeasures = selectPastMeasures(resource.getId(), projectTargetSnapshot);
+ compareWithPastMeasures(context, index, pastMeasures);
+ }
+
+ void compareWithPastMeasures(DecoratorContext context, int index, List<MeasureModel> pastMeasures) {
+ Map<MeasureKey, MeasureModel> pastMeasuresByKey = Maps.newHashMap();
+ for (MeasureModel pastMeasure : pastMeasures) {
+ pastMeasuresByKey.put(new MeasureKey(pastMeasure), pastMeasure);
+ }
+
+ // for each measure, search equivalent past measure
+ for (Measure measure : context.getMeasures(MeasuresFilters.all())) {
+ // compare with past measure
+ MeasureModel pastMeasure = pastMeasuresByKey.get(new MeasureKey(measure));
+ if (updateDiffValue(measure, pastMeasure, index)) {
+ context.saveMeasure(measure);
}
}
}
- private boolean calculateDiffValue(Measure measure, MeasureModel pastMeasure, int index) {
+ boolean updateDiffValue(Measure measure, MeasureModel pastMeasure, int index) {
boolean updated = false;
if (pastMeasure != null && pastMeasure.getValue() != null && measure.getValue() != null) {
double diff = (measure.getValue().doubleValue() - pastMeasure.getValue().doubleValue());
@@ -163,7 +177,7 @@ public class DifferentialValueDecorator implements Decorator {
characteristic = measure.getCharacteristic();
// TODO merge RuleMeasure into Measure
if (measure instanceof RuleMeasure) {
- RuleMeasure rm = (RuleMeasure)measure;
+ RuleMeasure rm = (RuleMeasure) measure;
categoryId = rm.getRuleCategory();
rule = rm.getRule();
priority = rm.getRulePriority();
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PeriodLocator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PeriodLocator.java
index 35e960023b1..cff7762d595 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PeriodLocator.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PeriodLocator.java
@@ -60,7 +60,7 @@ public final class PeriodLocator implements BatchExtension {
Snapshot nearest = null;
for (Snapshot snapshot : snapshots) {
long distance = distance(snapshot.getCreatedAt(), targetDate);
- if (distance<=bestDistance) {
+ if (distance <= bestDistance) {
bestDistance = distance;
nearest = snapshot;
}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/DifferentialValueDecoratorTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/DifferentialValueDecoratorTest.java
index bf4691d01d1..fd4b7242a43 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/DifferentialValueDecoratorTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/DifferentialValueDecoratorTest.java
@@ -23,6 +23,7 @@ import org.junit.Test;
import org.sonar.api.database.model.MeasureModel;
import org.sonar.api.database.model.Snapshot;
import org.sonar.api.measures.Metric;
+import org.sonar.api.resources.*;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
import java.util.List;
@@ -41,7 +42,7 @@ public class DifferentialValueDecoratorTest extends AbstractDbUnitTestCase {
public void shouldSelectPastResourceMeasures() {
setupData("shared");
- Metric[] metrics = selectMetrics();
+ List<Metric> metrics = selectMetrics();
Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", PROJECT_SNAPSHOT_ID);
DifferentialValueDecorator decorator = new DifferentialValueDecorator(getSession(), new Snapshot[0], metrics);
@@ -58,7 +59,7 @@ public class DifferentialValueDecoratorTest extends AbstractDbUnitTestCase {
public void shouldSelectPastProjectMeasures() {
setupData("shared");
- Metric[] metrics = selectMetrics();
+ List<Metric> metrics = selectMetrics();
Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", PROJECT_SNAPSHOT_ID);
DifferentialValueDecorator decorator = new DifferentialValueDecorator(getSession(), new Snapshot[0], metrics);
@@ -71,8 +72,18 @@ public class DifferentialValueDecoratorTest extends AbstractDbUnitTestCase {
}
}
- private Metric[] selectMetrics() {
- List<Metric> metrics = getSession().getResults(Metric.class);
- return metrics.toArray(new Metric[metrics.size()]);
+ @Test
+ public void shouldNotCalculateDiffValuesOnFiles() {
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new Project("foo")), is(true));
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new JavaPackage("org.foo")), is(true));
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new Directory("org/foo")), is(true));
+
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new JavaFile("org.foo.Bar")), is(false));
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new JavaFile("org.foo.Bar", true)), is(false));
+ assertThat(DifferentialValueDecorator.shouldCalculateDiffValues(new File("org/foo/Bar.php")), is(false));
+ }
+
+ private List<Metric> selectMetrics() {
+ return getSession().getResults(Metric.class);
}
}