CampaingsEntity.java
package sk.iway.iwcm.dmail.jpa;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
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.PrePersist;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Email;
import javax.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.system.adminlog.EntityListenersType;
import sk.iway.iwcm.system.annotations.validations.MultipleEmails;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnNested;
@Entity
@Table(name = "emails_campain")
@Getter
@Setter
@EntityListeners(sk.iway.iwcm.system.adminlog.AuditEntityListener.class)
@EntityListenersType(sk.iway.iwcm.Adminlog.TYPE_DMAIL)
public class CampaingsEntity implements Serializable {
//Set entity domain id
@PrePersist
public void prePersist() {
if(domainId == null) domainId = CloudToolsForCore.getDomainId();
}
@Id
@Column(name = "emails_campain_id")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "S_emails_campain")
@DataTableColumn(inputType = DataTableColumnType.ID, title="ID", tab = "main")
private Long id;
@Column(name = "subject")
@DataTableColumn(
inputType = DataTableColumnType.OPEN_EDITOR,
title="components.dmail.camp.subject",
tab = "main",
sortAfter = "editorFields.pageToSend"
)
@Size(max = 255)
private String subject;
@Column(name = "sender_name")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="user.Name",
tab = "main",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "email.sender"),
}
)
}
)
@Size(max = 255)
private String senderName;
@Column(name = "sender_email")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="user.email",
tab = "main"
)
@Size(max = 255)
@Email
private String senderEmail;
@Column(name = "url")
@DataTableColumn(inputType = DataTableColumnType.HIDDEN)
private String url;
@Column(name = "create_date")
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.dmail.camp.date",
hiddenEditor = true
)
private Date createDate;
@Column(name = "last_sent_date")
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.dmail.camp.sent_date",
hiddenEditor = true
)
private Date lastSentDate;
//Handle thru editorFields
@Column(name = "user_groups")
@Size(max = 64)
@DataTableColumn(inputType = DataTableColumnType.HIDDEN)
private String userGroupsIds;
//Bind editor fields
@Transient
@DataTableColumnNested
private CampaingsEditorFields editorFields = null;
//From these two colulmns is concated editorFields.sentMails
@Column(name = "count_of_recipients")
private Integer countOfRecipients;
@Column(name = "count_of_sent_mails")
private Integer countOfSentMails;
@Transient
@DataTableColumn(inputType = DataTableColumnType.DATATABLE, title = " ",
tab = "receivers",
editor = { @DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-dt-url",
value = "/admin/rest/dmail/emails?campainId={id}&selectType=recipients"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-columns", value = "sk.iway.iwcm.dmail.jpa.EmailsEntity"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-serverSide", value = "true"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-forceVisibleColumns", value = "id,recipientName,recipientEmail,sentDate,status,groupIds"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-order", value = "3,desc")
}
)
})
private List<EmailsEntity> recipientsTab;
@Transient
@DataTableColumn(inputType = DataTableColumnType.DATATABLE, title = " ",
tab = "opens",
editor = { @DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-dt-url", value = "/admin/rest/dmail/emails?campainId={id}&selectType=opens"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-columns", value = "sk.iway.iwcm.dmail.jpa.EmailsEntity"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-serverSide", value = "true"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-hideButtons", value = "create,edit,remove,import,celledit,duplicate"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-forceVisibleColumns", value = "id,recipientName,recipientEmail,seenDate"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-order", value = "0,desc")
}
)
})
private List<EmailsEntity> opensTab;
@Transient
@DataTableColumn(inputType = DataTableColumnType.DATATABLE, title = " ",
tab = "clicks",
editor = { @DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-dt-url", value = "/admin/rest/dmail/stat-clicks?campainId={id}"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-columns", value = "sk.iway.iwcm.dmail.jpa.StatClicksEntity"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-serverSide", value = "true"),
@DataTableColumnEditorAttr(key = "data-dt-field-dt-hideButtons", value = "create,edit,remove,import,celledit,duplicate"),
}
)
})
private List<StatClicksEntity> statClicksTab;
@Column(name = "created_by_user_id")
private Integer createdByUserId;
@Column
@DataTableColumn(
inputType = DataTableColumnType.HIDDEN
)
private String attachments;
@MultipleEmails(checkUnsubscribed = false, canByEmpty = true)
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.replyTo",
tab = "advanced",
visible = false
)
@Size(max = 255)
@Column(name = "reply_to")
private String replyTo;
@MultipleEmails(checkUnsubscribed = false, canByEmpty = true)
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.ccEmail",
tab = "advanced",
visible = false
)
@Size(max = 255)
@Column(name = "cc_email")
private String ccEmail;
@MultipleEmails(checkUnsubscribed = false, canByEmpty = true)
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.bccEmail",
tab = "advanced",
visible = false
)
@Size(max = 255)
@Column(name = "bcc_email")
private String bccEmail;
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.dmail.campaigns.sendAt",
tab = "advanced",
visible = false,
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "before"),
}
)
}
)
@Column(name = "send_at")
private Date sendAt;
@Column(name = "domain_id")
private Integer domainId;
}