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            .append(rulePriority, other.rulePriority)
094            .isEquals();
095      }
096    
097      @Override
098      public RuleMeasure setValue(Double v) {
099        return (RuleMeasure) super.setValue(v);
100      }
101    
102      @Override
103      public int hashCode() {
104        return new HashCodeBuilder(17, 37).
105            append(getMetric()).
106            append(rule).
107            append(rulePriority).
108            toHashCode();
109      }
110    
111      @Override
112      public String toString() {
113        return new ToStringBuilder(this).
114            append("id", getId()).
115            append("metric", metric).
116            append("value", value).
117            append("data", data).
118            append("description", description).
119            append("alertStatus", alertStatus).
120            append("alertText", alertText).
121            append("tendency", tendency).
122            append("rule", rule).
123            append("priority", rulePriority).
124            toString();
125      }
126    
127      public static RuleMeasure createForRule(Metric metric, Rule rule, Double value) {
128        return (RuleMeasure) new RuleMeasure(metric, rule, null, null).setValue(value);
129      }
130    
131      public static RuleMeasure createForPriority(Metric metric, RulePriority priority, Double value) {
132        return (RuleMeasure) new RuleMeasure(metric, null, priority, null).setValue(value);
133      }
134    
135      /**
136       * @deprecated since 2.5 See http://jira.codehaus.org/browse/SONAR-2007
137       */
138      @Deprecated
139      public static RuleMeasure createForCategory(Metric metric, Integer category, Double value) {
140        return (RuleMeasure) new RuleMeasure(metric, null, null, category).setValue(value);
141      }
142    }