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.builder.EqualsBuilder;
23  import org.apache.commons.lang.builder.HashCodeBuilder;
24  import org.hibernate.annotations.Cache;
25  import org.hibernate.annotations.CacheConcurrencyStrategy;
26  
27  import javax.persistence.*;
28  import java.io.Serializable;
29  import java.util.Date;
30  
31  @Entity
32  @Table(name = "snapshots")
33  @NamedQueries({@NamedQuery(name = Snapshot.SQL_SELECT_ALL, query = "SELECT m FROM Snapshot m, MavenProject pr"
34      + " WHERE m.mavenProject = pr.id" + " AND pr.id = :idProject ORDER BY m.createdAt"),
35  @NamedQuery(name = Snapshot.SQL_SELECT_FOR_DAY, query = "SELECT s FROM Snapshot s, MavenProject pr"
36      + " WHERE s.mavenProject = pr.id" + " AND pr.id = :idProject AND s.last=false and s.status=:status"
37      + " AND day(s.createdAt) = :day AND month(s.createdAt) = :month AND year(s.createdAt) = :year ORDER BY s.createdAt ASC"),
38  @NamedQuery(name = Snapshot.SQL_SELECT_TO_PURGE, query = "SELECT s FROM Snapshot s"
39      + " WHERE s.purged=false AND s.last=false AND s.status='" + Snapshot.STATUS_PROCESSED + "' AND s.root IS NULL"),
40  @NamedQuery(name = Snapshot.SQL_SELECT_UNPROCESSED_FOR_DATE, query = "SELECT s FROM Snapshot s"
41      + " WHERE s.createdAt < :createdAt AND s.status<>'" + Snapshot.STATUS_PROCESSED + "' AND s.parent is NULL")
42      })
43  public class Snapshot implements Serializable {
44  
45    public final static String SQL_SELECT_ALL = "Snapshot.selectAll";
46    public final static String SQL_SELECT_FOR_DAY = "Snapshot.selectForDay";
47    public static final String SQL_SELECT_TO_PURGE = "Snapshot.selectSnapshotsToPurge";
48    public static final String SQL_SELECT_UNPROCESSED_FOR_DATE = "Snapshot.selectUnprocessedFordate";
49  
50    private static final long serialVersionUID = -6637859483638004953L;
51  
52    public final static String STATUS_UNPROCESSED = "U";
53    public final static String STATUS_TO_PROCESS = "T";
54    public final static String STATUS_PROCESSING = "W";
55    public final static String STATUS_CONSOLIDATED = "C";
56    public final static String STATUS_PROCESSED = "P";
57  
58    @Id
59    @Column(name = "id")
60    @SequenceGenerator(name = "SNAPSHOTS_SEQ", sequenceName = "SNAPSHOTS_SEQ")
61    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SNAPSHOTS_SEQ")
62    private Integer id;
63  
64    @ManyToOne(fetch = FetchType.LAZY)
65    @JoinColumn(name = "project_id", updatable = false, nullable = false)
66    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
67    private MavenProject mavenProject;
68  
69    @Temporal(TemporalType.TIMESTAMP)
70    @Column(name = "created_at", updatable = false, nullable = false)
71    private Date createdAt;
72  
73    @Column(name = "version", updatable = true, nullable = true, length = 32)
74    private String version;
75  
76    @Column(name = "islast")
77    private Boolean last = Boolean.FALSE;
78  
79    @Column(name = "status")
80    private String status = STATUS_UNPROCESSED;
81  
82    @Column(name = "purged")
83    private Boolean purged = Boolean.FALSE;
84  
85    @Column(name = "scope", updatable = false, nullable = true, length = 3)
86    private String scope;
87  
88    @Column(name = "qualifier", updatable = false, nullable = true, length = 3)
89    private String qualifier;
90  
91    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
92    @JoinColumn(name = "root_snapshot_id", updatable = true, nullable = true)
93    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
94    private Snapshot root;
95  
96    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
97    @JoinColumn(name = "parent_snapshot_id", updatable = true, nullable = true)
98    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
99    private Snapshot parent;
100 
101   public Snapshot() {
102   }
103 
104   public Snapshot(MavenProject entity, boolean last, String status, Date date) {
105     this();
106     setMavenProject(entity);
107     this.status = status;
108     this.last = last;
109     this.createdAt = date;
110   }
111 
112   public Date getCreatedAt() {
113     return createdAt;
114   }
115 
116   public void setCreatedAt(Date createdAt) {
117     this.createdAt = createdAt;
118   }
119 
120   public Integer getId() {
121     return id;
122   }
123 
124   public void setId(Integer id) {
125     this.id = id;
126   }
127 
128   public MavenProject getMavenProject() {
129     return mavenProject;
130   }
131 
132   public void setMavenProject(MavenProject mavenProject) {
133     this.mavenProject = mavenProject;
134     this.scope = mavenProject.getScope();
135     this.qualifier = mavenProject.getQualifier();
136   }
137 
138   public String getVersion() {
139     return version;
140   }
141 
142   public void setVersion(String version) {
143     this.version = version;
144   }
145 
146   public Snapshot getParent() {
147     return parent;
148   }
149 
150   public void setParent(Snapshot parent) {
151     this.parent = parent;
152   }
153 
154   public Boolean getLast() {
155     return last;
156   }
157 
158   public void setLast(Boolean last) {
159     this.last = last;
160   }
161 
162   public String getStatus() {
163     return status;
164   }
165 
166   public void setStatus(String status) {
167     this.status = status;
168   }
169 
170   public Boolean getPurged() {
171     return purged;
172   }
173 
174   public void setPurged(Boolean purged) {
175     this.purged = purged;
176   }
177 
178   public String getScope() {
179     return scope;
180   }
181 
182   public void setScope(String scope) {
183     this.scope = scope;
184   }
185 
186   public String getQualifier() {
187     return qualifier;
188   }
189 
190   public void setQualifier(String qualifier) {
191     this.qualifier = qualifier;
192   }
193 
194   public Snapshot getRoot() {
195     return root;
196   }
197 
198   public void setRoot(Snapshot root) {
199     this.root = root;
200   }
201 
202   public boolean equals(Object obj) {
203     if (!(obj instanceof Snapshot)) {
204       return false;
205     }
206     if (this == obj) {
207       return true;
208     }
209     Snapshot other = (Snapshot) obj;
210     return new EqualsBuilder()
211         .append(mavenProject, other.getMavenProject())
212         .append(createdAt, other.getCreatedAt())
213         .isEquals();
214   }
215 
216   public int hashCode() {
217     return new HashCodeBuilder(17, 37)
218         .append(mavenProject)
219         .append(createdAt)
220         .toHashCode();
221   }
222 }