001    /*
002     * SonarQube, open source software quality management tool.
003     * Copyright (C) 2008-2013 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    
021    package org.sonar.api.technicaldebt.batch.internal;
022    
023    import org.apache.commons.lang.builder.ToStringBuilder;
024    import org.apache.commons.lang.builder.ToStringStyle;
025    import org.sonar.api.rule.RuleKey;
026    import org.sonar.api.technicaldebt.batch.Requirement;
027    import org.sonar.api.utils.WorkUnit;
028    
029    import java.util.Date;
030    
031    public class DefaultRequirement implements Requirement {
032    
033      public static final String FUNCTION_LINEAR = "linear";
034      public static final String FUNCTION_LINEAR_WITH_OFFSET = "linear_offset";
035      public static final String CONSTANT_ISSUE = "constant_issue";
036    
037      private Integer id;
038      private RuleKey ruleKey;
039      private DefaultCharacteristic characteristic;
040      private DefaultCharacteristic rootCharacteristic;
041    
042      private String function;
043      private WorkUnit factor;
044      private WorkUnit offset;
045    
046      private Date createdAt;
047      private Date updatedAt;
048    
049      public DefaultRequirement() {
050        this.factor = WorkUnit.create(0d, WorkUnit.DEFAULT_UNIT);
051        this.offset = WorkUnit.create(0d, WorkUnit.DEFAULT_UNIT);
052      }
053    
054      public Integer id() {
055        return id;
056      }
057    
058      public DefaultRequirement setId(Integer id) {
059        this.id = id;
060        return this;
061      }
062    
063      public RuleKey ruleKey() {
064        return ruleKey;
065      }
066    
067      public DefaultRequirement setRuleKey(RuleKey ruleKey) {
068        this.ruleKey = ruleKey;
069        return this;
070      }
071    
072      public DefaultCharacteristic characteristic() {
073        return characteristic;
074      }
075    
076      public DefaultRequirement setCharacteristic(DefaultCharacteristic characteristic) {
077        this.characteristic = characteristic;
078        this.characteristic.addRequirement(this);
079        return this;
080      }
081    
082      public DefaultCharacteristic rootCharacteristic() {
083        return rootCharacteristic;
084      }
085    
086      public DefaultRequirement setRootCharacteristic(DefaultCharacteristic rootCharacteristic) {
087        this.rootCharacteristic = rootCharacteristic;
088        return this;
089      }
090    
091      public String function() {
092        return function;
093      }
094    
095      public DefaultRequirement setFunction(String function) {
096        this.function = function;
097        return this;
098      }
099    
100      public WorkUnit factor() {
101        return factor;
102      }
103    
104      public DefaultRequirement setFactor(WorkUnit factor) {
105        this.factor = factor;
106        return this;
107      }
108    
109      public WorkUnit offset() {
110        return offset;
111      }
112    
113      public DefaultRequirement setOffset(WorkUnit offset) {
114        this.offset = offset;
115        return this;
116      }
117    
118      public Date createdAt() {
119        return createdAt;
120      }
121    
122      public DefaultRequirement setCreatedAt(Date createdAt) {
123        this.createdAt = createdAt;
124        return this;
125      }
126    
127      public Date updatedAt() {
128        return updatedAt;
129      }
130    
131      public DefaultRequirement setUpdatedAt(Date updatedAt) {
132        this.updatedAt = updatedAt;
133        return this;
134      }
135    
136    
137      @Override
138      public String toString() {
139        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
140      }
141    
142      @Override
143      public boolean equals(Object o) {
144        if (this == o) {
145          return true;
146        }
147        if (o == null || getClass() != o.getClass()) {
148          return false;
149        }
150    
151        DefaultRequirement that = (DefaultRequirement) o;
152    
153        if (!characteristic.equals(that.characteristic)) {
154          return false;
155        }
156        if (!ruleKey.equals(that.ruleKey)) {
157          return false;
158        }
159    
160        return true;
161      }
162    
163      @Override
164      public int hashCode() {
165        int result = ruleKey.hashCode();
166        result = 31 * result + characteristic.hashCode();
167        return result;
168      }
169    }