package com.sap.hana.cloud.samples.benefits.persistence.model;
import static com.sap.hana.cloud.samples.benefits.persistence.model.DBQueries.GET_ACTIVE_CAMPAIGNS;
import static com.sap.hana.cloud.samples.benefits.persistence.model.DBQueries.GET_CAMPAIGN_BY_CASE_INSENSITIVE_NAME;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
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.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "CAMPAIGNS", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }) })
@NamedQueries({
@NamedQuery(name = GET_CAMPAIGN_BY_CASE_INSENSITIVE_NAME, query = "select c from Campaign c where UPPER(c.name) = UPPER(:name) and c.owner = :owner"),
@NamedQuery(name = GET_ACTIVE_CAMPAIGNS, query = "select c from Campaign c where c.active = 1 and c.owner = :owner") })
public class Campaign implements IDBEntity {
@Id
@GeneratedValue
@Column(name = "CAMPAIGN_ID")
private Long id;
@Basic
private String name;
@Basic
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "START_DATE")
private Date startDate;
@Basic
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "END_DATE")
private Date endDate;
@Basic
private boolean active;
@ManyToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "OWNER_ID", referencedColumnName = "ID")
private User owner;
@Column(name = "OWNER_ID", insertable = false, updatable = false)
private Long ownerId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "campaign", fetch = FetchType.EAGER, targetEntity = Order.class)
private List<Order> orders;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "campaign", fetch = FetchType.EAGER, targetEntity = UserPoints.class)
private List<UserPoints> userPoints;
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public boolean getActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public List<Order> getOrders() {
if (this.orders == null) {
this.orders = new ArrayList<>();
}
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
public List<UserPoints> getUserPoints() {
if (this.userPoints == null) {
this.userPoints = new ArrayList<>();
}
return userPoints;
}
public void addUserPoints(UserPoints points) {
getUserPoints().add(points);
if (points.getCampaign() != this) {
points.setCampaign(this);
}
}
public void setUserPoints(List<UserPoints> userPoints) {
this.userPoints = userPoints;
}
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
if (!owner.getCampaigns().contains(this)) {
owner.addCampaign(this);
}
}
public Long getOwnerId() {
return ownerId;
}
public void setOwnerId(Long ownerId) {
this.ownerId = ownerId;
}
}