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
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;
028
029import javax.annotation.CheckForNull;
030import javax.annotation.Nullable;
031
032/**
033 * @since 4.1
034 */
035public class DefaultCharacteristic implements Characteristic {
036
037  private Integer id;
038  private String key;
039  private String name;
040  private Integer order;
041  private Integer parentId;
042  private Integer rootId;
043  private RuleKey ruleKey;
044  private String function;
045  private WorkUnit factor;
046  private WorkUnit offset;
047
048  public Integer id() {
049    return id;
050  }
051
052  public DefaultCharacteristic setId(Integer id) {
053    this.id = id;
054    return this;
055  }
056
057  @CheckForNull
058  public String key() {
059    return key;
060  }
061
062  public DefaultCharacteristic setKey(@Nullable String key) {
063    this.key = key;
064    return this;
065  }
066
067  @CheckForNull
068  public String name() {
069    return name;
070  }
071
072  public DefaultCharacteristic setName(@Nullable String name) {
073    this.name = name;
074    return this;
075  }
076
077  @CheckForNull
078  public Integer order() {
079    return order;
080  }
081
082  public DefaultCharacteristic setOrder(@Nullable Integer order) {
083    this.order = order;
084    return this;
085  }
086
087  @CheckForNull
088  public Integer parentId() {
089    return parentId;
090  }
091
092  public DefaultCharacteristic setParentId(@Nullable Integer parentId) {
093    this.parentId = parentId;
094    return this;
095  }
096
097  @CheckForNull
098  public Integer rootId() {
099    return rootId;
100  }
101
102  public DefaultCharacteristic setRootId(@Nullable Integer rootId) {
103    this.rootId = rootId;
104    return this;
105  }
106
107  @CheckForNull
108  public RuleKey ruleKey() {
109    return ruleKey;
110  }
111
112  public DefaultCharacteristic setRuleKey(@Nullable RuleKey ruleKey) {
113    this.ruleKey = ruleKey;
114    return this;
115  }
116
117  @CheckForNull
118  public String function() {
119    return function;
120  }
121
122  public DefaultCharacteristic setFunction(@Nullable String function) {
123    this.function = function;
124    return this;
125  }
126
127  @CheckForNull
128  public WorkUnit factor() {
129    return factor;
130  }
131
132  public DefaultCharacteristic setFactor(@Nullable WorkUnit factor) {
133    this.factor = factor;
134    return this;
135  }
136
137  @CheckForNull
138  public WorkUnit offset() {
139    return offset;
140  }
141
142  public DefaultCharacteristic setOffset(@Nullable WorkUnit offset) {
143    this.offset = offset;
144    return this;
145  }
146
147  public boolean isRoot() {
148    return parentId == null;
149  }
150
151  public boolean isRequirement() {
152    return ruleKey != null;
153  }
154
155  @Override
156  public boolean equals(Object o) {
157    if (this == o) {
158      return true;
159    }
160    if (o == null || getClass() != o.getClass()) {
161      return false;
162    }
163
164    DefaultCharacteristic that = (DefaultCharacteristic) o;
165
166    if (key != null ? !key.equals(that.key) : that.key != null) {
167      return false;
168    }
169    if (ruleKey != null ? !ruleKey.equals(that.ruleKey) : that.ruleKey != null) {
170      return false;
171    }
172
173    return true;
174  }
175
176  @Override
177  public int hashCode() {
178    int result = key != null ? key.hashCode() : 0;
179    result = 31 * result + (ruleKey != null ? ruleKey.hashCode() : 0);
180    return result;
181  }
182
183  @Override
184  public String toString() {
185    return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
186  }
187
188}