]> source.dussan.org Git - sonarqube.git/blob
4d6aeba7a766a8183b373bd722e89aa25fcfbafd
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2019 SonarSource SA
4  * mailto:info AT sonarsource DOT com
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20 package org.sonar.ce.task.projectanalysis.measure;
21
22 import com.google.common.collect.SetMultimap;
23 import java.util.Optional;
24 import java.util.Set;
25 import org.sonar.ce.task.projectanalysis.component.Component;
26 import org.sonar.ce.task.projectanalysis.metric.Metric;
27 import org.sonar.ce.task.projectanalysis.metric.MetricImpl;
28
29 public interface MeasureRepository {
30
31   /**
32    * Retrieves the base measure (ie. the one currently existing in DB) for the specified {@link Component} for
33    * the specified {@link MetricImpl} if it exists.
34    * <p>
35    * This method searches for Measure which are specific to the Component and not associated to a rule or a
36    * characteristic.
37    * </p>
38    *
39    * @throws NullPointerException if either argument is {@code null}
40    */
41   Optional<Measure> getBaseMeasure(Component component, Metric metric);
42
43   /**
44    * Retrieves the measure created during the current analysis for the specified {@link Component} for the specified
45    * {@link Metric} if it exists (ie. one created by the Compute Engine or the Batch) and which is <strong>not</strong>
46    * associated to a rule, a characteristic, or a developer.
47    */
48   Optional<Measure> getRawMeasure(Component component, Metric metric);
49
50   /**
51    * Returns the {@link Measure}s for the specified {@link Component} and the specified {@link Metric}.
52    * <p>
53    * Their will be one measure not associated to rules, characteristics or developers, the other ones will be associated to rules or to characteristics
54    * (see {@link Measure#equals(Object)}.
55    * </p>
56    */
57   Set<Measure> getRawMeasures(Component component, Metric metric);
58
59   /**
60    * Returns the {@link Measure}s for the specified {@link Component} mapped by their metric key.
61    * <p>
62    * Their can be multiple measures for the same Metric but only one which has no rule nor characteristic, one with a
63    * specific ruleId and one with specific characteristicId (see {@link Measure#equals(Object)}.
64    * </p>
65    */
66   SetMultimap<String, Measure> getRawMeasures(Component component);
67
68   /**
69    * Adds the specified measure for the specified Component and Metric. There can be no more than one measure for a
70    * specific combination of Component, Metric and association to a specific rule or characteristic.
71    *
72    * @throws NullPointerException if any of the arguments is null
73    * @throws UnsupportedOperationException when trying to add a measure when one already exists for the specified Component/Metric paar
74    */
75   void add(Component component, Metric metric, Measure measure);
76
77   /**
78    * Updates the specified measure for the specified Component and Metric. There can be no more than one measure for a
79    * specific combination of Component, Metric and association to a specific rule or characteristic.
80    *
81    * @throws NullPointerException if any of the arguments is null
82    * @throws UnsupportedOperationException when trying to update a non existing measure
83    */
84   void update(Component component, Metric metric, Measure measure);
85 }