1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.opencastproject.usertracking.impl;
23
24 import org.opencastproject.usertracking.api.UserAction;
25 import org.opencastproject.usertracking.api.UserSession;
26
27 import java.util.Date;
28
29 import javax.persistence.Access;
30 import javax.persistence.AccessType;
31 import javax.persistence.Basic;
32 import javax.persistence.Column;
33 import javax.persistence.Entity;
34 import javax.persistence.GeneratedValue;
35 import javax.persistence.GenerationType;
36 import javax.persistence.Id;
37 import javax.persistence.Index;
38 import javax.persistence.JoinColumn;
39 import javax.persistence.Lob;
40 import javax.persistence.ManyToOne;
41 import javax.persistence.NamedQueries;
42 import javax.persistence.NamedQuery;
43 import javax.persistence.Table;
44 import javax.persistence.Temporal;
45 import javax.persistence.TemporalType;
46 import javax.xml.bind.annotation.XmlAccessType;
47 import javax.xml.bind.annotation.XmlAccessorType;
48 import javax.xml.bind.annotation.XmlElement;
49 import javax.xml.bind.annotation.XmlRootElement;
50 import javax.xml.bind.annotation.XmlType;
51
52
53
54
55 @Entity(name = "UserAction")
56 @Access(AccessType.FIELD)
57 @Table(name = "oc_user_action", indexes = {
58 @Index(name = "IX_oc_user_action_created", columnList = "created"),
59 @Index(name = "IX_oc_user_action_inpoint", columnList = "inpoint"),
60 @Index(name = "IX_oc_user_action_outpoint", columnList = "outpoint"),
61 @Index(name = "IX_oc_user_action_mediapackage_id", columnList = "mediapackage"),
62 @Index(name = "IX_oc_user_action_type", columnList = "type")})
63 @NamedQueries({
64 @NamedQuery(name = "findUserActions", query = "SELECT a FROM UserAction a"),
65 @NamedQuery(name = "countSessionsGroupByMediapackage", query = "SELECT a.mediapackageId, COUNT(distinct a.session), SUM(a.length) FROM UserAction a GROUP BY a.mediapackageId"),
66 @NamedQuery(name = "countSessionsGroupByMediapackageByIntervall", query = "SELECT a.mediapackageId, COUNT(distinct a.session.sessionId), SUM(a.length) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end GROUP BY a.mediapackageId"),
67 @NamedQuery(name = "countSessionsOfMediapackage", query = "SELECT COUNT(distinct a.session) FROM UserAction a WHERE a.mediapackageId = :mediapackageId"),
68 @NamedQuery(name = "findLastUserFootprintOfSession", query = "SELECT a FROM UserAction a WHERE a.session = :session AND a.type = \'FOOTPRINT\' ORDER BY a.created DESC"),
69 @NamedQuery(name = "findLastUserActionsOfSession", query = "SELECT a FROM UserAction a WHERE a.session = :session ORDER BY a.created DESC"),
70 @NamedQuery(name = "findUserActionsByType", query = "SELECT a FROM UserAction a WHERE a.type = :type"),
71 @NamedQuery(name = "findUserActionsByTypeAndMediapackageId", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type"),
72 @NamedQuery(name = "findUserActionsByTypeAndMediapackageIdOrderByOutpointDESC", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.outpoint DESC"),
73 @NamedQuery(name = "findUserActionsByTypeAndMediapackageIdByUserOrderByOutpointDESC", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type AND a.session.userId = :userid ORDER BY a.outpoint DESC"),
74 @NamedQuery(name = "findUserActionsByIntervall", query = "SELECT a FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
75 @NamedQuery(name = "findUserActionsByTypeAndIntervall", query = "SELECT a FROM UserAction a WHERE :begin <= a.created AND a.created <= :end AND a.type = :type"),
76 @NamedQuery(name = "findTotal", query = "SELECT COUNT(a) FROM UserAction a"),
77 @NamedQuery(name = "findTotalByType", query = "SELECT COUNT(a) FROM UserAction a WHERE a.type = :type"),
78 @NamedQuery(name = "findTotalByTypeAndMediapackageId", query = "SELECT COUNT(a) FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type"),
79 @NamedQuery(name = "findTotalByIntervall", query = "SELECT COUNT(a) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
80 @NamedQuery(name = "findDistinctEpisodeIdTotalByIntervall", query = "SELECT COUNT(distinct a.mediapackageId) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
81 @NamedQuery(name = "findTotalByTypeAndIntervall", query = "SELECT COUNT(a) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end AND a.type = :type"),
82 @NamedQuery(name = "findUserActionsByMediaPackageAndTypeAscendingByDate", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.created"),
83 @NamedQuery(name = "findUserActionsByMediaPackageAndTypeDescendingByDate", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.created DESC") })
84 @XmlType(name = "action", namespace = "http://usertracking.opencastproject.org")
85 @XmlRootElement(name = "action", namespace = "http://usertracking.opencastproject.org")
86 @XmlAccessorType(XmlAccessType.FIELD)
87 public class UserActionImpl implements UserAction {
88
89 @Id
90 @Column(name = "id")
91 @GeneratedValue(strategy = GenerationType.AUTO)
92 @XmlElement(name = "id")
93 private Long id;
94
95 @Column(name = "mediapackage", length = 128)
96 @XmlElement(name = "mediapackageId")
97 private String mediapackageId;
98
99 @ManyToOne(targetEntity = UserSessionImpl.class)
100 @JoinColumn(name = "session_id")
101 @XmlElement(name = "sessionId")
102 private UserSessionImpl session;
103
104 @Column(name = "inpoint")
105 @XmlElement(name = "inpoint")
106 private int inpoint;
107
108 @Column(name = "outpoint")
109 @XmlElement(name = "outpoint")
110 private int outpoint;
111
112 @Column(name = "length")
113 @XmlElement(name = "length")
114 private int length;
115
116 @Lob
117 @Column(name = "type", length = 128)
118 @XmlElement(name = "type")
119 private String type;
120
121 @Column(name = "playing")
122 @XmlElement(name = "isPlaying")
123 private boolean isPlaying;
124
125 @Basic(optional = false)
126 @Column(name = "created")
127 @Temporal(TemporalType.TIMESTAMP)
128 @XmlElement(name = "created")
129 private Date created = new Date();
130
131
132
133
134 public UserActionImpl() {
135 }
136
137 @Override
138 public Long getId() {
139 return id;
140 }
141
142 @Override
143 public void setId(Long id) {
144 this.id = id;
145 }
146
147 @Override
148 public void setSession(UserSession session) {
149 this.session = (UserSessionImpl) session;
150 }
151
152 @Override
153 public UserSession getSession() {
154 return session;
155 }
156
157 @Override
158 public String getMediapackageId() {
159 return mediapackageId;
160 }
161
162 @Override
163 public void setMediapackageId(String mediapackageId) {
164 this.mediapackageId = mediapackageId;
165 }
166
167 @Override
168 public int getInpoint() {
169 return inpoint;
170 }
171
172 @Override
173 public void setInpoint(int inpoint) {
174 this.inpoint = inpoint;
175 updateLength();
176 }
177
178 @Override
179 public int getOutpoint() {
180 return outpoint;
181 }
182
183 @Override
184 public void setOutpoint(int outpoint) {
185 this.outpoint = outpoint;
186 updateLength();
187 }
188
189 @Override
190 public int getLength() {
191 return length;
192 }
193
194 @Override
195 public String getType() {
196 return type;
197 }
198
199 @Override
200 public void setType(String type) {
201 this.type = type;
202 }
203
204 @Override
205 public boolean getIsPlaying() {
206 return isPlaying;
207 }
208
209 @Override
210 public void setIsPlaying(boolean isPlaying) {
211 this.isPlaying = isPlaying;
212 }
213
214 @Override
215 public Date getCreated() {
216 return created;
217 }
218
219 public void setCreated(Date created) {
220 this.created = created;
221 }
222
223 private void updateLength() {
224 this.length = this.outpoint - this.inpoint;
225 }
226 }