001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar 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 * Sonar 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
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.api.rules;
021
022 import org.apache.commons.lang.builder.*;
023 import org.sonar.api.database.BaseIdentifiable;
024 import org.sonar.api.profiles.RulesProfile;
025
026 import java.util.ArrayList;
027 import java.util.Calendar;
028 import java.util.Date;
029 import java.util.List;
030
031 import javax.persistence.*;
032
033 /**
034 * A class to map a RuleChange to the hibernate model
035 *
036 * @since 2.9
037 */
038 @Entity
039 @Table(name = "active_rule_changes")
040 public class ActiveRuleChange extends BaseIdentifiable {
041
042 @Column(name = "user_name", updatable = false, nullable = false)
043 private String userName;
044
045 @ManyToOne(fetch = FetchType.EAGER)
046 @JoinColumn(name = "profile_id", updatable = false, nullable = false)
047 private RulesProfile rulesProfile;
048
049 @Column(name = "profile_version", updatable = false, nullable = false)
050 private int profileVersion;
051
052 @ManyToOne(fetch = FetchType.EAGER)
053 @JoinColumn(name = "rule_id", updatable = false, nullable = false)
054 private Rule rule;
055
056 @Column(name = "change_date", updatable = false, nullable = false)
057 private Date date;
058
059 /**
060 * true means rule was enabled
061 * false means rule was disabled
062 * null means rule stay enabled (another param was changed)
063 */
064 @Column(name = "enabled")
065 private Boolean enabled;
066
067 @Column(name = "old_severity", updatable = false, nullable = true)
068 @Enumerated(EnumType.ORDINAL)
069 private RulePriority oldSeverity;
070
071 @Column(name = "new_severity", updatable = false, nullable = true)
072 @Enumerated(EnumType.ORDINAL)
073 private RulePriority newSeverity;
074
075 @OneToMany(mappedBy = "activeRuleChange", fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE })
076 private List<ActiveRuleParamChange> activeRuleParamChanges = new ArrayList<ActiveRuleParamChange>();
077
078 public ActiveRuleChange(String userName, RulesProfile profile, Rule rule) {
079 this.userName = userName;
080 this.rulesProfile = profile;
081 this.profileVersion = profile.getVersion();
082 this.rule = rule;
083 this.date = Calendar.getInstance().getTime();
084 }
085
086 public Rule getRule() {
087 return rule;
088 }
089
090 public RulePriority getOldSeverity() {
091 return oldSeverity;
092 }
093
094 public void setOldSeverity(RulePriority oldSeverity) {
095 this.oldSeverity = oldSeverity;
096 }
097
098 public RulePriority getNewSeverity() {
099 return newSeverity;
100 }
101
102 public void setNewSeverity(RulePriority newSeverity) {
103 this.newSeverity = newSeverity;
104 }
105
106 public RulesProfile getRulesProfile() {
107 return rulesProfile;
108 }
109
110 public int getProfileVersion() {
111 return profileVersion;
112 }
113
114 public String getRepositoryKey() {
115 return rule.getRepositoryKey();
116 }
117
118 /**
119 * @return the config key the changed rule belongs to
120 */
121 public String getConfigKey() {
122 return rule.getConfigKey();
123 }
124
125 /**
126 * @return the key of the changed rule
127 */
128 public String getRuleKey() {
129 return rule.getKey();
130 }
131
132 public Boolean isEnabled() {
133 return enabled;
134 }
135
136 public void setEnabled(Boolean enabled) {
137 this.enabled = enabled;
138 }
139
140 public List<ActiveRuleParamChange> getActiveRuleParamChanges() {
141 return activeRuleParamChanges;
142 }
143
144 public String getUserName() {
145 return userName;
146 }
147
148 public ActiveRuleChange setParameterChange(String key, String oldValue, String newValue) {
149 RuleParam ruleParameter = rule.getParam(key);
150 if (ruleParameter != null) {
151 activeRuleParamChanges.add(new ActiveRuleParamChange(this, ruleParameter, oldValue, newValue));
152 }
153 return this;
154 }
155
156 @Override
157 public boolean equals(Object obj) {
158 if (obj == null) {
159 return false;
160 }
161 if (obj == this) {
162 return true;
163 }
164 if (obj.getClass() != getClass()) {
165 return false;
166 }
167 ActiveRuleChange rhs = (ActiveRuleChange) obj;
168 return new EqualsBuilder()
169 .appendSuper(super.equals(obj))
170 .append(userName, rhs.userName)
171 .append(rulesProfile, rhs.rulesProfile)
172 .append(rule, rhs.rule)
173 .append(date, rhs.date)
174 .append(enabled, rhs.enabled)
175 .append(newSeverity, rhs.newSeverity)
176 .isEquals();
177 }
178
179 @Override
180 public int hashCode() {
181 return new HashCodeBuilder(41, 33)
182 .append(userName)
183 .append(rulesProfile)
184 .append(rule)
185 .append(date)
186 .append(enabled)
187 .append(newSeverity)
188 .toHashCode();
189 }
190
191 @Override
192 public String toString() {
193 return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();
194 }
195
196 }