package com.sap.hana.cloud.samples.benefits.persistence.model;
import static com.sap.hana.cloud.samples.benefits.persistence.model.DBQueries.GET_USER_POINTS;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "USER_POINTS")
@NamedQueries({ @NamedQuery(name = GET_USER_POINTS, query = "select u from UserPoints u where u.user.userId = :userId and u.campaign.id = :campaignId") })
public class UserPoints implements IDBEntity {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "USER_ID", referencedColumnName = "ID")
private User user;
@Column(name = "USER_ID", insertable = false, updatable = false)
private Long userId;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "CAMPAIGN_ID", referencedColumnName = "CAMPAIGN_ID")
private Campaign campaign;
@Column(name = "CAMPAIGN_ID", insertable = false, updatable = false)
private Long campaignId;
@Basic
@Column(name = "ENTITLEMENT_POINTS")
private Long entitlementPoints;
@Basic
@Column(name = "AVAILABLE_POINTS")
private Long availablePoints;
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
if (!user.getUserPoints().contains(this)) {
user.addUserPoints(this);
}
}
public Campaign getCampaign() {
return campaign;
}
public void setCampaign(Campaign campaign) {
this.campaign = campaign;
if (!campaign.getUserPoints().contains(this)) {
campaign.addUserPoints(this);
}
}
public Long getAvailablePoints() {
return availablePoints;
}
public void setAvailablePoints(Long availablePoints) {
this.availablePoints = availablePoints;
}
public void addPoints(long points) {
this.availablePoints += points;
}
public void subtractPoints(long points) {
if ((this.availablePoints - points) < 0) {
throw new IllegalArgumentException("Available user points can not be less than zero"); //$NON-NLS-1$
}
this.availablePoints -= points;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getCampaignId() {
return campaignId;
}
public void setCampaignId(Long campaignId) {
this.campaignId = campaignId;
}
public Long getEntitlementPoints() {
return entitlementPoints;
}
public void setEntitlementPoints(Long entitlementPoints) {
this.entitlementPoints = entitlementPoints;
}
}