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.rules.Rule;
026 import org.sonar.api.rules.RulePriority;
027
028 import javax.annotation.Nullable;
029
030 /**
031 * @since 1.10
032 */
033 public 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 }