diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2022-04-08 13:41:49 -0400 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2022-04-21 20:02:50 +0000 |
commit | 3b7e8d87a77c1d116cfb7ad09d2ece9d8c3d76f5 (patch) | |
tree | a924db854caeee06ae3a6530da5cd86904aeed6a /sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java | |
parent | d6678b8eeae881a5e2a4e2c188735c3886cbdd76 (diff) | |
download | sonarqube-3b7e8d87a77c1d116cfb7ad09d2ece9d8c3d76f5.tar.gz sonarqube-3b7e8d87a77c1d116cfb7ad09d2ece9d8c3d76f5.zip |
SONAR-16232 Delete sonar-plugin-api module
Diffstat (limited to 'sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java')
-rw-r--r-- | sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java | 766 |
1 files changed, 0 insertions, 766 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java deleted file mode 100644 index c8fb2d55778..00000000000 --- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java +++ /dev/null @@ -1,766 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2022 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.api.measures; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import org.apache.commons.lang.builder.ReflectionToStringBuilder; -import org.apache.commons.lang.builder.ToStringStyle; -import org.sonar.api.ce.ComputeEngineSide; -import org.sonar.api.scanner.ScannerSide; -import org.sonar.api.server.ServerSide; - -import static org.apache.commons.lang.StringUtils.isNotBlank; -import static org.sonar.api.utils.Preconditions.checkArgument; - -/** - * Used to define a metric in a plugin. Should be used with {@link Metrics} extension point. - */ -@ScannerSide -@ServerSide -@ComputeEngineSide -public class Metric<G extends Serializable> implements Serializable, org.sonar.api.batch.measure.Metric<G> { - - /** - * @since 5.3 - */ - public static final int DEFAULT_DECIMAL_SCALE = 1; - - /** - * The maximum supported value of scale for decimal metrics - * - * @since 5.3 - */ - public static final int MAX_DECIMAL_SCALE = 5; - - /** - * A metric bigger value means a degradation - */ - public static final int DIRECTION_WORST = -1; - /** - * A metric bigger value means an improvement - */ - public static final int DIRECTION_BETTER = 1; - /** - * The metric direction has no meaning - */ - public static final int DIRECTION_NONE = 0; - - public enum ValueType { - INT(Integer.class), - FLOAT(Double.class), - PERCENT(Double.class), - BOOL(Boolean.class), - STRING(String.class), - MILLISEC(Long.class), - DATA(String.class), - LEVEL(Metric.Level.class), - DISTRIB(String.class), - RATING(Integer.class), - WORK_DUR(Long.class); - - private final Class valueClass; - - ValueType(Class valueClass) { - this.valueClass = valueClass; - } - - private Class valueType() { - return valueClass; - } - - public static String[] names() { - ValueType[] values = values(); - String[] names = new String[values.length]; - for (int i = 0; i < values.length; i += 1) { - names[i] = values[i].name(); - } - - return names; - } - } - - public enum Level { - OK("Green"), - /** - * @deprecated in 7.6. - */ - @Deprecated - WARN("Orange"), - ERROR("Red"); - - private static final List<String> NAMES = Arrays.stream(values()) - .map(Level::name) - .collect(Collectors.toList()); - - private String colorName; - - Level(String colorName) { - this.colorName = colorName; - } - - public String getColorName() { - return colorName; - } - - public static List<String> names() { - return NAMES; - } - } - - private String uuid; - private String key; - private String description; - private ValueType type; - private Integer direction; - private String domain; - private String name; - private Boolean qualitative = Boolean.FALSE; - private Boolean userManaged = Boolean.FALSE; - private Boolean enabled = Boolean.TRUE; - private Double worstValue; - private Double bestValue; - private Boolean optimizedBestValue; - private Boolean hidden = Boolean.FALSE; - private Boolean deleteHistoricalData; - private Integer decimalScale; - - private Metric(Builder builder) { - this.key = builder.key; - this.name = builder.name; - this.description = builder.description; - this.type = builder.type; - this.direction = builder.direction; - this.domain = builder.domain; - this.qualitative = builder.qualitative; - this.enabled = Boolean.TRUE; - this.worstValue = builder.worstValue; - this.optimizedBestValue = builder.optimizedBestValue; - this.bestValue = builder.bestValue; - this.hidden = builder.hidden; - this.userManaged = builder.userManaged; - this.deleteHistoricalData = builder.deleteHistoricalData; - this.decimalScale = builder.decimalScale; - } - - /** - * Creates an empty metric - * - * @deprecated in 1.12. Use the {@link Builder} factory. - */ - @Deprecated - public Metric() { - } - - /** - * Creates a metric based on its key. Shortcut to Metric(key, ValueType.INT) - * - * @param key the metric key - * @deprecated since 2.7 use the {@link Builder} factory. - */ - @Deprecated - public Metric(String key) { - this(key, ValueType.INT); - } - - /** - * Creates a metric based on a key and a type. Shortcut to - * Metric(key, key, key, type, -1, Boolean.FALSE, null, false) - * - * @param key the key - * @param type the type - * @deprecated since 2.7 use the {@link Builder} factory. - */ - @Deprecated - public Metric(String key, ValueType type) { - this(key, key, key, type, -1, Boolean.FALSE, null, false); - } - - /** - * @deprecated since 2.7 use the {@link Builder} factory. - */ - @Deprecated - public Metric(String key, String name, String description, ValueType type, Integer direction, Boolean qualitative, String domain) { - this(key, name, description, type, direction, qualitative, domain, false); - } - - /** - * Creates a fully qualified metric. - * - * @param key the metric key - * @param name the metric name - * @param description the metric description - * @param type the metric type - * @param direction the metric direction - * @param qualitative whether the metric is qualitative - * @param domain the metric domain - * @param userManaged whether the metric is user managed - */ - private Metric(String key, String name, String description, ValueType type, Integer direction, Boolean qualitative, @Nullable String domain, - boolean userManaged) { - this.key = key; - this.description = description; - this.type = type; - this.direction = direction; - this.domain = domain; - this.name = name; - this.qualitative = qualitative; - this.userManaged = userManaged; - if (ValueType.PERCENT == this.type) { - this.bestValue = (direction == DIRECTION_BETTER) ? 100.0 : 0.0; - this.worstValue = (direction == DIRECTION_BETTER) ? 0.0 : 100.0; - this.decimalScale = DEFAULT_DECIMAL_SCALE; - } else if (ValueType.FLOAT == this.type) { - this.decimalScale = DEFAULT_DECIMAL_SCALE; - } - } - - /** - * For internal use only - */ - public String getUuid() { - return uuid; - } - - /** - * For internal use only - */ - public Metric<G> setUuid(@Nullable String uuid) { - this.uuid = uuid; - return this; - } - - /** - * @return wether the metric is qualitative - */ - public Boolean getQualitative() { - return qualitative; - } - - /** - * Sets whether the metric is qualitative - * - * @param qualitative whether the metric is qualitative - * @return this - */ - public Metric<G> setQualitative(Boolean qualitative) { - this.qualitative = qualitative; - return this; - } - - /** - * @return the metric key - */ - public String getKey() { - return key; - } - - /** - * Sets the metric key - * - * @param key the key - * @return this - */ - public Metric<G> setKey(String key) { - this.key = key; - return this; - } - - /** - * @return the metric type - */ - public ValueType getType() { - return type; - } - - /** - * Sets the metric type - * - * @param type the type - * @return this - */ - public Metric<G> setType(ValueType type) { - this.type = type; - return this; - } - - /** - * @return the metric description - */ - @CheckForNull - public String getDescription() { - return description; - } - - /** - * Sets the metric description - * - * @param description the description - * @return this - */ - public Metric<G> setDescription(@Nullable String description) { - this.description = description; - return this; - } - - /** - * @return whether the metric is a managed by the users ("manual metric") - */ - @Deprecated - public Boolean getUserManaged() { - return userManaged; - } - - /** - * Sets whether the metric is managed by users ("manual metric") - * - * @param userManaged whether the metric is user managed - * @return this - */ - public Metric<G> setUserManaged(Boolean userManaged) { - this.userManaged = userManaged; - return this; - } - - /** - * @return whether the metric is enabled - */ - public Boolean getEnabled() { - return enabled; - } - - /** - * Sets whether the metric is enabled - * - * @param enabled whether the metric is enabled - * @return this - */ - public Metric<G> setEnabled(Boolean enabled) { - this.enabled = enabled; - return this; - } - - /** - * @return the metric direction - */ - public Integer getDirection() { - return direction; - } - - /** - * Sets the metric direction. - * - * @param direction the direction - */ - public Metric<G> setDirection(Integer direction) { - this.direction = direction; - return this; - } - - /** - * @return the domain of the metric - */ - public String getDomain() { - return domain; - } - - /** - * Sets the domain for the metric (General, Complexity...) - * - * @param domain the domain - * @return this - */ - public Metric<G> setDomain(String domain) { - this.domain = domain; - return this; - } - - /** - * @return the metric name - */ - public String getName() { - return name; - } - - /** - * Sets the metric name - * - * @param name the name - * @return this - */ - public Metric<G> setName(String name) { - this.name = name; - return this; - } - - public Double getWorstValue() { - return worstValue; - } - - @CheckForNull - public Double getBestValue() { - return bestValue; - } - - /** - * @return this - */ - public Metric<G> setWorstValue(@Nullable Double d) { - this.worstValue = d; - return this; - } - - /** - * @param bestValue the best value. It can be null. - * @return this - */ - public Metric<G> setBestValue(@Nullable Double bestValue) { - this.bestValue = bestValue; - return this; - } - - /** - * @return whether the metric is of a numeric type (int, percentage...) - */ - public boolean isNumericType() { - return ValueType.INT.equals(type) - || ValueType.FLOAT.equals(type) - || ValueType.PERCENT.equals(type) - || ValueType.BOOL.equals(type) - || ValueType.MILLISEC.equals(type) - || ValueType.RATING.equals(type) - || ValueType.WORK_DUR.equals(type); - } - - /** - * @return whether the metric is of type data - */ - public boolean isDataType() { - return ValueType.DATA.equals(type) || ValueType.DISTRIB.equals(type); - } - - /** - * @return whether the metric is of type percentage - */ - public boolean isPercentageType() { - return ValueType.PERCENT.equals(type); - } - - public Metric<G> setOptimizedBestValue(@Nullable Boolean b) { - this.optimizedBestValue = b; - return this; - } - - /** - * @return null for manual metrics - */ - @CheckForNull - public Boolean isOptimizedBestValue() { - return optimizedBestValue; - } - - public Boolean isHidden() { - return hidden; - } - - public Metric<G> setHidden(Boolean hidden) { - this.hidden = hidden; - return this; - } - - public Boolean getDeleteHistoricalData() { - return deleteHistoricalData; - } - - /** - * Return the number scale if metric type is {@link ValueType#FLOAT}, else {@code null} - * - * @since 5.3 - */ - @CheckForNull - public Integer getDecimalScale() { - return decimalScale; - } - - @Override - public int hashCode() { - return key.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Metric)) { - return false; - } - if (this == obj) { - return true; - } - Metric other = (Metric) obj; - return key.equals(other.getKey()); - } - - @Override - public String toString() { - return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString(); - } - - /** - * Merge with fields from other metric. All fields are copied, except the id. - * - * @return this - */ - public Metric<G> merge(final Metric with) { - this.description = with.description; - this.domain = with.domain; - this.enabled = with.enabled; - this.qualitative = with.qualitative; - this.worstValue = with.worstValue; - this.bestValue = with.bestValue; - this.optimizedBestValue = with.optimizedBestValue; - this.direction = with.direction; - this.key = with.key; - this.type = with.type; - this.name = with.name; - this.userManaged = with.userManaged; - this.hidden = with.hidden; - this.deleteHistoricalData = with.deleteHistoricalData; - return this; - } - - /** - * Metric.Builder is used to create metric definitions. It must be preferred to creating new instances of the Metric class directly. - * - * @since 2.7 - */ - public static final class Builder { - private String key; - private Metric.ValueType type; - private String name; - private String description; - private Integer direction = DIRECTION_NONE; - private Boolean qualitative = Boolean.FALSE; - private String domain = null; - private Double worstValue; - private Double bestValue; - private boolean optimizedBestValue = false; - private boolean hidden = false; - private boolean userManaged = false; - private boolean deleteHistoricalData = false; - private Integer decimalScale = null; - - /** - * Creates a new {@link Builder} object. - * - * @param key the metric key, should be unique among all metrics - * @param name the metric name - * @param type the metric type - */ - public Builder(String key, String name, ValueType type) { - checkArgument(isNotBlank(key), "Metric key can not be blank"); - checkArgument(isNotBlank(name), "Name of metric %s must be set", key); - checkArgument(type != null, "Type of metric %s must be set", key); - this.key = key; - this.name = name; - this.type = type; - } - - /** - * Sets the metric description. - * - * @param d the description - * @return the builder - */ - public Builder setDescription(String d) { - this.description = d; - return this; - } - - /** - * Sets the metric direction (used for numeric values only), which is used in the Web UI to show if the trend of a metric is good or not. - * <ul> - * <li>Metric.DIRECTION_WORST: indicates that an increase of the metric value is not a good thing (example: the complexity of a function)</li> - * <li>Metric.DIRECTION_BETTER: indicates that an increase of the metric value is a good thing (example: the code coverage of a function)</li> - * <li>Metric.DIRECTION_NONE: indicates that the variation of the metric value is neither good nor bad (example: number of files).</li> - * </ul> - * Metric.DIRECTION_NONE is the default value. - * - * @param d the direction - * @return the builder - * @see Metric#DIRECTION_WORST - * @see Metric#DIRECTION_BETTER - * @see Metric#DIRECTION_NONE - */ - public Builder setDirection(Integer d) { - this.direction = d; - return this; - } - - /** - * Sets whether the metric is qualitative or not. Default value is false. - * <br> - * If set to true, then variations of this metric will be highlighted in the Web UI (for instance, trend icons will be red or green instead of default grey). - * - * @param b Boolean.TRUE if the metric is qualitative - * @return the builder - */ - public Builder setQualitative(Boolean b) { - this.qualitative = b; - return this; - } - - /** - * Sets the domain for the metric (General, Complexity...). This is used to group metrics in the Web UI. - * <br> - * By default, the metric belongs to no specific domain. - * - * @param d the domain - * @return the builder - */ - public Builder setDomain(String d) { - this.domain = d; - return this; - } - - /** - * Sets the worst value that the metric can get (example: 0.0 for code coverage). No worst value is set by default. - * - * @param d the worst value - * @return the builder - */ - public Builder setWorstValue(Double d) { - this.worstValue = d; - return this; - } - - /** - * Sets the best value that the metric can get (example: 100.0 for code coverage). No best value is set by default. - * <br> - * Resources would be hidden on drilldown page, if the value of measure equals to best value. - * - * @param d the best value - * @return the builder - */ - public Builder setBestValue(Double d) { - this.bestValue = d; - return this; - } - - /** - * Specifies whether file-level measures that equal to the defined best value are stored or not. Default is false. - * <br> - * Example with the metric that stores the number of violation ({@link CoreMetrics#VIOLATIONS}): - * if a file has no violation, then the value '0' won't be stored in the database. - * - * @param b true if the measures must not be stored when they equal to the best value - * @return the builder - */ - public Builder setOptimizedBestValue(boolean b) { - this.optimizedBestValue = b; - return this; - } - - /** - * Sets whether the metric should be hidden in Web UI. Default is false. - * - * @param b true if the metric should be hidden. - * @return the builder - */ - public Builder setHidden(boolean b) { - this.hidden = b; - return this; - } - - /** - * Specifies whether this metric can be edited online in the "Manual measures" page. Default is false. - * - * @param b true if the metric can be edited online. - * @return the builder - * @since 2.10 - */ - @Deprecated - public Builder setUserManaged(boolean b) { - this.userManaged = b; - return this; - } - - /** - * Specifies whether measures from the past can be automatically deleted to minimize database volume. - * <br> - * By default, historical data are kept. - * - * @param b true if measures from the past can be deleted automatically. - * @return the builder - * @since 2.14 - */ - public Builder setDeleteHistoricalData(boolean b) { - this.deleteHistoricalData = b; - return this; - } - - /** - * Scale to be used if the metric has decimal type ({@link ValueType#FLOAT} or {@link ValueType#PERCENT}). - * Default is 1. It is not set (({@code null}) on non-decimal metrics. - * - * @since 5.3 - */ - public Builder setDecimalScale(int scale) { - checkArgument(scale >= 0, "Scale of decimal metric %s must be positive: %d", key, scale); - checkArgument(scale <= MAX_DECIMAL_SCALE, "Scale of decimal metric [%s] must be less than or equal %s: %s", key, MAX_DECIMAL_SCALE, scale); - this.decimalScale = scale; - return this; - } - - /** - * Creates a new metric definition based on the properties set on this metric builder. - * - * @return a new {@link Metric} object - */ - public <G extends Serializable> Metric<G> create() { - if (ValueType.PERCENT == this.type) { - this.bestValue = (direction == DIRECTION_BETTER) ? 100.0 : 0.0; - this.worstValue = (direction == DIRECTION_BETTER) ? 0.0 : 100.0; - this.decimalScale = coalesce(decimalScale, DEFAULT_DECIMAL_SCALE); - - } else if (ValueType.FLOAT == this.type) { - this.decimalScale = coalesce(decimalScale, DEFAULT_DECIMAL_SCALE); - } - return new Metric<>(this); - } - } - - @CheckForNull - private static <T> T coalesce(@Nullable T a, @Nullable T b) { - return a == null ? b : a; - } - - @Override - public String key() { - return getKey(); - } - - @Override - public Class<G> valueType() { - return getType().valueType(); - } -} |