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.server.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.server.Characteristic;
027    import org.sonar.api.utils.WorkUnit;
028    import org.sonar.api.utils.internal.WorkDuration;
029    
030    import javax.annotation.CheckForNull;
031    import javax.annotation.Nullable;
032    
033    /**
034     * @since 4.1
035     * @deprecated since 4.3.
036     */
037    @Deprecated
038    public class DefaultCharacteristic implements Characteristic {
039    
040      private Integer id;
041      private String key;
042      private String name;
043      private Integer order;
044      private Integer parentId;
045      private Integer rootId;
046      private RuleKey ruleKey;
047      private String function;
048      private Integer factorValue;
049      private WorkDuration.UNIT factorUnit;
050      private Integer offsetValue;
051      private WorkDuration.UNIT offsetUnit;
052    
053      public Integer id() {
054        return id;
055      }
056    
057      public DefaultCharacteristic setId(Integer id) {
058        this.id = id;
059        return this;
060      }
061    
062      @CheckForNull
063      public String key() {
064        return key;
065      }
066    
067      public DefaultCharacteristic setKey(@Nullable String key) {
068        this.key = key;
069        return this;
070      }
071    
072      @CheckForNull
073      public String name() {
074        return name;
075      }
076    
077      public DefaultCharacteristic setName(@Nullable String name) {
078        this.name = name;
079        return this;
080      }
081    
082      @CheckForNull
083      public Integer order() {
084        return order;
085      }
086    
087      public DefaultCharacteristic setOrder(@Nullable Integer order) {
088        this.order = order;
089        return this;
090      }
091    
092      @CheckForNull
093      public Integer parentId() {
094        return parentId;
095      }
096    
097      public DefaultCharacteristic setParentId(@Nullable Integer parentId) {
098        this.parentId = parentId;
099        return this;
100      }
101    
102      @CheckForNull
103      public Integer rootId() {
104        return rootId;
105      }
106    
107      public DefaultCharacteristic setRootId(@Nullable Integer rootId) {
108        this.rootId = rootId;
109        return this;
110      }
111    
112      /**
113       * @deprecated since 4.2
114       */
115      @Deprecated
116      @CheckForNull
117      public RuleKey ruleKey() {
118        return ruleKey;
119      }
120    
121      /**
122       * @deprecated since 4.2
123       */
124      @Deprecated
125      public DefaultCharacteristic setRuleKey(@Nullable RuleKey ruleKey) {
126        this.ruleKey = ruleKey;
127        return this;
128      }
129    
130      /**
131       * @deprecated since 4.2
132       */
133      @Deprecated
134      @CheckForNull
135      public String function() {
136        return function;
137      }
138    
139      /**
140       * @deprecated since 4.2
141       */
142      @Deprecated
143      public DefaultCharacteristic setFunction(@Nullable String function) {
144        this.function = function;
145        return this;
146      }
147    
148      /**
149       * @deprecated since 4.2
150       */
151      @Deprecated
152      @CheckForNull
153      public WorkUnit factor() {
154        if (factorValue != null && factorUnit != null) {
155          return WorkUnit.create((double) factorValue, fromUnit(factorUnit));
156        }
157        return null;
158      }
159    
160      /**
161       * @deprecated since 4.2
162       */
163      @Deprecated
164      public DefaultCharacteristic setFactor(@Nullable WorkUnit factor) {
165        if (factor != null) {
166          this.factorValue = (int) factor.getValue();
167          this.factorUnit = toUnit(factor.getUnit());
168        }
169        return this;
170      }
171    
172      /**
173       * @deprecated since 4.3
174       */
175      @Deprecated
176      @CheckForNull
177      public Integer factorValue() {
178        return factorValue;
179      }
180    
181      /**
182       * @deprecated since 4.3
183       */
184      @Deprecated
185      public DefaultCharacteristic setFactorValue(@Nullable Integer factorValue) {
186        this.factorValue = factorValue;
187        return this;
188      }
189    
190      @CheckForNull
191      public WorkDuration.UNIT factorUnit() {
192        return factorUnit;
193      }
194    
195      /**
196       * @deprecated since 4.3
197       */
198      @Deprecated
199      public DefaultCharacteristic setFactorUnit(@Nullable WorkDuration.UNIT factorUnit) {
200        this.factorUnit = factorUnit;
201        return this;
202      }
203    
204      /**
205       * @deprecated since 4.2
206       */
207      @Deprecated
208      public WorkUnit offset() {
209        if (offsetValue != null && offsetUnit != null) {
210          return WorkUnit.create((double) offsetValue, fromUnit(offsetUnit));
211        }
212        return null;
213      }
214    
215      /**
216       * @deprecated since 4.2
217       */
218      @Deprecated
219      public DefaultCharacteristic setOffset(@Nullable WorkUnit offset) {
220        if (offset != null) {
221          this.offsetValue = (int) offset.getValue();
222          this.offsetUnit = toUnit(offset.getUnit());
223        }
224        return this;
225      }
226    
227      /**
228       * @deprecated since 4.3
229       */
230      @Deprecated
231      @CheckForNull
232      public Integer offsetValue() {
233        return offsetValue;
234      }
235    
236      /**
237       * @deprecated since 4.3
238       */
239      @Deprecated
240      public DefaultCharacteristic setOffsetValue(@Nullable Integer offsetValue) {
241        this.offsetValue = offsetValue;
242        return this;
243      }
244    
245      /**
246       * @deprecated since 4.3
247       */
248      @Deprecated
249      @CheckForNull
250      public WorkDuration.UNIT offsetUnit() {
251        return offsetUnit;
252      }
253    
254      /**
255       * @deprecated since 4.3
256       */
257      @Deprecated
258      public DefaultCharacteristic setOffsetUnit(@Nullable WorkDuration.UNIT offsetUnit) {
259        this.offsetUnit = offsetUnit;
260        return this;
261      }
262    
263      /**
264       * @deprecated since 4.3
265       */
266      @Deprecated
267      public static WorkDuration.UNIT toUnit(@Nullable String requirementUnit) {
268        if (requirementUnit != null) {
269          if (WorkUnit.DAYS.equals(requirementUnit)) {
270            return WorkDuration.UNIT.DAYS;
271          } else if (WorkUnit.HOURS.equals(requirementUnit)) {
272            return WorkDuration.UNIT.HOURS;
273          } else if (WorkUnit.MINUTES.equals(requirementUnit)) {
274            return WorkDuration.UNIT.MINUTES;
275          }
276          throw new IllegalStateException("Invalid unit : " + requirementUnit);
277        }
278        return null;
279      }
280    
281      private static String fromUnit(WorkDuration.UNIT unit) {
282        if (WorkDuration.UNIT.DAYS.equals(unit)) {
283          return WorkUnit.DAYS;
284        } else if (WorkDuration.UNIT.HOURS.equals(unit)) {
285          return WorkUnit.HOURS;
286        } else if (WorkDuration.UNIT.MINUTES.equals(unit)) {
287          return WorkUnit.MINUTES;
288        }
289        throw new IllegalStateException("Invalid unit : " + unit);
290      }
291    
292      public boolean isRoot() {
293        return parentId == null;
294      }
295    
296      /**
297       * @deprecated since 4.3
298       */
299      @Deprecated
300      public boolean isRequirement() {
301        return ruleKey != null;
302      }
303    
304      @Override
305      public boolean equals(Object o) {
306        if (this == o) {
307          return true;
308        }
309        if (o == null || getClass() != o.getClass()) {
310          return false;
311        }
312    
313        DefaultCharacteristic that = (DefaultCharacteristic) o;
314    
315        if (key != null ? !key.equals(that.key) : that.key != null) {
316          return false;
317        }
318        if (ruleKey != null ? !ruleKey.equals(that.ruleKey) : that.ruleKey != null) {
319          return false;
320        }
321    
322        return true;
323      }
324    
325      @Override
326      public int hashCode() {
327        int result = key != null ? key.hashCode() : 0;
328        result = 31 * result + (ruleKey != null ? ruleKey.hashCode() : 0);
329        return result;
330      }
331    
332      @Override
333      public String toString() {
334        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
335      }
336    
337    }