EmailsEntity.java
package sk.iway.iwcm.dmail.jpa;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.components.users.userdetail.UserDetailsEntity;
import sk.iway.iwcm.database.ActiveRecordRepository;
import sk.iway.iwcm.system.adminlog.EntityListenersType;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
@Entity
@Table(name = "emails")
@Getter
@Setter
@EntityListeners(sk.iway.iwcm.system.adminlog.AuditEntityListener.class)
@EntityListenersType(sk.iway.iwcm.Adminlog.TYPE_DMAIL)
public class EmailsEntity extends ActiveRecordRepository {
public EmailsEntity() {}
public EmailsEntity(String recipientEmail) {
this.recipientEmail = recipientEmail;
}
public EmailsEntity(String recipientEmail, String recipientName) {
this.recipientEmail = recipientEmail;
this.recipientName = recipientName;
}
//Set entity domain id
@PrePersist
public void prePersist() {
if(domainId == null) domainId = CloudToolsForCore.getDomainId();
}
@Id
@Column(name = "email_id")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "S_emails")
@DataTableColumn(inputType = DataTableColumnType.ID, title="ID", renderFormat = "dt-format-selector")
private Long id;
@Column(name = "recipient_name")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="user.Name"
)
@Size(max = 128)
private String recipientName;
@Column(name = "recipient_email")
@NotEmpty
@DataTableColumn(
inputType = DataTableColumnType.OPEN_EDITOR,
title="components.dmail.campaings.email.title",
editor = {
@DataTableColumnEditor( type = "textarea" )
}
)
private String recipientEmail;
/**
* During recipients adding, this flag is used to skip wrong emails.
* Used in campaigns.
*/
@Transient
@DataTableColumn(
inputType = DataTableColumnType.CHECKBOX,
title="components.datatables.data.skip_wrong",
hidden = true
)
private boolean skipWrongEmails;
@Column(name = "sent_date")
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.dmail.camp.sent_date",
hiddenEditor = true
)
private Date sentDate;
@Column(name = "seen_date")
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.dmail.camp.open_date",
hiddenEditor = true
)
private Date seenDate;
//Just info column about status
@Transient
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.campaings.status",
hiddenEditor = true
)
private String status;
//Not shown but used columns
@Column(name = "campain_id")
private Long campainId;
@Column(name = "recipient_user_id")
private Integer recipientUserId;
@OneToOne
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@JsonBackReference(value="userDetailsEntity")
@JoinColumn(name="recipient_user_id", insertable = false, updatable = false)
private UserDetailsEntity userDetailsEntity;
@Transient
@DataTableColumn(
inputType = DataTableColumnType.MULTISELECT,
title = "user.admin.userGroups",
hiddenEditor = true
)
private Integer[] groupIds;
@Column(name = "sender_name")
private String senderName;
@Column(name = "sender_email")
private String senderEmail;
@Column(name = "created_by_user_id")
private Integer createdByUserId;
@Column(name = "create_date")
private Date createDate;
@Column(name = "subject")
private String subject;
@Column(name = "url")
private String url;
@Column
private Boolean disabled;
@Column
private Integer retry;
@Column
private String attachments;
@Column(name = "reply_to")
private String replyTo;
@Column(name = "cc_email")
private String ccEmail;
@Column(name = "bcc_email")
private String bccEmail;
@Column(name = "send_at")
private Date sendAt;
@Column(name = "domain_id")
private Integer domainId;
public void setId(Long id) {
this. id = id;
}
public Integer[] getGroupIds() {
if(userDetailsEntity == null) return new Integer[0];
String ugi = userDetailsEntity.getUserGroupsIds();
if(Tools.isNotEmpty(ugi)) {
return Tools.getTokensInteger(ugi, ",");
}
return new Integer[0];
}
}