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.StringUtils;
024 import org.apache.commons.lang.builder.ToStringBuilder;
025 import org.apache.commons.lang.builder.ToStringStyle;
026 import org.sonar.api.technicaldebt.batch.Characteristic;
027
028 import javax.annotation.CheckForNull;
029 import javax.annotation.Nullable;
030
031 import java.util.Date;
032 import java.util.List;
033
034 import static com.google.common.collect.Lists.newArrayList;
035
036 /**
037 * @deprecated since 4.3
038 */
039 @Deprecated
040 public class DefaultCharacteristic implements Characteristic {
041
042 private Integer id;
043 private String key;
044 private String name;
045 private Integer order;
046 private DefaultCharacteristic parent;
047 private DefaultCharacteristic root;
048 private List<DefaultCharacteristic> children;
049 private List<DefaultRequirement> requirements;
050
051 private Date createdAt;
052 private Date updatedAt;
053
054 public DefaultCharacteristic() {
055 this.children = newArrayList();
056 this.requirements = newArrayList();
057 }
058
059 @Override
060 public Integer id() {
061 return id;
062 }
063
064 public DefaultCharacteristic setId(Integer id) {
065 this.id = id;
066 return this;
067 }
068
069 @Override
070 public String key() {
071 return key;
072 }
073
074 public DefaultCharacteristic setKey(String key) {
075 this.key = StringUtils.trimToNull(key);
076 return this;
077 }
078
079 @Override
080 public String name() {
081 return name;
082 }
083
084 public DefaultCharacteristic setName(String name) {
085 this.name = name;
086 return this;
087 }
088
089 public DefaultCharacteristic setName(String s, boolean asKey) {
090 this.name = StringUtils.trimToNull(s);
091 if (asKey) {
092 this.key = StringUtils.upperCase(this.name);
093 this.key = StringUtils.replaceChars(this.key, ' ', '_');
094 }
095 return this;
096 }
097
098 @Override
099 @CheckForNull
100 public Integer order() {
101 return order;
102 }
103
104 public DefaultCharacteristic setOrder(@Nullable Integer order) {
105 this.order = order;
106 return this;
107 }
108
109 @Override
110 @CheckForNull
111 public DefaultCharacteristic parent() {
112 return parent;
113 }
114
115 public DefaultCharacteristic setParent(@Nullable DefaultCharacteristic parent) {
116 if (parent != null) {
117 this.parent = parent;
118 parent.addChild(this);
119 }
120 return this;
121 }
122
123 @CheckForNull
124 public DefaultCharacteristic root() {
125 return root;
126 }
127
128 public DefaultCharacteristic setRoot(@Nullable DefaultCharacteristic root) {
129 this.root = root;
130 return this;
131 }
132
133 @Override
134 public List<DefaultCharacteristic> children() {
135 return children;
136 }
137
138 private DefaultCharacteristic addChild(DefaultCharacteristic child) {
139 this.children.add(child);
140 return this;
141 }
142
143 public List<DefaultRequirement> requirements() {
144 return requirements;
145 }
146
147 public DefaultCharacteristic addRequirement(DefaultRequirement requirement) {
148 this.requirements.add(requirement);
149 return this;
150 }
151
152 @Override
153 public boolean isRoot() {
154 return parent == null;
155 }
156
157 @Override
158 public Date createdAt() {
159 return createdAt;
160 }
161
162 public DefaultCharacteristic setCreatedAt(Date createdAt) {
163 this.createdAt = createdAt;
164 return this;
165 }
166
167 @Override
168 @CheckForNull
169 public Date updatedAt() {
170 return updatedAt;
171 }
172
173 public DefaultCharacteristic setUpdatedAt(@Nullable Date updatedAt) {
174 this.updatedAt = updatedAt;
175 return this;
176 }
177
178 @Override
179 public String toString() {
180 return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
181 }
182
183 @Override
184 public boolean equals(Object o) {
185 if (this == o) {
186 return true;
187 }
188 if (o == null || getClass() != o.getClass()) {
189 return false;
190 }
191 DefaultCharacteristic that = (DefaultCharacteristic) o;
192 return key.equals(that.key);
193 }
194
195 @Override
196 public int hashCode() {
197 return key.hashCode();
198 }
199 }