From 861e12129a58810908cb0b0fba99b324fc0ee9c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Fri, 12 Jun 2015 16:25:28 +0200 Subject: [PATCH] add Measure#equals definition and improve javadoc of MeasureRepository methods emphasis on Measure for rule or characteristics --- .../server/computation/measure/Measure.java | 6 +++- .../computation/measure/MeasureImpl.java | 34 +++++++++++++++++++ .../measure/MeasureRepository.java | 21 +++++++++--- .../measure/MeasureRepositoryImpl.java | 7 ++-- 4 files changed, 59 insertions(+), 9 deletions(-) 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 39aae3160ca..2b5544c3c93 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 @@ -149,6 +149,10 @@ public interface Measure { @CheckForNull String getDescription(); - + /** + * a Metric is equal to another Metric if it has the same ruleId/characteristicId paar (both being potentially + * {@code null} but only one of them can be non {@code null}. + */ + boolean equals(Object o); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureImpl.java index 673a8bf58a2..bcbda94ec11 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureImpl.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureImpl.java @@ -20,6 +20,7 @@ package org.sonar.server.computation.measure; import java.util.Locale; +import java.util.Objects; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -235,4 +236,37 @@ public final class MeasureImpl implements Measure { public String getDescription() { return description; } + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MeasureImpl measure = (MeasureImpl) o; + return Objects.equals(ruleId, measure.ruleId) && + Objects.equals(characteristicId, measure.characteristicId); + } + + @Override + public int hashCode() { + return Objects.hash(ruleId, characteristicId); + } + + @Override + public String toString() { + return com.google.common.base.Objects.toStringHelper(this) + .add("valueType", valueType) + .add("ruleId", ruleId) + .add("characteristicId", characteristicId) + .add("value", value) + .add("data", data) + .add("dataLevel", dataLevel) + .add("qualityGateStatus", qualityGateStatus) + .add("variations", variations) + .add("description", description) + .toString(); + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepository.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepository.java index a8d447af382..80341ef81ab 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepository.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/MeasureRepository.java @@ -20,7 +20,7 @@ package org.sonar.server.computation.measure; import com.google.common.base.Optional; -import com.google.common.collect.Multimap; +import com.google.common.collect.SetMultimap; import org.sonar.server.computation.component.Component; import org.sonar.server.computation.metric.Metric; import org.sonar.server.computation.metric.MetricImpl; @@ -30,6 +30,14 @@ public interface MeasureRepository { /** * Retrieves the base measure (ie. the one currently existing in DB) for the specified {@link Component} for * the specified {@link MetricImpl} if it exists. + *

+ * This method searches for Measure which are specific to the Component and not associated to a rule or a + * characteristic. + *

+ * + * It will never return a Measure with a non {@code null} {@link Measure#getRuleId()} + * or {@link Measure#getCharacteristicId()} + * * * @throws NullPointerException if either argument is {@code null} */ @@ -37,14 +45,19 @@ public interface MeasureRepository { /** * Retrieves the measure created during the current analysis for the specified {@link Component} for the specified - * {@link MetricImpl} if it exists (ie. one created by the Compute Engine or the Batch). + * {@link Metric} if it exists (ie. one created by the Compute Engine or the Batch) and which is not + * associated to a rule or a characteristic. */ Optional getRawMeasure(Component component, Metric metric); /** - * @return {@link Measure}s for the specified {@link Component} mapped by their metric key. + * Returns the {@link Measure}s for the specified {@link Component} mapped by their metric key. + *

+ * Their can be multiple measures for the same Metric but only one which has no rule nor characteristic, one with a + * specific ruleId and one with specific characteristicId (see {@link Measure#equals(Object)}. + *

*/ - Multimap getRawMeasures(Component component); + SetMultimap getRawMeasures(Component component); /** * Adds the specified measure for the specified Component and Metric. There can be no more than one measure for a 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 4e4ebf83008..592613174a7 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 @@ -22,12 +22,11 @@ package org.sonar.server.computation.measure; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; -import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; +import com.google.common.collect.SetMultimap; import java.util.HashMap; import java.util.Map; import javax.annotation.Nonnull; @@ -126,13 +125,13 @@ public class MeasureRepositoryImpl implements MeasureRepository { } @Override - public Multimap getRawMeasures(Component component) { + public SetMultimap getRawMeasures(Component component) { Map rawMeasures = measures.get(component.getRef()); ListMultimap batchMeasures = from(reportReader.readComponentMeasures(component.getRef())) .index(BatchMeasureToMetricKey.INSTANCE); if (rawMeasures == null && batchMeasures.isEmpty()) { - return ImmutableListMultimap.of(); + return ImmutableSetMultimap.of(); } ListMultimap rawMeasuresFromBatch = Multimaps.transformValues(batchMeasures, batchMeasureToMeasureFunction); -- 2.39.5