1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 }