package crmdna.mail2;
import crmdna.client.Client;
import crmdna.group.Group;
import crmdna.member.MemberLoader;
import crmdna.member.MemberProp;
import crmdna.member.MemberQueryCondition;
import crmdna.user.User;
import java.util.Map;
import static crmdna.common.AssertUtils.ensure;
import static crmdna.common.AssertUtils.ensureNotNullNotEmpty;
/**
* Created by sathya on 11/9/15.
*/
public class MailMapFactory {
public static MailMap getFromMemberQueryCondition(MemberQueryCondition mqc, long groupId, String defaultFirstName,
String defaultLastName, String login) {
Client.ensureValid(mqc.client);
Group.safeGet(mqc.client, groupId);
User.ensureGroupLevelPrivilege(mqc.client, groupId, login, User.GroupLevelPrivilege.SEND_EMAIL);
mqc.subscribedGroupIds.add(groupId);
java.util.List<MemberProp> memberProps = MemberLoader.queryProps(mqc, login);
MailMap mailMap = new MailMap();
for (MemberProp memberProp : memberProps) {
String email = memberProp.contact.email;
if (email == null)
continue;
String firstName = memberProp.contact.firstName;
if ((firstName == null) || firstName.isEmpty()) {
ensureNotNullNotEmpty(defaultFirstName, "Default firstName not specified");
firstName = defaultFirstName;
}
mailMap.add(email, MailMap.MergeVarID.FIRST_NAME, firstName);
String lastName = memberProp.contact.lastName;
if ((lastName == null) || lastName.isEmpty()) {
ensureNotNullNotEmpty(defaultLastName, "Default lastName not specified");
lastName = defaultLastName;
}
mailMap.add(email, MailMap.MergeVarID.LAST_NAME, lastName);
}
return mailMap;
}
public static MailMap getFromListOfMap(java.util.List<Map<String, String>> listOfMap,
String defaultFirstName, String defaultLastName) {
MailMap mailMap = new MailMap();
for (int i = 0; i < listOfMap.size(); i++) {
Map<String, String> map = listOfMap.get(i);
ensure(map.containsKey("firstname"));
ensure(map.containsKey("lastname"));
ensure(map.containsKey("email"));
String firstName = map.get("firstname");
if (firstName == null) {
firstName = "";
}
firstName = firstName.trim();
String lastName = map.get("lastname");
if (lastName == null) {
lastName = "";
}
lastName = lastName.trim();
if (firstName.isEmpty())
firstName = defaultFirstName;
if (lastName.isEmpty() && !firstName.equals(defaultFirstName)) {
String[] split = firstName.split("\\s+");
if (split.length > 1 && !split[0].contains(".")) {
firstName = split[0];
//rest is last name
lastName = split[1];
for (int j = 2; j < split.length; j++) {
lastName = lastName + " " + split[j];
}
}
}
if (lastName.isEmpty()) {
lastName = defaultLastName;
}
String email = map.get("email").trim();
mailMap.add(email, firstName, lastName);
}
return mailMap;
}
}