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