001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 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     */
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    /**
029     * @since 1.10
030     */
031    public 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 void setRule(Rule rule) {
050        this.rule = rule;
051      }
052    
053      public RulePriority getRulePriority() {
054        return rulePriority;
055      }
056    
057      public void setRulePriority(RulePriority rulePriority) {
058        this.rulePriority = rulePriority;
059      }
060    
061      /**
062       * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
063       */
064      @Deprecated
065      public Integer getRuleCategory() {
066        return null;
067      }
068    
069      /**
070       * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
071       */
072      @Deprecated
073      public void setRuleCategory(Integer ruleCategory) {
074    
075      }
076    
077      @Override
078      public boolean equals(Object obj) {
079        if (obj == null) {
080          return false;
081        }
082        if (!(obj.getClass().equals(RuleMeasure.class))) {//NOSONAR should be refactored but kept in the current state
083          // for the moment.
084          return false;
085        }
086        if (this == obj) {
087          return true;
088        }
089        RuleMeasure other = (RuleMeasure) obj;
090        return new EqualsBuilder()
091          .append(getMetric(), other.getMetric())
092          .append(rule, other.rule)
093          .isEquals();
094      }
095    
096      @Override
097      public RuleMeasure setValue(Double v) {
098        return (RuleMeasure) super.setValue(v);
099      }
100    
101      @Override
102      public int hashCode() {
103        return new HashCodeBuilder(17, 37).
104          append(getMetric()).
105          append(rule).
106          toHashCode();
107      }
108    
109      @Override
110      public String toString() {
111        return new ToStringBuilder(this).
112          append("id", getId()).
113          append("metric", metric).
114          append("rule", rule).
115          append("value", value).
116          append("data", data).
117          append("description", description).
118          append("alertStatus", alertStatus).
119          append("alertText", alertText).
120          append("tendency", tendency).
121          append("severity", rulePriority).
122          toString();
123      }
124    
125      public static RuleMeasure createForRule(Metric metric, Rule rule, Double value) {
126        return new RuleMeasure(metric, rule, null, null).setValue(value);
127      }
128    
129      public static RuleMeasure createForPriority(Metric metric, RulePriority priority, Double value) {
130        return new RuleMeasure(metric, null, priority, null).setValue(value);
131      }
132    
133      /**
134       * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
135       */
136      @Deprecated
137      public static RuleMeasure createForCategory(Metric metric, Integer category, Double value) {
138        return (RuleMeasure) new RuleMeasure(metric, null, null, category).setValue(value);
139      }
140    }