001/*
002 * SonarQube
003 * Copyright (C) 2009-2018 SonarSource SA
004 * mailto:info AT sonarsource DOT com
005 *
006 * This program is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020package org.sonar.api.measures;
021
022import org.apache.commons.lang.builder.EqualsBuilder;
023import org.apache.commons.lang.builder.HashCodeBuilder;
024import org.apache.commons.lang.builder.ToStringBuilder;
025import org.sonar.api.rule.RuleKey;
026import org.sonar.api.rules.Rule;
027import org.sonar.api.rules.RulePriority;
028
029import javax.annotation.CheckForNull;
030import javax.annotation.Nullable;
031
032/**
033 * @since 1.10
034 * @deprecated since 5.2. Ignored by design because of Compute Engine.
035 */
036@Deprecated
037public class RuleMeasure extends Measure {
038
039  private RuleKey ruleKey;
040  private RulePriority rulePriority;
041
042  /**
043   * This constructor is for internal use only. Please use static methods createForXXX().
044   * @deprecated since 4.4 use {@link #RuleMeasure(Metric, RuleKey, RulePriority, Integer)}
045   */
046  @Deprecated
047  public RuleMeasure(Metric metric, @Nullable Rule rule, @Nullable RulePriority rulePriority, @Nullable Integer ruleCategory) {
048    this(metric, rule != null ? rule.ruleKey() : null, rulePriority, ruleCategory);
049  }
050
051  /**
052   * This constructor is for internal use only. Please use static methods createForXXX().
053   */
054  public RuleMeasure(Metric metric, @Nullable RuleKey ruleKey, @Nullable RulePriority rulePriority, @Nullable Integer ruleCategory) {
055    super(metric);
056    this.ruleKey = ruleKey;
057    this.rulePriority = rulePriority;
058  }
059
060  @CheckForNull
061  public RuleKey ruleKey() {
062    return ruleKey;
063  }
064
065  public RuleMeasure setRuleKey(RuleKey ruleKey) {
066    this.ruleKey = ruleKey;
067    return this;
068  }
069
070  /**
071   * @deprecated since 4.4 use {@link #ruleKey()}
072   */
073  @Deprecated
074  public Rule getRule() {
075    return Rule.create(ruleKey.repository(), ruleKey.rule());
076  }
077
078  /**
079   * @deprecated since 4.4 use {@link #setRuleKey(org.sonar.api.rule.RuleKey)}
080   */
081  @Deprecated
082  public RuleMeasure setRule(Rule rule) {
083    this.ruleKey = rule.ruleKey();
084    return this;
085  }
086
087  /**
088   * @deprecated since 2.14 use {@link #getSeverity()} instead. See SONAR-1829.
089   */
090  @Deprecated
091  @CheckForNull
092  public RulePriority getRulePriority() {
093    return rulePriority;
094  }
095
096  /**
097   * @since 2.14
098   */
099  @CheckForNull
100  public RulePriority getSeverity() {
101    return rulePriority;
102  }
103
104  /**
105   * @deprecated since 2.14 use {@link #setSeverity(org.sonar.api.rules.RulePriority)} instead. See SONAR-1829.
106   */
107  @Deprecated
108  public RuleMeasure setRulePriority(RulePriority rulePriority) {
109    this.rulePriority = rulePriority;
110    return this;
111  }
112
113  /**
114   * @since 2.14
115   */
116  public RuleMeasure setSeverity(RulePriority severity) {
117    this.rulePriority = severity;
118    return this;
119  }
120
121  @Override
122  public boolean equals(Object obj) {
123    if (obj == null) {
124      return false;
125    }
126    if (!(obj.getClass().equals(RuleMeasure.class))) {
127      // for the moment.
128      return false;
129    }
130    if (this == obj) {
131      return true;
132    }
133    RuleMeasure other = (RuleMeasure) obj;
134    return new EqualsBuilder()
135      .append(getMetric(), other.getMetric())
136      .append(ruleKey, other.ruleKey)
137      .isEquals();
138  }
139
140  @Override
141  public RuleMeasure setValue(@Nullable Double v) {
142    return (RuleMeasure) super.setValue(v);
143  }
144
145  @Override
146  public int hashCode() {
147    return new HashCodeBuilder(17, 37)
148      .append(getMetric())
149      .append(ruleKey)
150      .toHashCode();
151  }
152
153  @Override
154  public String toString() {
155    return new ToStringBuilder(this)
156      .append("metric", metric)
157      .append("ruleKey", ruleKey)
158      .append("value", value)
159      .append("data", data)
160      .append("description", description)
161      .append("alertStatus", alertStatus)
162      .append("alertText", alertText)
163      .append("severity", rulePriority)
164      .toString();
165  }
166
167  /**
168   * @deprecated since 4.4 use {@link #createForRule(Metric, RuleKey, Double)}
169   */
170  @Deprecated
171  public static RuleMeasure createForRule(Metric metric, Rule rule, @Nullable Double value) {
172    return new RuleMeasure(metric, rule, null, null).setValue(value);
173  }
174
175  public static RuleMeasure createForRule(Metric metric, RuleKey ruleKey, @Nullable Double value) {
176    return new RuleMeasure(metric, ruleKey, null, null).setValue(value);
177  }
178
179  public static RuleMeasure createForPriority(Metric metric, RulePriority priority, @Nullable Double value) {
180    return new RuleMeasure(metric, (RuleKey) null, priority, null).setValue(value);
181  }
182
183  /**
184   * @deprecated since 2.5. See SONAR-2007.
185   */
186  @Deprecated
187  public static RuleMeasure createForCategory(Metric metric, Integer category, @Nullable Double value) {
188    return new RuleMeasure(metric, (RuleKey) null, null, category).setValue(value);
189  }
190}