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