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