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