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