CampaingsEditorFields.java
package sk.iway.iwcm.dmail.jpa;
import java.io.Serializable;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotEmpty;
import org.springframework.beans.BeanWrapperImpl;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.components.users.userdetail.UserDetailsService;
import sk.iway.iwcm.dmail.EmailDB;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.editor.service.WebpagesService;
import sk.iway.iwcm.i18n.Prop;
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.users.UserGroupsDB;
@Getter
@Setter
public class CampaingsEditorFields implements Serializable {
@DataTableColumn(inputType = DataTableColumnType.HIDDEN)
private Integer[] permisions;
@DataTableColumn(inputType = DataTableColumnType.HIDDEN)
private Integer[] emails;
//Replacement for CampaingsEntity.userGroupsIds, showen in table as text but hidden in editor
@DataTableColumn(inputType = DataTableColumnType.TEXT,
title = "components.email.regenerate.all.groups.title",
hiddenEditor = true,
filter = false,
sortAfter = "senderEmail"
)
private String userGroupsNames = "";
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.camp.send_emails",
hiddenEditor = true,
filter = false,
sortAfter = "lastSentDate")
private String sentMails;
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.dmail.campaings.status",
hiddenEditor = true,
filter = false,
sortAfter = "sentMails")
private String status;
//Get DocDetails then convert to emailsEntity.url (String)
@DataTableColumn(
inputType = DataTableColumnType.JSON,
title="components.dmail.admin_email.emailUrl",
className = "dt-tree-page",
tab = "main",
sortAfter = "id",
filter = false,
hidden = true //because it will be first in DT
)
@NotEmpty
private DocDetails pageToSend = null;
@DataTableColumn(
inputType = DataTableColumnType.ELFINDER,
title="email.attachment",
tab = "advanced",
hidden = true,
sortAfter = "sendAt",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "before"),
}
)
}
)
private String file1;
@DataTableColumn(
inputType = DataTableColumnType.ELFINDER,
title=" ",
tab = "advanced",
sortAfter = "editorFields.file1",
hidden = true
)
private String file2;
@DataTableColumn(
inputType = DataTableColumnType.ELFINDER,
title=" ",
tab = "advanced",
sortAfter = "editorFields.file2",
hidden = true
)
private String file3;
public void fromCampaingEntity(CampaingsEntity campOriginal, Prop prop, HttpServletRequest request) {
//Set this Editor fields
campOriginal.setEditorFields(this);
//Concate text for sentMails column (just info column)
sentMails = campOriginal.getCountOfSentMails() + " / " + campOriginal.getCountOfRecipients();
//nastav pageToSend
pageToSend = WebpagesService.getBasicDocFromUrl(campOriginal.getUrl());
//zoznam nazvov skupin pouzivatelov
userGroupsNames = UserGroupsDB.getInstance().convertIdsToNames(campOriginal.getUserGroupsIds());
//Take userGroupIds string, split on Individual ids, convert to Integer, push inside recieversGroupsArray
int[] userGroupsIds = Tools.getTokensInt(campOriginal.getUserGroupsIds(), ",");
List<Integer[]> splitPermsEmails = UserDetailsService.splitGroupsToPermsAndEmails(userGroupsIds);
permisions = splitPermsEmails.get(0);
emails = splitPermsEmails.get(1);
if(campOriginal.getId() != -1) {
//Set email status
String currentStatus = EmailDB.getStaus(campOriginal.getId().intValue());
if("disabled".equals(currentStatus)) {
status = prop.getText("components.dmail.campaings.status.disabled");
} else if ("enabled".equals(currentStatus)) {
status = prop.getText("components.dmail.campaings.status.enabled");
} else if ("all_sent".equals(currentStatus)) {
status = prop.getText("components.dmail.campaings.status.all_sent");
} else if ("unknown".equals(currentStatus)) {
status = prop.getText("components.dmail.campaings.status.unknown");
}
}
//process attachments, format is /files/path/filename.pdf;filename.pdf;/files/path/file2.pdf;file2.pdf;
if (Tools.isNotEmpty(campOriginal.getAttachments())) {
String[] tokens = Tools.getTokens(campOriginal.getAttachments(), ";");
int fileCounter = 1;
BeanWrapperImpl bw = new BeanWrapperImpl(this);
for (String token : tokens) {
if (token.startsWith("/")==false) continue;
try {
bw.setPropertyValue("file"+fileCounter, token);
} catch (Exception ex) {
Logger.error(CampaingsEditorFields.class, ex);
}
fileCounter++;
}
}
}
public void toCampaingEntity(CampaingsEntity campOriginal, HttpServletRequest request) {
//Check if url was changed
DocDB docDB = DocDB.getInstance();
if(campOriginal.getEditorFields().getPageToSend()!=null) {
String docLink = docDB.getDocLink(campOriginal.getEditorFields().getPageToSend().getDocId(), null, true, request);
if(!docLink.equals(campOriginal.getUrl())) campOriginal.setUrl(docLink);
} else campOriginal.setUrl("");
//Cannot be null
if(campOriginal.getCountOfSentMails() == null) campOriginal.setCountOfSentMails(0);
//process attachments, format is /files/path/filename.pdf;filename.pdf;/files/path/file2.pdf;file2.pdf;
StringBuilder attachments = new StringBuilder();
BeanWrapperImpl bw = new BeanWrapperImpl(campOriginal.getEditorFields());
for (int fileCounter=1; fileCounter<=3; fileCounter++) {
try {
String path = (String)bw.getPropertyValue("file"+fileCounter);
if (path==null || Tools.isEmpty(path)) continue;
int separator = path.lastIndexOf("/");
if (separator>1) {
String name = path.substring(separator+1);
attachments.append(path).append(";").append(name).append(";");
}
} catch (Exception ex) {
Logger.error(CampaingsEditorFields.class, ex);
}
}
if (attachments.length()<1) campOriginal.setAttachments(null);
else campOriginal.setAttachments(attachments.toString());
}
}