001/*
002 * SonarQube
003 * Copyright (C) 2009-2017 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(personId, other.personId)
137      .append(ruleKey, other.ruleKey)
138      .isEquals();
139  }
140
141  @Override
142  public RuleMeasure setValue(@Nullable Double v) {
143    return (RuleMeasure) super.setValue(v);
144  }
145
146  @Override
147  public int hashCode() {
148    return new HashCodeBuilder(17, 37)
149      .append(getMetric())
150      .append(personId)
151      .append(ruleKey)
152      .toHashCode();
153  }
154
155  @Override
156  public String toString() {
157    return new ToStringBuilder(this)
158      .append("metric", metric)
159      .append("personId", personId)
160      .append("ruleKey", ruleKey)
161      .append("value", value)
162      .append("data", data)
163      .append("description", description)
164      .append("alertStatus", alertStatus)
165      .append("alertText", alertText)
166      .append("severity", rulePriority)
167      .toString();
168  }
169
170  /**
171   * @deprecated since 4.4 use {@link #createForRule(Metric, RuleKey, Double)}
172   */
173  @Deprecated
174  public static RuleMeasure createForRule(Metric metric, Rule rule, @Nullable Double value) {
175    return new RuleMeasure(metric, rule, null, null).setValue(value);
176  }
177
178  public static RuleMeasure createForRule(Metric metric, RuleKey ruleKey, @Nullable Double value) {
179    return new RuleMeasure(metric, ruleKey, null, null).setValue(value);
180  }
181
182  public static RuleMeasure createForPriority(Metric metric, RulePriority priority, @Nullable Double value) {
183    return new RuleMeasure(metric, (RuleKey) null, priority, null).setValue(value);
184  }
185
186  /**
187   * @deprecated since 2.5. See SONAR-2007.
188   */
189  @Deprecated
190  public static RuleMeasure createForCategory(Metric metric, Integer category, @Nullable Double value) {
191    return new RuleMeasure(metric, (RuleKey) null, null, category).setValue(value);
192  }
193}