View Javadoc

1   /*
2    * Sonar, entreprise quality control tool.
3    * Copyright (C) 2007-2008 Hortis-GRC SA
4    * mailto:be_agile HAT hortis DOT ch
5    *
6    * Sonar is free software; you can redistribute it and/or
7    * modify it under the terms of the GNU Lesser General Public
8    * License as published by the Free Software Foundation; either
9    * version 3 of the License, or (at your option) any later version.
10   *
11   * Sonar is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   * Lesser General Public License for more details.
15   *
16   * You should have received a copy of the GNU Lesser General Public
17   * License along with {library}; if not, write to the Free Software
18   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
19   */
20  package ch.hortis.sonar.model;
21  
22  import org.apache.commons.lang.StringUtils;
23  import org.apache.commons.lang.builder.EqualsBuilder;
24  import org.apache.commons.lang.builder.HashCodeBuilder;
25  import org.apache.commons.lang.builder.ReflectionToStringBuilder;
26  
27  import javax.persistence.*;
28  import java.io.Serializable;
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  @Entity
33  @Table(name = "rule_failures")
34  public class RuleFailure implements Serializable {
35  
36    private static final long serialVersionUID = 6573631005994829171L;
37  
38    public static final int MESSAGE_COLUMN_SIZE = 500;
39  
40    @Id
41    @Column(name = "id")
42    @SequenceGenerator(name = "RULE_FAILURES_SEQ", sequenceName = "RULE_FAILURES_SEQ")
43    @GeneratedValue(strategy = GenerationType.AUTO, generator = "RULE_FAILURES_SEQ")
44    private Integer id;
45  
46    @Column(name = "snapshot_id")
47    protected Integer snapshotId;
48  
49    @ManyToOne(fetch = FetchType.EAGER)
50    @JoinColumn(name = "rule_id")
51    private Rule rule;
52  
53    @OneToMany(mappedBy = "ruleFailure", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
54    private List<RuleFailureParam> params;
55  
56    @Column(name = "failure_level", updatable = false, nullable = false)
57    @Enumerated(EnumType.ORDINAL)
58    private RuleFailureLevel failureLevel;
59  
60    @Column(name = "message", updatable = false, nullable = true, length = MESSAGE_COLUMN_SIZE)
61    private String message;
62  
63    public RuleFailure() {
64    }
65  
66    public RuleFailure(Rule rule, RuleFailureLevel level) {
67      this.rule = rule;
68      this.failureLevel = level;
69      this.params = new ArrayList<RuleFailureParam>();
70    }
71  
72    public RuleFailure(Rule rule, RuleFailureLevel level, Snapshot snapshot) {
73      this.rule = rule;
74      this.failureLevel = level;
75      this.params = new ArrayList<RuleFailureParam>();
76      this.snapshotId = snapshot.getId();
77    }
78  
79    public String getMessage() {
80      return message;
81    }
82  
83    public void setMessage(String message) {
84      this.message = StringUtils.abbreviate(message, MESSAGE_COLUMN_SIZE);
85    }
86  
87    public Integer getId() {
88      return id;
89    }
90  
91    public void setId(Integer id) {
92      this.id = id;
93    }
94  
95    public void setSnapshot(Snapshot snapshot) {
96      this.snapshotId = snapshot.getId();
97      for (RuleFailureParam param : params) {
98        param.setSnapshot(snapshot);
99      }
100   }
101 
102   public RuleFailureLevel getLevel() {
103     return failureLevel;
104   }
105 
106   public void setLevel(RuleFailureLevel level) {
107     this.failureLevel = level;
108   }
109 
110   public Rule getRule() {
111     return rule;
112   }
113 
114   public void setRule(Rule rule) {
115     this.rule = rule;
116   }
117 
118   public List<RuleFailureParam> getParameters() {
119     return params;
120   }
121 
122   public void setParameters(List<RuleFailureParam> ruleFailureParams) {
123     this.params = ruleFailureParams;
124   }
125 
126   public RuleFailureParam addParameter(String key, Double value) {
127     return addParameter(key, value, null);
128   }
129 
130   public RuleFailureParam addParameter(String key, Double value, Double value2) {
131     if (params == null) {
132       params = new ArrayList<RuleFailureParam>();
133     }
134     RuleFailureParam param = new RuleFailureParam(key, value, value2);
135     param.setRuleFailure(this);
136     params.add(param);
137     return param;
138   }
139 
140   public RuleFailureParam getParameter(String key) {
141     for (RuleFailureParam param : params) {
142       if (param!=null && param.getKey().equals(key)) {
143         return param;
144       }
145     }
146     return null;
147   }
148 
149   public boolean equals(Object obj) {
150     if (!(obj instanceof RuleFailure)) {
151       return false;
152     }
153     if (this == obj) {
154       return true;
155     }
156     RuleFailure other = (RuleFailure) obj;
157     return new EqualsBuilder()
158         .append(id, other.getId()).isEquals();
159   }
160 
161   public int hashCode() {
162     return new HashCodeBuilder(17, 37).
163         append(id).toHashCode();
164   }
165 
166   public String toString() {
167     return ReflectionToStringBuilder.toString(this);
168   }
169 }