/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License
* at:
*
* http://opensource.org/licenses/ecl2.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*/
package org.opencastproject.usertracking.impl;
import org.opencastproject.usertracking.api.UserAction;
import org.opencastproject.usertracking.api.UserSession;
import java.util.Date;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* A JAXB-annotated implementation of {@link UserAction}
*/
@Entity(name = "UserAction")
@Access(AccessType.FIELD)
@Table(name = "mh_user_action")
@NamedQueries({
@NamedQuery(name = "findUserActions", query = "SELECT a FROM UserAction a"),
@NamedQuery(name = "countSessionsGroupByMediapackage", query = "SELECT a.mediapackageId, COUNT(distinct a.session), SUM(a.length) FROM UserAction a GROUP BY a.mediapackageId"),
@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"),
@NamedQuery(name = "countSessionsOfMediapackage", query = "SELECT COUNT(distinct a.session) FROM UserAction a WHERE a.mediapackageId = :mediapackageId"),
@NamedQuery(name = "findLastUserFootprintOfSession", query = "SELECT a FROM UserAction a WHERE a.session = :session AND a.type = \'FOOTPRINT\' ORDER BY a.created DESC"),
@NamedQuery(name = "findLastUserActionsOfSession", query = "SELECT a FROM UserAction a WHERE a.session = :session ORDER BY a.created DESC"),
@NamedQuery(name = "findUserActionsByType", query = "SELECT a FROM UserAction a WHERE a.type = :type"),
@NamedQuery(name = "findUserActionsByTypeAndMediapackageId", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type"),
@NamedQuery(name = "findUserActionsByTypeAndMediapackageIdOrderByOutpointDESC", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.outpoint DESC"),
@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"),
@NamedQuery(name = "findUserActionsByIntervall", query = "SELECT a FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
@NamedQuery(name = "findUserActionsByTypeAndIntervall", query = "SELECT a FROM UserAction a WHERE :begin <= a.created AND a.created <= :end AND a.type = :type"),
@NamedQuery(name = "findTotal", query = "SELECT COUNT(a) FROM UserAction a"),
@NamedQuery(name = "findTotalByType", query = "SELECT COUNT(a) FROM UserAction a WHERE a.type = :type"),
@NamedQuery(name = "findTotalByTypeAndMediapackageId", query = "SELECT COUNT(a) FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type"),
@NamedQuery(name = "findTotalByIntervall", query = "SELECT COUNT(a) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
@NamedQuery(name = "findDistinctEpisodeIdTotalByIntervall", query = "SELECT COUNT(distinct a.mediapackageId) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end"),
@NamedQuery(name = "findTotalByTypeAndIntervall", query = "SELECT COUNT(a) FROM UserAction a WHERE :begin <= a.created AND a.created <= :end AND a.type = :type"),
@NamedQuery(name = "findUserActionsByMediaPackageAndTypeAscendingByDate", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.created"),
@NamedQuery(name = "findUserActionsByMediaPackageAndTypeDescendingByDate", query = "SELECT a FROM UserAction a WHERE a.mediapackageId = :mediapackageId AND a.type = :type ORDER BY a.created DESC") })
@XmlType(name = "action", namespace = "http://usertracking.opencastproject.org")
@XmlRootElement(name = "action", namespace = "http://usertracking.opencastproject.org")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserActionImpl implements UserAction {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
@XmlElement(name = "id")
private Long id;
@Lob
@Column(name = "mediapackage", length = 128)
@XmlElement(name = "mediapackageId")
private String mediapackageId;
@ManyToOne(targetEntity = UserSessionImpl.class)
@JoinColumn(name = "session_id", nullable = false)
@XmlElement(name = "sessionId")
private UserSessionImpl session;
@Column(name = "inpoint")
@XmlElement(name = "inpoint")
private int inpoint;
@Column(name = "outpoint")
@XmlElement(name = "outpoint")
private int outpoint;
@Column(name = "length")
@XmlElement(name = "length")
private int length;
@Lob
@Column(name = "type", length = 128)
@XmlElement(name = "type")
private String type;
@Column(name = "playing")
@XmlElement(name = "isPlaying")
private boolean isPlaying;
@Basic(optional = false)
@Column(name = "created")
@Temporal(TemporalType.TIMESTAMP)
@XmlElement(name = "created")
private Date created = new Date();
/**
* A no-arg constructor needed by JAXB
*/
public UserActionImpl() {
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public void setSession(UserSession session) {
this.session = (UserSessionImpl) session;
}
@Override
public UserSession getSession() {
return session;
}
@Override
public String getMediapackageId() {
return mediapackageId;
}
@Override
public void setMediapackageId(String mediapackageId) {
this.mediapackageId = mediapackageId;
}
@Override
public int getInpoint() {
return inpoint;
}
@Override
public void setInpoint(int inpoint) {
this.inpoint = inpoint;
updateLength();
}
@Override
public int getOutpoint() {
return outpoint;
}
@Override
public void setOutpoint(int outpoint) {
this.outpoint = outpoint;
updateLength();
}
@Override
public int getLength() {
return length;
}
@Override
public String getType() {
return type;
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public boolean getIsPlaying() {
return isPlaying;
}
@Override
public void setIsPlaying(boolean isPlaying) {
this.isPlaying = isPlaying;
}
@Override
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
private void updateLength() {
this.length = this.outpoint - this.inpoint;
}
}