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    }