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    
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.picocontainer.annotations.Nullable;
026    import org.sonar.api.rule.RuleKey;
027    import org.sonar.api.technicaldebt.batch.Requirement;
028    import org.sonar.api.utils.WorkUnit;
029    import org.sonar.api.utils.internal.WorkDuration;
030    
031    import javax.annotation.CheckForNull;
032    
033    import java.util.Date;
034    
035    /**
036     * @deprecated since 4.3
037     */
038    @Deprecated
039    public class DefaultRequirement implements Requirement {
040    
041      public static final String FUNCTION_LINEAR = "linear";
042      public static final String FUNCTION_LINEAR_WITH_OFFSET = "linear_offset";
043      public static final String CONSTANT_ISSUE = "constant_issue";
044    
045      private Integer id;
046      private RuleKey ruleKey;
047      private DefaultCharacteristic characteristic;
048      private DefaultCharacteristic rootCharacteristic;
049    
050      private String function;
051      private int factorValue;
052      private WorkDuration.UNIT factorUnit;
053      private int offsetValue;
054      private WorkDuration.UNIT offsetUnit;
055    
056      private Date createdAt;
057      private Date updatedAt;
058    
059      public Integer id() {
060        return id;
061      }
062    
063      public DefaultRequirement setId(Integer id) {
064        this.id = id;
065        return this;
066      }
067    
068      public RuleKey ruleKey() {
069        return ruleKey;
070      }
071    
072      public DefaultRequirement setRuleKey(RuleKey ruleKey) {
073        this.ruleKey = ruleKey;
074        return this;
075      }
076    
077      public DefaultCharacteristic characteristic() {
078        return characteristic;
079      }
080    
081      public DefaultRequirement setCharacteristic(DefaultCharacteristic characteristic) {
082        this.characteristic = characteristic;
083        this.characteristic.addRequirement(this);
084        return this;
085      }
086    
087      public DefaultCharacteristic rootCharacteristic() {
088        return rootCharacteristic;
089      }
090    
091      public DefaultRequirement setRootCharacteristic(DefaultCharacteristic rootCharacteristic) {
092        this.rootCharacteristic = rootCharacteristic;
093        return this;
094      }
095    
096      public String function() {
097        return function;
098      }
099    
100      public DefaultRequirement setFunction(String function) {
101        this.function = function;
102        return this;
103      }
104    
105      /**
106       * @deprecated since 4.2
107       */
108      @Deprecated
109      public WorkUnit factor() {
110        return WorkUnit.create((double) factorValue, fromUnit(factorUnit));
111      }
112    
113      /**
114       * @deprecated since 4.2
115       */
116      @Deprecated
117      public DefaultRequirement setFactor(WorkUnit factor) {
118        this.factorValue = (int) factor.getValue();
119        this.factorUnit = toUnit(factor.getUnit());
120        return this;
121      }
122    
123      public int factorValue() {
124        return factorValue;
125      }
126    
127      public DefaultRequirement setFactorValue(int factorValue) {
128        this.factorValue = factorValue;
129        return this;
130      }
131    
132      @CheckForNull
133      public WorkDuration.UNIT factorUnit() {
134        return factorUnit;
135      }
136    
137      public DefaultRequirement setFactorUnit(@Nullable WorkDuration.UNIT factorUnit) {
138        this.factorUnit = factorUnit;
139        return this;
140      }
141    
142      /**
143       * @deprecated since 4.2
144       */
145      @Deprecated
146      public WorkUnit offset() {
147        return WorkUnit.create((double) offsetValue, fromUnit(offsetUnit));
148      }
149    
150      /**
151       * @deprecated since 4.2
152       */
153      @Deprecated
154      public DefaultRequirement setOffset(WorkUnit offset) {
155        this.offsetValue = (int) offset.getValue();
156        this.offsetUnit = toUnit(offset.getUnit());
157        return this;
158      }
159    
160      public int offsetValue() {
161        return offsetValue;
162      }
163    
164      public DefaultRequirement setOffsetValue(int offsetValue) {
165        this.offsetValue = offsetValue;
166        return this;
167      }
168    
169      @CheckForNull
170      public WorkDuration.UNIT offsetUnit() {
171        return offsetUnit;
172      }
173    
174      public DefaultRequirement setOffsetUnit(@Nullable WorkDuration.UNIT offsetUnit) {
175        this.offsetUnit = offsetUnit;
176        return this;
177      }
178    
179      public Date createdAt() {
180        return createdAt;
181      }
182    
183      public DefaultRequirement setCreatedAt(Date createdAt) {
184        this.createdAt = createdAt;
185        return this;
186      }
187    
188      public Date updatedAt() {
189        return updatedAt;
190      }
191    
192      public DefaultRequirement setUpdatedAt(Date updatedAt) {
193        this.updatedAt = updatedAt;
194        return this;
195      }
196    
197      public static WorkDuration.UNIT toUnit(String requirementUnit){
198        if (WorkUnit.DAYS.equals(requirementUnit)) {
199          return WorkDuration.UNIT.DAYS;
200        } else if (WorkUnit.HOURS.equals(requirementUnit)) {
201          return WorkDuration.UNIT.HOURS;
202        } else if (WorkUnit.MINUTES.equals(requirementUnit)) {
203          return WorkDuration.UNIT.MINUTES;
204        }
205        throw new IllegalStateException("Invalid unit : " + requirementUnit);
206      }
207    
208      private static String fromUnit(WorkDuration.UNIT unit){
209        if (WorkDuration.UNIT.DAYS.equals(unit)) {
210          return WorkUnit.DAYS;
211        } else if (WorkDuration.UNIT.HOURS.equals(unit)) {
212          return WorkUnit.HOURS;
213        } else if (WorkDuration.UNIT.MINUTES.equals(unit)) {
214          return WorkUnit.MINUTES;
215        }
216        throw new IllegalStateException("Invalid unit : " + unit);
217      }
218    
219      @Override
220      public String toString() {
221        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
222      }
223    
224      @Override
225      public boolean equals(Object o) {
226        if (this == o) {
227          return true;
228        }
229        if (o == null || getClass() != o.getClass()) {
230          return false;
231        }
232    
233        DefaultRequirement that = (DefaultRequirement) o;
234    
235        if (!characteristic.equals(that.characteristic)) {
236          return false;
237        }
238        if (!ruleKey.equals(that.ruleKey)) {
239          return false;
240        }
241    
242        return true;
243      }
244    
245      @Override
246      public int hashCode() {
247        int result = ruleKey.hashCode();
248        result = 31 * result + characteristic.hashCode();
249        return result;
250      }
251    }