001/*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2013 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube 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 * SonarQube 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.rules.Rule;
026import org.sonar.api.rules.RulePriority;
027
028import javax.annotation.Nullable;
029
030/**
031 * @since 1.10
032 */
033public class RuleMeasure extends Measure {
034
035  private Rule rule;
036  private RulePriority rulePriority;
037
038  /**
039   * This constructor is for internal use only. Please use static methods createForXXX().
040   */
041  public RuleMeasure(Metric metric, @Nullable Rule rule, @Nullable RulePriority rulePriority, @Nullable Integer ruleCategory) {
042    super(metric);
043    this.rule = rule;
044    this.rulePriority = rulePriority;
045  }
046
047  public Rule getRule() {
048    return rule;
049  }
050
051  public RuleMeasure setRule(Rule rule) {
052    this.rule = rule;
053    return this;
054  }
055
056  /**
057   * @deprecated since 2.14 use {@link #getSeverity()} instead. See SONAR-1829.
058   */
059  @Deprecated
060  public RulePriority getRulePriority() {
061    return rulePriority;
062  }
063
064  /**
065   * @since 2.14
066   */
067  public RulePriority getSeverity() {
068    return rulePriority;
069  }
070
071  /**
072   * @deprecated since 2.14 use {@link #setSeverity(org.sonar.api.rules.RulePriority)} instead. See SONAR-1829.
073   */
074  @Deprecated
075  public RuleMeasure setRulePriority(RulePriority rulePriority) {
076    this.rulePriority = rulePriority;
077    return this;
078  }
079
080  /**
081   * @since 2.14
082   */
083  public RuleMeasure setSeverity(RulePriority severity) {
084    this.rulePriority = severity;
085    return this;
086  }
087
088  /**
089   * @deprecated since 2.5. See SONAR-2007.
090   */
091  @Deprecated
092  public Integer getRuleCategory() {
093    return null;
094  }
095
096  /**
097   * @deprecated since 2.5. See SONAR-2007.
098   */
099  @Deprecated
100  public void setRuleCategory(Integer ruleCategory) {
101    // nothing
102  }
103
104  @Override
105  public boolean equals(Object obj) {
106    if (obj == null) {
107      return false;
108    }
109    if (!(obj.getClass().equals(RuleMeasure.class))) {// NOSONAR should be refactored but kept in the current state
110      // for the moment.
111      return false;
112    }
113    if (this == obj) {
114      return true;
115    }
116    RuleMeasure other = (RuleMeasure) obj;
117    return new EqualsBuilder()
118        .append(getMetric(), other.getMetric())
119        .append(personId, other.personId)
120        .append(rule, other.rule)
121        .isEquals();
122  }
123
124  @Override
125  public RuleMeasure setValue(@Nullable Double v) {
126    return (RuleMeasure) super.setValue(v);
127  }
128
129  @Override
130  public int hashCode() {
131    return new HashCodeBuilder(17, 37)
132        .append(getMetric())
133        .append(personId)
134        .append(rule)
135        .toHashCode();
136  }
137
138  @Override
139  public String toString() {
140    return new ToStringBuilder(this)
141        .append("id", getId())
142        .append("metric", metric)
143        .append("personId", personId)
144        .append("rule", rule)
145        .append("value", value)
146        .append("data", data)
147        .append("description", description)
148        .append("alertStatus", alertStatus)
149        .append("alertText", alertText)
150        .append("tendency", tendency)
151        .append("severity", rulePriority)
152        .toString();
153  }
154
155  public static RuleMeasure createForRule(Metric metric, Rule rule, @Nullable Double value) {
156    return new RuleMeasure(metric, rule, null, null).setValue(value);
157  }
158
159  public static RuleMeasure createForPriority(Metric metric, RulePriority priority, @Nullable Double value) {
160    return new RuleMeasure(metric, null, priority, null).setValue(value);
161  }
162
163  /**
164   * @deprecated since 2.5. See SONAR-2007.
165   */
166  @Deprecated
167  public static RuleMeasure createForCategory(Metric metric, Integer category, @Nullable Double value) {
168    return new RuleMeasure(metric, null, null, category).setValue(value);
169  }
170}